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 TCPreal_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 TCPreal_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/