前言
什么是组播、单播
单播:在同一局域网内,两个设备点对点的通信就是单播通信。
组播:在同一网络可达范围内,一个网络设备与关心其数据的部分设备进行通信就是组播。
广播:在同一网络可达范围内,一个网络设备向本网络内所有设备进行通信就是广播。
简单地说,单播->组播->广播,是通信数量不断增加的通信方式。当然,通信数量的增多,带来的是通信设备的资源消耗更大,整体网络环境的复杂度更高。
在组播模式下,keepalived
将全部的心跳包信息都会向默认的224.0.0.18
的组播地址发送,这样会产生众多的无用信息,这对于有多个keepalived
实例时甚至会产生干扰和冲突,因此须要将组播模式改成单播默认是一种安全的做法,可以避免局域网内有大量的keepalived
形成虚拟路由id的冲突。
查看心跳包
#主节点确实使用了组播向224.0.0.18地址发送心跳包
[root@nginx keepalived]# /usr/sbin/tcpdump -i ens33 -nn -p vrrp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
21:17:57.446287 IP 192.168.118.129 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20
21:17:58.446695 IP 192.168.118.129 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20
21:17:59.447752 IP 192.168.118.129 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20
修改keepalived为单播模式
单薄模式须要关闭vrrp_strict,严格遵照vrrp协议这个选项
单播需要在VIP实例配置段加入单播的源地址和目标地址
下面配置单播,主要对配置单播进行讲解,其他参数含义不讲:
# MASTER主节点
! Configuration File for keepalived
global_defs {
router_id LB1
#vrrp_strict #关闭这个参数或者不加这个参数
}
vrrp_script check_nginx {
script /etc/keepalived/check_nginx.sh
interval 2
timeout 2
weight 0
rise 2
fall 2
user root
init_fail
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_nginx
}
unicast_src_ip 192.168.118.129 #配置单薄的源地址,即本机地址
unicast_peer {
192.168.118.132 #配置单薄的目标地址,即对方备节点地址,备有多台就配置多个地址
}
virtual_ipaddress {
192.168.118.100
}
}
# BACKUP 备节点
[root@node1 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LB2
#vrrp_strict #关闭这个参数或者不加这个参数
}
vrrp_script check_nginx {
script /etc/keepalived/check_nginx.sh
interval 2
timeout 2
weight 0
rise 2
fall 2
user root
init_fail
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_nginx
}
unicast_src_ip 192.168.118.132 #配置单薄的源地址,即本机地址
unicast_peer {
192.168.118.129 #配置单薄的目标地址,即对方节点地址,备有多台就配置多个地址
}
virtual_ipaddress {
192.168.118.100
}
}
[root@node1 keepalived]#
[root@master keepalived]# systemctl restart keepalived.service #重启主节点keepalived服务
[root@backup keepalived]# systemctl restart keepalived.service #重启备节点keepalived服务
[root@master keepalived]# ip a| grep '192.168.118.100' #vip依然在主节点上
inet 192.168.118.100/32 scope global ens33
[root@master keepalived]#
#现在就变成单播模式了,主节点只对备节点发送心跳包
[root@master keepalived]# tcpdump -i ens33 -nn -p vrrp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
21:29:13.033272 IP 192.168.118.129 > 192.168.118.132: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20
21:29:14.034674 IP 192.168.118.129 > 192.168.118.132: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20
21:29:15.034943 IP 192.168.118.129 > 192.168.118.132: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20
[root@master keepalived]#