keep
简介
VRRP协议
Keepalived
一、配置说明
keepalived的配置位于/etc/keepalived/keepalived.conf,配置文件格式包含多个必填/可选的配置段,部分重要配置含义如下:
- global_defs: 全局定义块,定义主从切换时通知邮件的SMTP配置。
- vrrp_instance: vrrp实例配置。
- vrrp_script: 健康检查脚本配置。
细分下去,vrrp_instance配置段包括:
- state: 实例角色。分为一个MASTER和一(多)个BACKUP。
- virtual_router_id: 标识该虚拟路由器的ID,有效范围为0-255。
- priority: 优先级初始值,竞选MASTER用到,有效范围为0-255。
- advert_int: VRRP协议通告间隔。
- interface: VIP所绑定的网卡,指定处理VRRP多播协议包的网卡。
- mcast_src_ip: 指定发送VRRP协议通告的本机IP地址。
- authentication: 认证方式。
- virtual_ipaddress: VIP。
- track_script: 健康检查脚本。
vrrp_script配置段包括:
- script: 一句指令或者一个脚本文件,需返回0(成功)或非0(失败),keepalived以此为依据判断其监控的服务状态。
- interval: 健康检查周期。
- weight: 优先级变化幅度。
- fall: 判定服务异常的检查次数。
- rise: 判定服务正常的检查次数。
二、选举算法
keepalived中优先级高的节点为MASTER。MASTER其中一个职责就是响应VIP的arp包,将VIP和mac地址映射关系告诉局域网内其他主机,同时,它还会以多播的形式(目的地址224.0.0.18)向局域网中发送VRRP通告,告知自己的优先级。网络中的所有BACKUP节点只负责处理MASTER发出的多播包,当发现MASTER的优先级没自己高,或者没收到MASTER的VRRP通告时,BACKUP将自己切换到MASTER状态,然后做MASTER该做的事:1.响应arp包,2.发送VRRP通告。
MASTER和BACKUP节点的优先级如何调整?
首先,每个节点有一个初始优先级,由配置文件中的priority配置项指定,MASTER节点的priority应比BAKCUP高。运行过程中keepalived根据vrrp_script的weight设定,增加或减小节点优先级。规则如下:
1. 当weight > 0时,vrrp_script script脚本执行返回0(成功)时优先级为priority + weight, 否则为priority。当BACKUP发现自己的优先级大于MASTER通告的优先级时,进行主从切换。
2. 当weight < 0时,vrrp_script script脚本执行返回非0(失败)时优先级为priority + weight, 否则为priority。当BACKUP发现自己的优先级大于MASTER通告的优先级时,进行主从切换。
3. 当两个节点的优先级相同时,以节点发送VRRP通告的IP作为比较对象,IP较大者为MASTER。
主从的优先级初始值priority和变化量weight设置非常关键,配错的话会导致无法进行主从切换。比如,当MASTER初始值定得太高,即使script脚本执行失败,也比BACKUP的priority + weight大,就没法进行VIP漂移了。所以priority和weight值的设定应遵循: abs(MASTER priority – BAKCUP priority) < abs(weight)。
另外,当网络中不支持多播(例如某些云环境),或者出现网络分区的情况,keepalived BACKUP节点收不到MASTER的VRRP通告,就会出现脑裂(split brain)现象,此时集群中会存在多个MASTER节点。
转载请注明:HugNew » 小谈keepalived vip漂移原理与VRRP协议
最新文章
- jquery扩展(- _ -//
- javascript刷新父页面的内容
- 孙鑫视频学习:“operator +=” 不明确的问题解决方法
- JQuery源码分析(四)
- Google发布SSLv3漏洞简要分析报告
- HDU 5730 Shell Necklace cdq分治+FFT
- List 排序
- Activity和Servlet的相似之处和区别
- 【转】c#实现字符串倒序的n种写法
- eclipse中svn插件的安装和tortoiseSVN的安装
- HTML之前端操作div标签布局
- 使用GPA针对android应用的绘制分析
- 多文件中的static
- 安卓高级3 RecyclerView结合SwipeRefreshLayout并添加上拉
- QT之setstylesheet防止子窗体继承父窗体样式
- ASP.NET Core使用EntityFrameworkCore CodeFrist
- windows安装mysql5.7.xx解压版
- 通过 sqldf 包使用 SQL 查询数据框
- suggest parentheses around comparison in operand of &;|
- leetcode119
热门文章
- Mac下搭建react native开发环境
- 深入理解JMM(Java内存模型) --(五)锁
- C的结构体函数
- openStack Aio 环境的neutron agent-list和cluster 环境 CLI结果对比
- C++ 值初始化和默认初始化
- C++中虚析构函数的作用 (转载)
- 【第三届强网杯】write up
- 【css】回想下经典的布局
- [转]C语言/C++中如何产生随机数
- pyinstaller打包报错:AttributeError: &#39;str&#39; object has no attribute &#39;items&#39;