一、基本概念
Keepalived 是一个用于实现高可用性和负载均衡的开源软件。它主要通过 IP 虚拟服务器(Virtual Server,简称 VRRP)和健康检查来实现故障切换和负载均衡。
Keepalived的原理是基于TCP/IP参考模型的第三、第四层和第五层交换机制来检测每个服务节点的状态。当某个服务器节点出现异常或工作出现故障时,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除。这些工作全部是自动完成的,不需要人工干涉。需要人工完成的只是修复出现故障的服务节点。
Keepalived 的工作原理:
-
VRRP 协议:
-
Keepalived 使用 VRRP 协议来实现高可用性。VRRP 允许多个服务器共享一个虚拟 IP 地址和一个虚拟 MAC 地址,其中一个服务器是主服务器,负责处理流量,其他服务器是备份服务器,处于热备状态。
-
所有服务器通过 VRRP 协议定期发送心跳包,主服务器发送广播通知其他备份服务器自己仍然处于活动状态。如果主服务器发生故障或无法通信,备份服务器中的一个将会接管虚拟 IP 地址,确保服务的可用性。
健康检查:
-
Keepalived 通过定期的健康检查来确保服务器的可用性。可以配置不同的检查方式,比如 TCP 检查、HTTP 检查、脚本检查等。
-
如果服务器在检查中被标记为不可用,Keepalived 将触发故障转移,将虚拟 IP 地址从故障的服务器迁移到备份服务器。
故障切换:
-
当主服务器发生故障或不可用时,Keepalived 会自动将虚拟 IP 地址迁移到一个备份服务器。这确保了服务的持续可用性。
-
一旦主服务器恢复,Keepalived 会自动将虚拟 IP 地址迁回主服务器,实现了故障的自动恢复。
二、Master-1配置
1、安装keepalived
yum install keepalived -y
2、配置keepalived
vim etc/keepalived/keepalived.conf
# 配置通知的email
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.51.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
# 注释掉vrrp_strict,开启会导致其他机器无法访问虚拟IP
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
# 检查mysql脚本,定时执行
vrrp_script check_run {
script "/usr/check_run.sh"
interval 3
}
# 设置虚拟ip
vrrp_instance VI_1 {
# 当前节点的状态MASTER、BACKUP
state MASTER
# 当前服务器使用的网卡名称,使用ifconfig查看
interface ens33
#VRRP组名,两个节点的设置必须一样
virtual_router_id 51
#主节点的优先级(1-254之间)
priority 100
#组播信息发送间隔,两个节点设置必须一样
advert_int 1
#设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟IP,对外提供MySQL服务的IP地址
virtual_ipaddress {
192.168.1.111
}
}
# master2
# 配置通知的email
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.51.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
# 注释掉vrrp_strict,开启会导致其他机器无法访问虚拟IP
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
# 检查mysql脚本,定时执行
vrrp_script check_run {
script "/usr/check_run.sh"
interval 3
}
# 设置虚拟ip
vrrp_instance VI_1 {
# 当前节点的状态MASTER、BACKUP
state BACKUP
# 当前服务器使用的网卡名称,使用ifconfig查看
interface ens33
#VRRP组名,两个节点的设置必须一样
virtual_router_id 51
#主节点的优先级(1-254之间)
priority 100
#组播信息发送间隔,两个节点设置必须一样
advert_int 1
#设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟IP,对外提供MySQL服务的IP地址
virtual_ipaddress {
192.168.1.111
}
}
3、配置check脚本
vim /usr/check_run.sh
#!/bin/bash
./root/.bashrc
count=1
while true
do
mysql -uroot -proot -S /tmp/mysql.sock -e "select now();" > /dev/null 2>&1
i=$?
ps aux | grep mysqld | grep -v grep > /dev/null 2>&1
j=$?
if [ $i = 0 ] && [ $j = 0 ]
then
exit 0
else
if [ $i = 1 ] && [ $j = 0 ]
then
exit 0
else
if [ $count -gt 5 ]
then
break
fi
let count++
continue
fi
fi
done
chmod 755 /usr/check_run.sh
4、启动keepalived
systemctl start keepalived.service #启动
systemctl stop keepalived.service #停止
systemctl status keepalived.service #状态
systemctl restart keepalived.service #重启
systemctl enable keepalived.service #设置开机重启
5、查看虚拟IP
三、Master-2配置
同Master-1的配置,不再赘述。
四、模拟故障切换测试
1、宕掉master-1,通过虚拟IP依然可以连接
修改数据测试
2、开启master-1,检查数据,发现数据已同步。
结论:通过keepalived实现MySQL的故障切换,可以正常运行。
本文教程参考以下链接实现,感谢原作者:不吃小龙虾哦的创作。
https://blog.csdn.net/shuo_house/article/details/127727769