Keepalived支持4层和7层的虚拟路由切换,配置基于具体应用的高可用性架构,配置简单维护简洁,如配置MySQL的主从高可用架构,Nginx负载高可用架构配置。

今天来学习下Keepalived的组播和单播模式的原理、配置方法以及相关的实践建议。
一、先了解下组播与单播的工作原理
组播和单播主要区别:
|
特性 |
组播 (Multicast) |
单播 (Unicast) |
|
通信方式 |
一点对多点(一个包发给组内所有成员) |
点对点(数据包直接发送给指定对端) |
|
默认地址 |
224.0.0.18 |
无,需手动指定对端IP地址 |
|
配置复杂度 |
简单(使用默认地址) |
相对复杂(需配置对端IP) |
|
网络开销 |
在节点多的局域网中可能产生较多广播流量 |
针对性强,网络干扰小 |
|
安全性 |
相对较低(报文可能被局域网内其他设备接收) |
相对较高(报文只在指定节点间传递) |
|
适用场景 |
节点较少、网络允许组播的简单环境 |
节点较多、网络策略禁止组播或对稳定性要求高的环境 |
1.组播像是开会时的群发广播,效率高,但所有在"会议室"(同一局域网)里的人都能听到,可能在复杂网络环境中产生干扰。
2.单播则像是派发私人信件,需要知道对方的准确地址(IP),然后一对一发送,目标明确,不易干扰他人。
二、单播模式的高可用如何配置
当网络环境不支持组播,或者为了追求更稳定的通信时,单播模式是理想选择。如何判断网络环境是否支持组播模式,这里有三种方法。
方法一:使用tcpdump监听组播流量
在其中一个节点上运行tcpdump,监听VRRP使用的组播地址224.0.0.18,然后在另一个节点上启动Keepalived(组播模式),观察是否能够收到组播包。
1.在节点A上运行:
tcpdump -i <interface> host 224.0.0.18
例如:tcpdump -i eth0 host 224.0.0.18
在节点B上启动Keepalived(配置为组播模式)。
判断:观察节点A的tcpdump输出,如果没有看到VRRP报文,则可能组播不通。
方法二:使用ping测试组播
注意:ping命令默认使用单播,但可以使用ping来测试组播地址,不过这种方法并不标准,因为组播地址不能像单播地址那样直接ping通。但可以使用ping发送组播数据包,然后使用tcpdump在另一台机器上查看。
在节点A上运行tcpdump监听组播地址:
tcpdump -i eth0 host 224.0.0.18
在节点B上使用ping发送组播数据包:
ping -I eth0 -c 3 224.0.0.18
判断:在节点A上查看是否收到组播包。如果收到,则组播通;否则,可能不支持。
方法三:使用Keepalived日志
配置Keepalived使用组播模式,然后查看日志。
如果看到类似“IPVS: Can't initialize ipvs: Protocol not available”或VRRP协议无法正常通信的错误,可能是组播不通。
接下来,单播模式配置步骤
1. 关闭 vrrp_strict 模式:这是使用单播的前提,你需要在 global_defs 部分注释掉或确保没有 vrrp_strict 指令。
2. 指定单播对端:在 vrrp_instance 配置段中,使用 unicast_src_ip 指定本机的IP地址,使用 unicast_peer 指定对端的IP地址。
配置示例(主备模式)
非抢占模式下主备节点的单播配置。
Master节点 (优先级 100) 配置
# Master: /etc/keepalived/keepalived.conf
global_defs {
router_id keepalived_master # 本节点标识,唯一
}
vrrp_instance VI_1 {
state BACKUP # 非抢占模式下,主备都建议设为BACKUP
interface ens33 # 请替换为网卡名,如eth0
virtual_router_id 51 # 虚拟路由ID,主备节点必须相同
priority 100 # 优先级,Master通常更高
advert_int 1 # 心跳间隔(秒)
nopreempt # 非抢占模式,避免VIP频繁切换
authentication {
auth_type PASS
auth_pass 1111 # 认证密码,主备节点必须相同
}
# 单播配置关键部分
unicast_src_ip 192.168.1.104 # 本机的IP地址
unicast_peer {
192.168.1.106 # 对端(Backup)的IP地址
}
virtual_ipaddress {
192.168.1.120/24 # 虚拟IP(VIP),客户端通过此IP访问服务
}
}
Backup节点 (优先级 90) 配置
# Backup: /etc/keepalived/keepalived.conf
global_defs {
router_id keepalived_backup # 本节点标识,唯一
}
vrrp_instance VI_1 {
state BACKUP # 状态也为BACKUP
interface ens33
virtual_router_id 51 # 与Master相同
priority 90 # 优先级低于Master
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111 # 与Master相同
}
# 单播配置关键部分
unicast_src_ip 192.168.1.106 # 本机(Backup)的IP地址
unicast_peer {
192.168.1.104 # 对端(Master)的IP地址
}
virtual_ipaddress {
192.168.1.120/24 # 与Master相同的VIP
}
}
注意:在实际使用时,请务必将interface、unicast_src_ip 和 unicast_peer 中的IP地址替换为你服务器的真实IP。
注意事项
1. 避免脑裂 (Split-brain):脑裂指主备节点无法感知对方状态,都认为自己是Master并绑定了VIP。
确保网络连通:主备节点间的网络(心跳线)必须稳定可靠。
合理配置优先级与超时:确保advert_int 和优先级设置合理,让备份节点能正确判断主节点状态。
引入第三方仲裁:在复杂场景下,可通过额外的脚本或服务进行仲裁。
2. 使用非抢占模式(nopreempt):配置 nopreempt 可以避免因网络抖动等原因导致的VIP频繁在主备机间漂移,提升稳定性。在这种模式下,主备机的state 都建议设置为 BACKUP,初始主备由 priority 决定。
3. 结合健康检查 (Health Check):Keepalived的强大之处在于可以自定义脚本检查业务服务的健康状态(如Nginx、MySQL等)。如果检查失败,它会自动降低本机优先级,触发主备切换。
文章小结
选择组播还是单播(例如为Nginx还是MySQL做高可用),主要取决于网络环境和对稳定性的要求。在大多数生产环境中,特别是网络结构复杂或节点较多时,单播模式因其目标明确、干扰少而更受青睐。
文章推荐使用单播模式。
28

被折叠的 条评论
为什么被折叠?



