部署 Keepalived 实现 MySQL 双主高可用架构

2022-12-23 19:40:31 浏览数 (1)

1.部署 MySQL 双主(Master – Master)集群

参考我的博文:《MySQL 双主 Master to Master 架构部署方法》

地址:http://www.sunbloger.com/2018/08/16/604.html

假设已经在 IP 为 192.168.0.1 和 192.168.0.2 的两台主机上部署好了 MySQL 双主集群,接下来我们进行 Keepalived 的部署。

2.修改 Linux 系统内核参数

# vi /etc/sysctl.conf

net.ipv4.ip_forward = 1 net.ipv4.ip_nonlocal_bind = 1 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2

完成修改并保存后,用下面的命令让配置立即生效 # sysctl -p

3.安装 Keepalived

推荐直接 yum 安装,命令如下: # yum install keepalived

4.配置 keepalived.conf

这里我们用 192.168.0.3 当做 VIP 进行配置

在 192.168.0.1 的主机上配置 keepalived.conf # vi /etc/keepalived/keepalived.conf

配置如下:

! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from jason.wei@xxxxx.com smtp_server 192.168.0.4 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 1 priority 100 advert_int 1 nopreempt # <—- 这个参数代表这台主机从故障中恢复后,不主动抢占回vip authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.3 } } virtual_server 192.168.0.3 3306 { delay_loop 2 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 60 protocol TCP real_server 192.168.0.1 3306 { weight 3 notify_down /etc/keepalived/shutdown.sh #MySQL访问失败时执行的脚本 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } } }

在 192.168.0.2 的主机上配置 keepalived.conf # vi /etc/keepalived/keepalived.conf

配置如下:

! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from jason.wei@xxxxx.com smtp_server 192.168.0.4 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 2 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.3 } } virtual_server 192.168.0.3 3306 { delay_loop 2 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 60 protocol TCP real_server 192.168.0.2 3306 { weight 3 notify_down /etc/keepalived/shutdown.sh TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } } }

5.创建一个当 MySQL 访问失败时执行的脚本,用于让故障主机的 Keepalived 服务停止,以便让集群中的其他主机接管 VIP 从而实现 VIP 的故障漂移。

分别在 192.168.0.1 和 192.168.0.2 两台主机上执行如下操作:

# vi /etc/keepalived/shutdown.sh

脚本代码如下:

代码语言:javascript复制
#!/bin/bash

if [ `ps -ef|grep -w "$0"|grep -v "grep"|wc -l` -gt 2 ];then
    exit 0
fi
logfile="/etc/keepalived/mysql_error.log"
echo -e "`date " %F %H:%M:%S"` MySQL service error, stop keepalived." >> ${logfile}
service keepalived stop &>> ${logfile}

上边这个 Shell 脚本,需要运行权限,命令如下: # chmod x /etc/keepalived/shutdown.sh

备注:这个脚本在前面的环节中已经被定义在了 keepalived.conf 的 notify_down 参数中

6.开启 Keepalived 服务,测试遇到故障时 VIP 是否可以正常漂移

分别启动 192.168.0.1 和 192.168.0.2 两台主机上的 Keepalived 服务,命令如下: # service keepalived start

两台主机的 Keepalived 服务器都启动后,我们可以通过访问 192.168.0.3 这个 VIP 来测试 MySQL 是否可以访问,为了测试,我们可以在两台主机以外的机器上来测试访问,例如:

# mysql -h 192.168.0.3 -uroot -p123456

用上述命令如果能够正常登录 MySQL 的话,接下来我们就可以停掉 192.168.0.1 上的 MySQL 进程,看 VIP 是否能够漂移到 192.168.0.2 这台主机上。

# service mysqld stop

再次尝试登录

# mysql -h 192.168.0.3 -uroot -p123456

如果依旧可以登录,就说明部署成功了。

阳光部落原创,更多内容请访问http://www.sunbloger.com/

0 人点赞