centos7使用keepalived和mysql配置mysql
1.keepalived安装
参考centos7下keepalived1.4.0安装启动卸载章节:https://www.jianshu.com/p/f987f7e449ab
2.mysql主主配置
参考centos7下mysql5.7主主复制章节:https://www.jianshu.com/p/ed10e4162c68
3.keepalived配置
VIP:192.168.133.142,centos7
IP1:192.168.133.140,centos7
IP2:192.168.133.141,centos7
其中IP1的keepalived配置(本人配置文件在/etc/keepalived/keepalived.conf中)内容如下:
! Configuration File for keepalived
global_defs {
router_id mysql-1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.133.142//VIP地址
}
}
virtual_server 192.168.133.142 3306 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.133.140 3306 {
weight 3
notify_down /etc/keepalived/bin/mysql.sh //这个配置在keepalived1.4.0中好像有点问题,后续会说
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
connect_port 3306
}
}
}
IP2的keepalived配置内容如下:
! Configuration File for keepalived
global_defs {
router_id mysql-2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.133.142//VIP地址
}
}
virtual_server 192.168.133.142 3306 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.133.141 3306 {
weight 3
notify_down /etc/keepalived/bin/mysql.sh
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
connect_port 3306
}
}
}
上述配置配好后,重启keepalived:service keepalived restart
(4)验证
本人的VIP地址所属服务器是centos7,每次也需要开启这个服务器才能够使用这个IP,好像也有其他方式不需要开启这个服务器,具体就没去了解了。
开启后首先在宿主机win7下使用navicate分别使用VIP、IP1、IP2连接数据库,如果连接不同请考虑是否是网络或者防火墙问题。
连接成功后,可以看到VIP默认是在IP1上,这时停止IP1上的mysql服务:service mysqld stop。
网上说停止后keepalived本应该能通过notify_down监测到mysql停止事件,执行对应notify_dowm设置的mysql.sh脚本,停止keepalived运行,只有停止IP1上的keepalived运行,VIP才能自动切换到IP2上。(也有说是当real server宕掉或启动时才会执行这里的脚本)
但本人这里并没有执行该脚本,可能因为keepalived的版本原因,本人是直接通过命令:service keepalived stop方式停止的,停止后,在win7的navicate上重新用VIP地址连接,连接成功说明已经切换到IP2上了。
附注:
mysql.sh内容
#!/bin/bash
pkill keepalived
/sbin/ifdown eth0 && /sbin/ifup eth0
即杀死keepalived线程,然后重新启动网络。但是本人使用时,当mysql服务停止,并未执行该脚本。这个最新版本的keepalived里面有些属性有点变动,比如TCP_CHECK 里的retry关键字,在低版本是nb_get_retry。由于未找到新版本的配置属性说明,这里就没有太多深入去了解。