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

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

脚本代码如下:

#!/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/

相关内容:

发表评论