10.0.0.7 lemon
10.0.0.8 lemon2
10.0.0.9 lemon3
 
程序代码里只需写一个VIP连接数据库即可,后面是连接在哪一台通过,keepalived的在服务端实现;通过检测脚本哪一台是master就把VIP飘在哪一台上
 
 
 
一、Mysql的组复制集群
参考前面博文
 
二、安装keepalived
 
wget http://www.keepalived.org/software/keepalived-1.2.24.tar.gz
tar -zxvf keepalived-1.2..tar.gz
cd keepalived-1.2.
./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/
 
四、修改keepalived配置文件
 
在这里,有几台mysql,就得在这些mysql上都装上keepalived ;
 
vim /etc/keepalived/keepalived.conf 把原来的全部删除,直接用这个就行
 
! Configuration File for keepalived

#指定mysql服务检测脚本
vrrp_script chk_mysql_port {
script "/root/chk_mysql.sh" #脚本路径
interval #脚本检测频率
weight - #脚本执行成功与否,权重怎么计算
fall #如果连续两次检测失败,认为节点服务不可用
rise #如果连续2次检查成功则认为节点正常
} vrrp_script chk_mysql_master {
script "/root/chk_mysql2.sh"
interval
weight
} vrrp_instance VI_1 {
state MASTER
interface eth0 #节点IP的网卡
virtual_router_id #同一个instance相同
priority # 优先级,数值越大,优先级越高
advert_int
authentication { #节点间的认证,所有的必须一致
auth_type PASS
auth_pass
}
virtual_ipaddress { #VIP,自定的,我觉得和外网的IP要一个网段
192.168.2.28
} track_script { #指定前面脚本的名字
chk_mysql_port
chk_mysql_master
} }
三台机器的不同点就是:
 
lemon: priority 100
lemon2: priority 98
lemon3: priority 96
 
这三个值不要相差太大,最好自己模拟一下算一下,看各种情况下是否是按照自己的预期得到权重;如果相差太大,weight值也比较小的时候,可能会导致备机的权重比主机的大
 
原理:
当通过chk_mysql.sh脚本检测mysql服务是否存在,如果执行了改变权重
通过/root/chk_mysql2.sh脚本检测本机是否是master机,是的话,改变权重
 
整体来说就是通过改变机器的权重来把VIP飘在权重最大的机器上的;我们要做的就是通过脚本判断是否执行,使得master的权重最高;这里的权限一定得控制好;
权重策略是:
当weight > 0时:脚本执行成功了 Priority+Weight 执行失败 Priority
当weight < 0时:脚本执行成功了 Priority 执行失败 Priority+Weight
 
每执行一次他的权重是重新开大会算的,并不是接着上一次的来
 
五、两个mysql检测脚本(三台机器上都要有)
 
1:检测mysql服务是否存在 chk_mysql.sh
 
#!/bin/bash

nc -z 127.0.0.1  |grep succeeded

a=`echo $?`

echo  > /tmp/ll

if [ $a -eq  ] ;then
service keepalived stop
fi
注:这里的nc命令得先在自己的机器上安装,yum -y install nc ;稍不注意没安装的话,后面测试的时候总不对,因为这个脚本总是返回错,就会到这priority与weight值不对
 
2:检测自己是不是master
 
#!/bin/bash

