知识篇 | keepalived的单播和组播

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做高可用),主要取决于网络环境和对稳定性的要求。在大多数生产环境中,特别是网络结构复杂或节点较多时,单播模式因其目标明确、干扰少而更受青睐。

文章推荐使用单播模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值