架构图:
详细内容参考:
结果展示:
- 178.119.30.16(从)- master
- 178.119.30.17(从)- slave
由上述结果可以看出,产生了主备节点同时抢占VIP的问题(即脑裂问题)
解决方法:
#通过配置来指定IP的两台服务器间进行单播通讯
# 本地IP地址
unicast_src_ip 178.119.30.16
# 对端IP地址
unicast_peer {
178.119.30.17
}
- master
vim keepalived.conf
global_defs {
router_id LVS_1
script_user root
}
vrrp_script check_mysql_port {
script "/etc/keepalived/check_mysql_port.sh" # 脚本存放的位置
interval 2 # 每隔两秒运行上一行脚本
weight 2
}
vrrp_instance VI_1 {
# 主机=MASTER;备用机=BACKUP
state MASTER
# 该实例绑定的网卡名称
interface ens192
# 保证主备节点一致
virtual_router_id 150
# 权重,master值 > backup值
priority 100
# 主备组播报发送间隔时间1秒
advert_int 1
unicast_src_ip 178.119.30.16
unicast_peer {
178.119.30.17
}
# 认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
178.119.30.18
}
# 调用监控脚本
track_script {
check_mysql_port
}
}
- slave
vim keepalived.conf
global_defs {
router_id LVS_1
script_user root
}
vrrp_script check_mysql_port {
script "/etc/keepalived/check_mysql_port.sh" # 脚本存放的位置
interval 2 # 每隔两秒运行上一行脚本
weight 2
}
vrrp_instance VI_1 {
# 主机=MASTER;备用机=BACKUP
state BACKUP
# 该实例绑定的网卡名称
interface ens192
# 保证主备节点一致
virtual_router_id 150
# 权重,master值 > backup值
priority 50
# 主i备组播报发送间隔时间1秒
advert_int 1
unicast_src_ip 178.119.30.17
unicast_peer {
178.119.30.16
}
# 认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
178.119.30.18
}
# 调用监控脚本
track_script {
check_mysql_port
}
}
结果展示:
- 178.119.30.16(从)- master
- 178.119.30.17(从)- slave
VIP 漂移测试
systemctl stop keepalived
- 178.119.30.16(从)- master
- 178.119.30.17(从)- slave