在 CentOS 上使用 Keepalived 进行 MySQL 自动故障转移。





5.00/5 (2投票s)
关于如何设置 Keepalived 进行 MySQL 自动故障转移的教程。
引言
Keepalived 是Linux中的一个轻量级高可用性框架解决方案。它使用Linux虚拟服务器 (LVS) 来执行负载均衡和故障转移任务。Keepalived 可以用于监控系统,并在出现问题时自动故障转移到备用服务器。如果主服务器宕机,浮动 IP 将自动转移到第二台服务器,从而恢复服务。
Keepalived 如何工作?
在主从复制数据库设置中,当主服务器发生故障时,我们需要手动进行配置更改,才能故障转移到下一个可用的服务器。发生这种情况时,由于手动故障转移需要时间,因此预计会出现停机。
Keepalived 是一个提供接口故障转移的实用程序。通过对 Keepalived 的良好实现,您将能够在主服务器不可用时故障转移虚拟 IP 地址,并自动将该 IP 切换到热备用服务器。 因此,第二台服务器将处理流量,而生产环境中不会出现任何停机。
必备组件
在本教程中,我们将使用 CentOS Linux 作为操作系统。以下是您需要首先设置才能完成本指南的先决条件
本教程的网络场景
Master Server – 192.168.40.222
Slave Server – 192.168.40.223
Virtual IP Address – 192.168.40.224
教程
步骤 1. 安装 Keepalived
Keepalived 通常在大多数 Linux 存储库中可用。 以下是在两台服务器上安装 Keepalived 服务的命令
sudo yum -y install keepalived
步骤 2. 备份默认 Keepalived 配置文件
让我们备份默认的 Keepalived 配置文件,以防您以后想将其用作模板或参考。
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.back
步骤 3. 在主服务器中配置 Keepalived 配置文件
您可以复制下面的配置块,但您必须针对您的环境进行适当的更改,包括 IP 和接口、优先级和 unicast_peer
。
位置:/etc/keepalived/keepalived.conf
vrrp_script chk_mysql {
script "pidof mysqld"
interval 2 # every 2 seconds
weight 2
}
vrrp_instance VI_1 {
interface enp0s3 # the network interface to which the virtual address is assigned
state MASTER # MASTER for master server
virtual_router_id 50 # the virtual router ID must be unique to each VRRP instance
unicast_src_ip 192.168.40.222 # IP address of Master Server
unicast_peer {
192.168.40.223 # IP address of Slave Server
}
priority 102 # master server should always have a higher priority number
# than the slave
track_script {
chk_mysql
}
virtual_ipaddress {
192.168.40.224/24 dev enp0s3 # Virtual IP address
}
}
提示
运行此命令以显示当前网络配置并查看服务器中配置的网络接口
ip addr show
通过此命令,您还可以看到分配给主服务器的虚拟 IP 地址,如下所示
请注意,虚拟 IP 地址 (192.168.40.224
) 已分配给主服务器 (192.168.40.222
)
步骤 4. 在从服务器中配置 Keepalived 配置文件
同样,您可以复制下面的配置块,但您需要针对您的环境进行适当的更改。
位置:/etc/keepalived/keepalived.conf
vrrp_script chk_mysql {
script "pidof mysqld"
interval 2 # every 2 seconds
weight 2
}
vrrp_instance VI_1 {
interface enp0s3 # the network interface to which the virtual address is assigned
state BACKUP # BACKUP for slave server
virtual_router_id 50 # the virtual router ID must be unique to each VRRP instance
unicast_src_ip 192.168.40.223 # IP address of Slave Server
unicast_peer {
192.168.40.222 # IP address of Master Server
}
priority 101 # slave server should have a priority number lower than the slave
track_script {
chk_mysql
}
virtual_ipaddress {
192.168.40.224/24 dev enp0s3 # Virtual IP address
}
}
步骤 5. 在两台服务器上运行命令
在两台服务器上运行此命令以配置防火墙
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0
--in-interface enp0s3 --destination 224.0.0.18 --protocol vrrp -j ACCEPT;
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0
--out-interface enp0s3 --destination 224.0.0.18 --protocol vrrp -j ACCEPT;
firewall-cmd –reload;
步骤 6. 配置 Keepalived 服务
配置 Keepalived 服务以在服务器启动时自动启动
systemctl enable keepalived
步骤 7. 启动 Keepalived 服务
启动 Keepalived 服务
systemctl start keepalived
步骤 8. 检查 Keepalived 的状态
现在通过以下方式检查主服务器和从服务器上 Keepalived 的状态
service keepalived status
如果状态指示为活动状态,如下所示,您将知道是否已正确配置 Keepalived 服务
注释
以下是您需要控制 Keepalived 的以下命令
service keepalived start - used to start the Keepalived service
service keepalived stop - used to stop the Keepalived service
service keepalived restart - used to restart the Keepalived service
service keepalived status - used to check the status of the Keepalived service
如果您遇到这样的问题
Keepalived[1650]: WARNING - default user 'keepalived_script'
for script execution does not exist - please create.
通过以下方式解决此问题
sudo useradd -g users -M keepalived_script
并重新启动 Keepalived 服务
sudo systemctl restart keepalived
您可以在此处检查 keepalived 的日志
/var/log/messages
测试
对于最令人期待的测试 Keepalived 是否可以进行故障转移的部分,让我们首先关闭主服务器 (192.168.40.222
) 来测试它。
现在,您将看到虚拟 IP 地址 (192.168.40.224
) 现在已转移到从服务器 (192.168.40.223
)。
检查从服务器中 Keepalived 的状态。
历史
- 2019 年 12 月 5 日:初始版本