host=`/usr/local/mysql/bin/mysql -h127.0.0. -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
else
exit
fi
 
注:第一句是判断mysql组复制的master的hostname是什么,然后获取自己的master,看master是不是自己,如果是的话,返回0,返回0表示脚本执行成功了,则与配置文件里对应,weight+10;如果不是,返回1,表示脚本没有执行成功,weight不变;
 
/usr/local/mysql/bin/mysql -h127.0.0. -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')"
通过不需要直接登录进去打印出哪一台是主,这个是读操作,因此在所有机器上都能执行
 
 
 
在上面的基础上把hostname过滤出来与本机的hostname做对比(hostname也可以改成IP,但是考虑到可能一台机器有多个IP,不好判断),这样就知道自己是不是主,是的话就使优先级增加,这样keepalived的vip就会绑定到这台机器上,就能进行读写操作了
 
/usr/local/mysql/bin/mysql -h127.0.0. -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}'
 
 
这里还有一个重要的点是判断的时候,不能用echo去表示结果,因为echo总会执行,这样的话,不管是不是都会返回0,就会导致结果有问题
 
脚本里也可以把发送邮件加进去,这样每次切换的时候就知道
 
 
六、启动keepalived
 
1)service keepalived start ;启动完成后,看是否启动成功,ps -ef 和查看日志
 
keepalived的日志默认在/var/log/messages下,这里看到报错了
 
 
报这个错是因为:该平台的Virtual_router_id与其它平台的Virtual_router_id重复,把配置文件里的
virtual_router_id 88这个改一下,重启后,看日志如下:
 
 
 
这就表明启动成功了。
 
七、测试
 
1)首先通过mysql查看哪一台是mysql的master
 
 
这里可以看到是lemon机器,然后在主机名为lemon的这台机器上查看VIP是否在这台机器上绑定ip -a
 
2)查看VIP
 
注:查看是否绑定IP ip a命令 用ifconfig查看不到这里纠结了一下午,怎么改都看不到
 
 
 
这里可以看到VIP是绑定成功的
 
3)测试,把lemon这台机器的mysql停掉
 
 
然后通过这两台机器可以看mysql组复制的master在那台机器上,这里可以看到是lemon3上
 
 
然后去看,VIP是否绑定在lemon3那台机器上
 
 
 
4)通过VIP访问mysql,看是否能连接成功,并写入
 
在三台机器上都要添加权限
grant all on *.* to root@'%' identified by "";
flush privileges;
 
然后通过VIP可以连接上,并能写入数据:
 
 
把原来的lemon上的mysql启动,把master3的mysql停掉,继续通过VIP连接mysql看能不能写入和查看
 
 
报错了;说只有读权限;一看VIP绑定到lemon2去了,但是查看数据库的master是lemon
这是为什么呢,还以为是权限的问题呢;不是,是开始的时候lemon的mysql停掉了,就执行了把keepalived停掉的脚本,刚刚没有把keepalived开启,所以keepalived的VIP飘到另外一台去了
 
当一台mysql挂掉,找到问题解决好,一定要做的操作有:
 
1)启动mysql
/usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
 
2)打开组复制
set global group_replication_allow_local_disjoint_gtids_join=ON;
start group_replication;
 
3)启动keepalived
service keepalived restart
 
注:
测试的时候这里的脚本有可能不执行,这里经过排查是因为配置文件大括号前一定要有一个空格,加上重启后就执行了
 
 
 
 

keepalive实现MGR的自动切换(二)的更多相关文章

  1. ios基础篇(二十三)—— 定时器NSTimer与图片的自动切换

    一.NSTimer NSTimer是一个能在从现在开始到后面的某一个时刻或者周期性的执行我们指定的方法的对象.可以按照一定的时间间隔,将制定的信息发送给目标对象.并更新某个对象的行为.你可以选择在未来 ...

  2. nginx+keepalive主从双机热备+自动切换解决方案

    环境采集cenots 6.3 64位迷你安装,因为安装前,你需要做一些工作 yum install -y make wget 如果你愿意可以更新下系统,更换下yum源. 1.安装keepalive 官 ...

  3. mysql 8.0.18 mgr 搭建及其切换

    mysql 8.0.18 mgr 搭建及其切换 一.系统安装包 yum -y install make gcc-c++ cmake bison-devel ncurses-devel readline ...

  4. Nginx+Keepalived主从双机热备+自动切换

    1 安装配置nginx 参考: http://www.cnblogs.com/jager/p/4388202.html 2 安装配置keepalived tar xvf keepalived-1.2. ...

  5. 【转】双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计

    架构简介 前几天网友来信说帮忙实现这样一个架构:只有两台机器,需要实现其中一台死机之后另一台能接管这台机器的服务,并且在两台机器正常服务时,两台机器都能用上.于是设计了如下的架构.此架构主要是由kee ...

  6. ViewPager的基本使用--可左右循环切换也可自动切换

    ViewPager也算是Android自带的常用控件之一,但是有可能会无法直接调用,所以只需要将工程目录里/libs/android-support-v4.jar该jarAdd to Build Pa ...

  7. 双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计

    前几天网友来信说帮忙实现这样一个架构:只有两台机器,需要实现其中一台死机之后另一台能接管这台机器的服务,并且在两台机器正常服务时,两台机器都能用上.于是设计了如下的架构. 架构简介 此架构主要是由ke ...

  8. Redis主备自动切换

    Sentinel(哨兵)是用于监控redis集群中Master状态的工具. 一.Sentinel作用  1.Master状态检测   2.如果Master异常,则会进行Master-Slave切换,将 ...

  9. DataGuard failover dg role自动切换模式测试

    1,在脚本中代入create db flash backup point for recover dg 2,测试前主备库状态(备库现角色验证,主库监听状态-->有意stop) 主要验证思路, 脚 ...

随机推荐

  1. 1.6 安全认证与授权(springboot与安全)

    引言:以下文档是学习尚硅谷关于springboot教学视频后整理而来! 一.安全 认证(Authentication):证明你是谁? 授权(Authorization):你能干什么? 参考资料: Sp ...

  2. inline-block间隙问题总结, ,style一个样式后面 多加了一个 分号; 导致 样式失效

    1--- 样式最后的{}后面, 不能有分号 ; 2---- display:inline-block 后, 元素间会有间隙    原因:  由换行或者回车导致的. 解决一: 只要把标签写成一行或者标签 ...

  3. elbow 求拐点

    distancePointLine <- function(x, y, slope, intercept) {  ## x, y is the point to test.  ## slope, ...

  4. gis和threejs的学习资料

    *********************************** 基础知识/名词 瓦片/矢量瓦片GeoJson - 绘制GeoJson看数据, geojson规范, 中文版 ********** ...

  5. windows service 2008 R2 安装net4.6环境失败,windows service 2008 R2 升级sp1问题

    一.错误 1.因为我的程序是以vs2017开发的,在windows service 2008 R2  IIS部署项目文件报出错误,因此要安装net4.6的环境. 2.windows service 2 ...

  6. 【PAT】我要通过!

    “答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”. 得到“答案正确”的条件是: 1 ...

  7. 【LeetCode】不同路径

    如图,m × n 的网格的左上角作为起点,每次只能向右或向下移动一格,最终要到达右下角.求有多少条可能的路径. m,n 最大取 100. 我的想法是递归,分分钟实现 int uniquePaths(i ...

  8. less和sass的定义和区别

    less是单独的一种文件,可以理解为css的升级版: sass是一个相对新的编程语言,为web前端开发而生,可以用它来定义一套新的语法规则和函数: 区别: ①   表现方式不同:less基于javas ...

  9. flask 自动切换环境

    简介: 我就是个半吊子程序员.在单位写点程序,在家也写点程序. 单位是企业网,不能上互联网,家里也没办法连上企业网,没有VPN. 主武器是我的笔记本电脑.在单位有一台淘汰的linux服务器,家里有个N ...

  10. tensorFlow 零散知识

    收集一些碰到的关于细节的函数在这里记录下 1.tf.flags.DEFINE_xxx() 读别人家的代码的时候经常看到这个,结果两三天不看居然忘记了,这脑子绝对上锈了,决定记下来免得老是查来查去的.. ...