mysql学习(二) 使用keppalived实现mysql主–主集群的ip漂移
关于MYSQL“主–主”集群的搭建,请参考我的另一篇博客:
https://blog.csdn.net/yangkang1122/article/details/88912658
1 安装配置keppalived实现mysql主–主集群的ip漂移
1.1 在主节点a和主节点b上执行如下操作:
yum install -y openssl-devel
cd /usr/local/src/
wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz
tar -zvxf keepalived-1.3.5.tar.gz
cd keepalived-1.3.5
./configure --prefix=/usr/local/keepalived
make && make install
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
echo "/etc/init.d/keepalived start" >> /etc/rc.local
1.2 在主节点a上的修改keepalived.conf配置。
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf #清空默认内容,直接采用下面配置:
! Configuration File for keepalived
global_defs {
notification_email { //收件的邮箱
ops@wangshibo.cn
tech@wangshibo.cn
}
notification_email_from ops@wangshibo.cn //发送方邮件设置
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MASTER-HA
}
vrrp_script chk_mysql_port { #检测mysql服务是否在运行
script "/opt/chk_mysql.sh" #这里通过脚本监测,这是检测脚本的执行路径
interval 2 #脚本执行间隔,每2s检测一次
weight -5 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise 1 #检测1次成功就算成功。但不修改优先级
}
vrrp_instance VI_1 {
state MASTER
interface eth0 #指定虚拟ip的网卡接口
mcast_src_ip 10.10.10.26 //主机ip
virtual_router_id 51 #路由器标识,MASTER和BACKUP必须是一致的
priority 101 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。这样MASTER故障恢复后,就可以将VIP资源再次抢回来
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { //虚拟出的ip,和主机在同一网段
10.10.10.200
}
track_script {
chk_mysql_port
}
}
1.3 编写切换脚本对KeepAlived做心跳检测,如果主节点a的MySQL服务挂了(3306端口挂了),那么它就会选择自杀。主节点b的KeepAlived通过心跳检测发现这个情况,就会将VIP的请求接管:
vim /opt/chk_mysql.sh
#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
/etc/init.d/keepalived stop
Fi
chmod 755 /opt/chk_mysql.sh
service keepalived restart
1.4 在主节点b上修改keepalived配置。b机器上的keepalived.conf文件只修改priority为90、nopreempt不设置、real_server设置本地IP:
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
ops@wangshibo.cn
tech@wangshibo.cn
}
notification_email_from ops@wangshibo.cn
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MASTER-HA
}
vrrp_script chk_mysql_port { //检测脚本设置
script "/opt/chk_mysql.sh" //检测脚本路径
interval 2
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0 //指定网卡
mcast_src_ip 10.10.10.48 //主机ip
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { //虚拟出来的ip,和主机在同一网段,且主从节点虚拟出来ip必须一样
10.10.10.100
}
track_script {
chk_mysql_port
}
}
1.5 修改检测脚本:
vi /opt/chk_mysql.sh
#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
/etc/init.d/keepalived stop
fi
chmod 755 /opt/chk_mysql.sh
service keepalived restart
1.6 测试ip漂移:
在主节点a上,输入ip a s
在eth0网卡上看是否出现虚拟出来的ip:
** 停掉主节点 a上的mysql容器,此时mysql容器默认占用的3306端口不再占用,虚拟ip应漂移到主节点b上:**
因为我们在keepalived配置文件中设置的为抢占模式,则若在主节点a上重启mysql容器,在等待2s~3s后,虚拟ip应漂回到主节点a上,则使用 ip a s指令应该可以看到。这说明ip漂移成功。