65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2018年12月21日

CPOL

3分钟阅读

viewsIcon

30325

关于如何设置 Keepalived 进行 MySQL 自动故障转移的教程。

引言

Keepalived 是Linux中的一个轻量级高可用性框架解决方案。它使用Linux虚拟服务器 (LVS) 来执行负载均衡和故障转移任务。Keepalived 可以用于监控系统,并在出现问题时自动故障转移到备用服务器。如果主服务器宕机,浮动 IP 将自动转移到第二台服务器,从而恢复服务。

Keepalived 如何工作?

在主从复制数据库设置中,当主服务器发生故障时,我们需要手动进行配置更改,才能故障转移到下一个可用的服务器。发生这种情况时,由于手动故障转移需要时间,因此预计会出现停机。

Keepalived 是一个提供接口故障转移的实用程序。通过对 Keepalived 的良好实现,您将能够在主服务器不可用时故障转移虚拟 IP 地址,并自动将该 IP 切换到热备用服务器。 因此,第二台服务器将处理流量,而生产环境中不会出现任何停机。

必备组件

在本教程中,我们将使用 CentOS Linux 作为操作系统。以下是您需要首先设置才能完成本指南的先决条件

  1. 可用的 MySQL 主从复制
    要设置主从复制,请按照此处的步骤操作。
  2. 主服务器的虚拟 IP 地址 (VIP)
    您可以按照此处的步骤学习如何在服务器上配置 VIP。

本教程的网络场景

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 日:初始版本
© . All rights reserved.