linux下安装keepalived实现mysql主主高可用

安装keepalived与mysql主主高可用
前提:已搭建mysql主主
环境:Centos7.3
IP1:10.10.133.117(主:master-jin)
IP2:10.10.133.118(从主:node1-jin)
VIP:10.10.133.129

1、两台机器上同样进行如下操作:
yum install -y wget curl gcc openssl-devel libnl3-devel net-snmp-devel
cd /opt/app/
wget https://www.keepalived.org/software/keepalived-2.0.1.tar.gz
tar -zxvf keepalived-2.0.1.tar.gz
cd keepalived-2.0.1/
./configure --prefix=/opt/app/keepalived

如果报configure: error: libnfnetlink headers missing

上传libnfnetlink-devel-1.0.1-13.el8.x86_64.rpm
执行 rpm -ivh libnfnetlink-devel-1.0.1-13.el8.x86_64.rpm --nodeps
再次编译:./configure --prefix=/opt/app/keepalived
make && make install
cp /opt/app/keepalived-2.0.1/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/
cp /opt/app/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /opt/app/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived/
cp /opt/app/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /opt/app/keepalived/sbin/keepalived /usr/sbin/
echo "/etc/init.d/keepalived start" >> /etc/rc.local

2、master机器上的keepalived.conf配置(下面配置中没有使用lvs的负载均衡功能,所以不需要配置虚拟服务器virtual server)
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf #清空默认内容,直接采用下面配置:
! Configuration File for keepalived

global_defs {
notp_server mail.umfintech.com
smtp_connect_timeout 30
router_id master-jin ## 标识本节点的字条串,通常为 hostname
}

vrrp_script chk_mysql_port { #检测mysql服务是否在运行。有很多方式,比如进程,用脚本检测等等
script "/home/umpay/UMSdata/chk_mysql.sh" #这里通过脚本监测
interval 2 #脚本执行间隔,每2s检测一次
weight -5 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
fall 3 #检测连续3次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise 2 #检测2次成功就算成功。但不修改优先级
}

vrrp_instance VI_1 {
state MASTER
interface ens33 #指定虚拟ip的网卡接口,根据网卡名称更改
mcast_src_ip 10.10.133.117
virtual_router_id 51 #路由器标识,MASTER和BACKUP必须是一致的
priority 100 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。这样MASTER故障恢复后,就可以将VIP资源再次抢回来
advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
#nopreempt #非抢占模式,开启需所有节点配置为BACKUP,根据priority大小进行匹配主备
authentication { # 设置验证信息,两个节点必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.10.133.129 #虚拟 ip,两个节点必须一致,可以定义多个,每行一个
}

track_script { # 检查 mysql 服务是否存活
chk_mysql_port
}
}
3、编写切换脚本

KeepAlived做心跳检测,如果Master的MySQL服务挂了(3306端口挂了),那么它就会选择自杀。Slave的KeepAlived通过心跳检测发现这个情况,就会将VIP的请求接管

vim /home/umpay/UMSdata/chk_mysql.sh

!/bin/bash

A=ps -C mysqld --no-header |wc -l
if [ $A -eq 0 ]; then
systemctl restart mysql
sleep 10
B=ps -C mysqld --no-header |wc -l
if [ $B -eq 0 ]; then
killall keepalived
fi
fi
chmod 755 /home/umpay/UMSdata/chk_mysql.sh

启动keepalived服务

/etc/init.d/keepalived start
4、master2机器上的keepalived配置。master2机器上的keepalived.conf文件只修改priority为90、nopreempt不设置、mcast_src_ip设置本地IP。
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
! Configuration File for keepalived

global_defs {
notp_server mail.umfintech.com
smtp_connect_timeout 30
router_id node1-jin
}

vrrp_script chk_mysql_port {
script "/home/umpay/UMSdata/chk_mysql.sh"
interval 2
weight -5
fall 3
rise 2
}

vrrp_instance VI_1 {
state BACKUP
interface ens33
mcast_src_ip 10.10.133.118
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.10.133.129
}

track_script {
chk_mysql_port
}
}

chmod 755 /home/umpay/UMSdata/chk_mysql.sh
/etc/init.d/keepalived start

5、#查看启动日志
tail -f /var/log/messages

6、#测试验证
1、ip a 查看主(master-jin)是否生成VRRP虚拟IP 133.29;
2、停止主(master-jin)上的mysql,然后查看mysql是否会被自动拉起;
3、killall keepalived 停止主(master-jin)上的keepalived,然后ip a查看备(node1-jin)是否生成VRRP虚拟IP 133.29。

posted @   小白不怕黑  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示