目录
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 keepalived
global_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 #填写本机ip
priority 100 #主节点优先级,主要比从节点优先级高
#garp_master_delay 30
advert_int 1 #每隔1s发送一次心跳
authentication {
auth_type PASS
auth_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 keepalived
global_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 #填写本机ip
priority 80 #主节点优先级,主要比从节点优先级高
#garp_master_delay 30
advert_int 1 #每隔1s发送一次心跳
authentication {
auth_type PASS
auth_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进程宕机了,尝试重启MySQL
systemctl start mysqld
# 等待一小会再次检查MySQL,如果没有启动成功,则停止keepalived,使其启动备用机
sleep 3
if [ `ps -C mysqld --no-header | wc -l` -eq 0 ]; then
echo "$(date +%Y-%m-%d' '%H:%M:%S) MySQL已停止!停止keepalived!" | tee -a ${logPath}/check_service.log
systemctl stop keepalived
exit 1
fi
else
echo "$(date +%Y-%m-%d' '%H:%M:%S) MySQL正在运行!" | tee -a ${logPath}/check_service.log
exit 0
fi
编写并调试好后,给脚本添加可执行权限。
然后重启备份服务器上的keepalived服务,确定虚拟IP地址绑定到主服务器上的网卡上。
5、在主服务器和备用服务器上查看虚拟IP是否绑定到ens33网卡上。
6、高可用验证
6.1 模拟宕机,查看虚拟IP是否漂移到备用服务器上,验证高可用效果
方法1:systemctl stop mysqld,停止mysqld服务
方法2:kill杀死mysqld的运行进程,停止mysqld服务