目录
1、环境准备
2、分别在主服务器和备用服务器上安装keepalived
3、修改keepalived服务的配置文件
3.1 修改主服务器上的keepalive服务的配置文件
3.2 修改备用服务器上的keepalive服务配置文件
4、编写mysql监控脚本放到主服务器上
5、在主服务器和备用服务器上查看虚拟IP是否绑定到ens33网卡上。
6、高可用验证
6.1 模拟宕机,查看虚拟IP是否漂移到备用服务器上,验证高可用效果
keepalived服务工作原理参考之前写的博文:
nginx配置实例-高可用主备模式_nginx主备模式-CSDN博客
1、环境准备
主机名 | IP地址 | 说明 |
主服务器mysql_master | 192.168.81.131/24 | 已安装且部署好mysql主从热备 |
备用服务器mysql_slave | 192.168.81.132/24 | 已安装且部署好mysql主从热备 |
mysql主从热备部署参考上一篇博文:
mysql主从热备部署-CSDN博客
2、分别在主服务器和备用服务器上安装keepalived
使用yum方式安装
yum install keepalived -y
安装好后,将keepalivd程序开启,并且加入到开机启动项中。
systemctl start keepalived
systemctl enable keeaplived
3、修改keepalived服务的配置文件
yum方式安装的配置文件在/etc/keepalived目录下。
3.1 修改主服务器上的keepalive服务的配置文件
修改配置文件前,先做好备份!!!
使用sed命令将配置文件中默认内容删除
将下面参数复制到配置文件/etc/keepalived/keepalived.conf中
[root@mysql_master ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email { #设置报警邮件地址,需要开启本机postfix或者sendmail服务;xxx@alibaba-inc@qq.com}notification_email_from root@localhost.com #用于设置邮件的发送地址,即报警邮件发送者;smtp_server 127.0.0.1 #用于设置邮件的SMTP Server地址;smtp_connect_timeout 30 #设置连接SMTP Server的超时时间;router_id LVS_DEVEL #LVS_DEVEL #这字段在/etc/hosts文件中看;通过它访问到主机
}vrrp_script chk_mysql {script /etc/keepalived/scripts/chk_mysql.sh #监控nginx脚本路径interval 2 #检测时间间隔weight -10 #如果条件成立的话,则权重 -10
}vrrp_instance VI_1 { state MASTER #主从状态(MASTER/BACKUP)interface ens33 #绑定虚拟 IP 的网络接口,注:ip addr查询virtual_router_id 52 #虚拟路由的 ID 号, 两个节点设置必须一样mcast_src_ip 192.168.81.131 #填写本机ippriority 100 #主节点优先级,主要比从节点优先级高 #garp_master_delay 30advert_int 1 #每隔1s发送一次心跳authentication { auth_type PASSauth_pass 1111 #校验类型:密码=1111}# 将track_script块加入 instance 配置块track_script {chk_mysql #执行mysql监控服务}virtual_ipaddress {192.168.81.138 #虚拟ip(设置虚拟ip网段需要同一个,需要根据项目去调整 )}
}
修改好配置后,重启keepalived服务,使得配置文件的修改内容生效。
3.2 修改备用服务器上的keepalive服务配置文件
配置步骤与3.1步骤相似,但是配置文件的内容略有不同。
[root@mysql_slave keepalived]# cat keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email { #设置报警邮件地址,需要开启本机postfix或者sendmail服务xxx@alibaba-inc@qq.com}notification_email_from root@localhost.com #用于设置邮件的发送地址,即报警邮件发送者;smtp_server 127.0.0.1 #用于设置邮件的SMTP Server地址;smtp_connect_timeout 30 #设置连接SMTP Server的超时时间;router_id LVS_DEVEL #LVS_DEVEL #这字段在/etc/hosts文件中看;通过它访问到主机
}vrrp_script chk_mysql {script /etc/keepalived/scripts/chk_mysql.sh #监控mysql脚本路径interval 2 #检测时间间隔weight -10 #如果条件成立的话,则权重 -10
}vrrp_instance VI_1 {state BACKUP #主从状态(MASTER/BACKUP)interface ens33 #绑定虚拟 IP 的网络接口,注:ip addr查询virtual_router_id 52 #虚拟路由的 ID 号, 两个节点设置必须一样mcast_src_ip 192.168.81.132 #填写本机ippriority 80 #主节点优先级,主要比从节点优先级高#garp_master_delay 30advert_int 1 #每隔1s发送一次心跳authentication { auth_type PASSauth_pass 1111 #校验类型:密码=1111}# 将track_script块加入 instance 配置块track_script {chk_mysql #执行mysqld监控服务}virtual_ipaddress {192.168.81.138 #虚拟ip(设置虚拟ip网段需要同一个,需要根据项目去调整 )}
}
4、编写mysql监控脚本放到主服务器上
根据上面配置文件定义的监控路径来创建目录存放mysq服务的监控脚本。
编写监控脚本/etc/keepalived/scripts/chk_mysql.sh
#!/bin/bash# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# + 1、此脚本为MySQL监控脚本,与keepalived组件配合使用
# + 2、keepalived配置文件:/etc/keepalived/keepalived.conf
# + 3、脚本输出日志/etc/keepalived/check_service.log
# + 4、默认脚本路径在/etc/keepalived/scripts下,需要改变路径,请修改keepalived配置
# + 5、创建此脚本后请赋予可执行权限chmod +x /etc/keepalived/scripts/chk_mysql.sh
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++# 基础参数
DATE=`date +%Y%m%d`
logPath=/etc/keepalived# 检测MySQL进程是否正常运行
A=`ps -C mysqld --no-header | wc -l`
#将脚本中的输出内容同时输出到终端和指定的日志文件中,并以追加的方式写入日志文件。这样可以方便查看脚本的输出并记录日志信息。
echo "$(date +%Y-%m-%d' '%H:%M:%S) MySQL进程数:$A" | tee -a ${logPath}/check_service.log
if [ $A -eq 0 ]; then# 如果MySQL进程宕机了,尝试重启MySQLsystemctl start mysqld# 等待一小会再次检查MySQL,如果没有启动成功,则停止keepalived,使其启动备用机sleep 3if [ `ps -C mysqld --no-header | wc -l` -eq 0 ]; thenecho "$(date +%Y-%m-%d' '%H:%M:%S) MySQL已停止!停止keepalived!" | tee -a ${logPath}/check_service.logsystemctl stop keepalivedexit 1fi
elseecho "$(date +%Y-%m-%d' '%H:%M:%S) MySQL正在运行!" | tee -a ${logPath}/check_service.logexit 0
fi
编写并调试好后,给脚本添加可执行权限。
然后重启备份服务器上的keepalived服务,确定虚拟IP地址绑定到主服务器上的网卡上。
5、在主服务器和备用服务器上查看虚拟IP是否绑定到ens33网卡上。
6、高可用验证
6.1 模拟宕机,查看虚拟IP是否漂移到备用服务器上,验证高可用效果
方法1:systemctl stop mysqld,停止mysqld服务
方法2:kill杀死mysqld的运行进程,停止mysqld服务