一、简述
MGR单主模式,不再叙述
https://blog.51cto.com/u_13236892/3840342
主要介绍keepalived
二、实际配置
1、安装
wget http://www.keepalived.org/software/keepalived-1.2.24.tar.gz
tar -zxvf keepalived-1.2.24.tar.gz
cd keepalived-1.2.24
./configure --prefix=/usr/local/keepalived
make && make install
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
2、配置
1、/etc/keepalived/keepalived.conf
! Configuration File for keepalived
#指定mysql服务检测脚本
vrrp_script chk_mysql_port {
script "/root/chk_mysql.sh" #脚本路径
interval 2 #脚本检测频率
weight -5 #脚本执行成功与否,权重怎么计算
fall 2 #如果连续两次检测失败,认为节点服务不可用
rise 1 #如果连续2次检查成功则认为节点正常
}
vrrp_script chk_mysql_master {
script "/root/chk_mysql2.sh"
interval 2
weight 10
}
vrrp_instance VI_1 {
state MASTER
interface eth0 #节点IP的网卡
virtual_router_id 88 #同一个instance相同
priority 100 # 优先级,数值越大,优先级越高
advert_int 1
authentication { #节点间的认证,所有的必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #VIP,自定的,我觉得和外网的IP要一个网段
192.168.2.28
}
track_script { #指定前面脚本的名字
chk_mysql_port
chk_mysql_master
}
}
两个都是MASTER,权重priority一个是100,一个是98,其他都一样
当通过chk_mysql.sh脚本检测mysql服务是否存在,如果执行了改变权重
通过/root/chk_mysql2.sh脚本检测本机是否是master机,是的话,改变权重
整体来说就是通过改变机器的权重来把VIP飘在权重最大的机器上的;我们要做的就是通过脚本判断是否执行,使得master的权重最高;这里的权限一定得控制好;
权重策略是:
当weight > 0时:脚本执行成功了 Priority+Weight 执行失败 Priority
当weight < 0时:脚本执行成功了 Priority 执行失败 Priority+Weight
每执行一次他的权重是重新开大会算的,并不是接着上一次的来
2、chk_mysql.sh
#!/bin/bash
nc -z 127.0.0.1 3306 &>/dev/null
a=`echo $?`
echo 1 > /tmp/ll
if [ $a -eq 1 ] ;then
service keepalived stop
fi
3、chk_mysql2.sh
#!/bin/bash
host=`/usr/local/mysql/bin/mysql -h127.0.0.1 -uroot -p123456 -e "SELECT * FROM performance_schema.replication_group_members WHERE MEMBER_ID
= (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME= 'group_replication_primary_member')" |awk 'NR==2{print}'|awk -F" " '{print $3}'`
host2=`hostname`
if [ $host == $host2 ] ;then
exit 0
else
exit 1
fi
第一句是判断mysql组复制的master的hostname是什么,然后获取自己的master,看master是不是自己,如果是的话,返回0,返回0表示脚本执行成功了,
则与配置文件里对应,weight+10;如果不是,返回1,表示脚本没有执行成功,weight不变;
3、启动
service keepalived start ;启动完成后,看是否启动成功,ps -ef 和查看日志
keepalived的日志默认在/var/log/messages下,这里看到报错了