一、keepalive简介
keepalived是基于VRRP协议(虚拟冗余路由协议),该协议是为了解决静态路由器单点故障的网络失效问题而设计的一套主备协议。在MySQL高可用中两台互为主备的服务器运行keepalived,master会向backup节点发送广播信号,当backup节点接收不到master发送的VRRP包时,会认为master宕机,这时会根据VRRP的优先级来选举出一个backup充当master,这时该master就会持有VIP,从而保证了线上业务的正常运行。keepalived服务启动后由三个进程工作:watch dog、vrrp、Health-check,其中watch dog负责监控vrrp和Health-check进程,vrrp负责master的切换,Health-check则是检测服务器健康状态。
VRRP的优先级决定了由谁来做为新的master,用0~255表示,数字越小表示优先级越低,VRRP优先级取值范围时1到254,当为0时表示放弃持有VIP,为255时表示当前master优先级最高并持有VIP。
二、架构搭建
注意事项:
{1}要完善好切换脚本,切换机制要合理,避免切换失败现象发生
{2}从库配置尽量和主库一致,性能不要太差,防止发生切换后无法支撑业务
{3}该架构不能避免延迟问题,可以改变架构模式为PXC完成实时同步,可以实现基本无延迟
{4}keepalived无法解决脑裂问题
{5}两节点状态均需设置为backup状态且是nopreempt(非抢占模式),通过优先级决定谁为主库
2.1 实验部署
2.1.1 环境介绍
192.168.56.11-主A、192.168.56.12-主B、192.168.56.111-VIP
2.1.2 首先搭建MySQL的双主架构(主从均需执行如下操作)
create user 'bak'@'192168.56.%' identified by '123456';
grant replication slave on *.* to 'bak'@'192.168.56.%';
flush privileges;
change master to master_host='192.168.56.12',master_user='bak',master_password='123456',master_auto_position=1;
start slave;
2.1.3 安装keepalived软件包(主从服务器均需安装)
yum install -y keepalived
rpm -qa |grep keepalived
2.1.4 配置检测MySQL数据库的脚本(主从服务器均需安装)
vim /etc/keepalived/checkmysql.sh
#!/bin/bash
mysqlstr=/usr/local/mysql/bin/mysql
host=192.168.56.11
user=zs
password='123456'
port=3306
##MYSQL服务状态正常为1,否则为0
mysql_status=1
##检测MySQL的状态
$mysqlstr -h $host -u $user -p$password -P $port -e "show status;" >/dev/null 2>&1
if [ $? = 0 ] ;then
echo "mysql_status=1"
exit 0
else
/etc/init.d/keepalived stop
fi
chmod +x /etc/keepalived/checkmysql.sh
2.1.5 在两台服务器上修改keepalived配置文件
vi /etc/keepalived/keepalived.conf
##设置一个脚本来检测MySQL状态,脚本执行间隔设置为10s较为合理
vrrp_script vs_mysql_11 {
script "/etc/keepalived/checkmysql.sh"
interval 10
}
vrrp_instance VI_11 { ##集群名称##
state BACKUP ##指定keepalived的角色,两台机器需设为backup角色
nopreempt ##两台机器均需设为非抢占模式
interface eth0 ##VIP绑定网卡位置为eth0
virtual_router_id 100 ##vrid的值为100,两台机器必须一致
priority 100 ##代表优先级,56.11优先级为100,56.12优先级为90
advert_int 5 ##主备之间同步检查的时间间隔为5s
authentication {
auth_type PASS
auth_pass 123456 ##验证密码,主备需保持一致
}
track_script {
vs_mysql_11 ##执行监控的服务
}
virtual_ipaddress {
192.168.56.111 ##虚拟IP地址
}
}
注意:两台服务器的keepalived配置中,state需都为backup且是非抢占模式nopreempt。virtual_router_id 100和虚拟IP要一致。vrrp_script和vrrp_instance可改变
2.1.6 启动keepalived
/etc/init.d/keepalived start
ps -ef|grep keepalived
查看启动日志文件:cat /var/log/messages