参考官方地址:
https://github.com/hcymysql/mgr_failover_vip
简介
MGR(组复制)官方推荐用MySQL router中间件去做MGR高可用故障转移,但其多过了一层网络,性能会下降,并且需要额外维护一套中间件,运维成本过高,于是写了一个类似MHA的master_ip_failover脚本,实现VIP切换。
1)脚本会自动设置当前Primary和备选Primary参数group_replication_member_weight值为100(权重100,默认为50的Secondary不进行vip切换)
2)脚本会自动设置当前Primary和备选Primary参数group_replication_consistency值为BEFORE_ON_PRIMARY_FAILOVER(意思为当Primary挂了的时候,备选Primary只有把事务全部执行完毕,才提供客户端读写操作)
3)最好生产关闭限流模式set global group_replication_flow_control_mode = 'DISABLED',以防止高并发期间自动触发限流,造成主库不可写,引起生产事故。
-
环境准备:
-
shell> yum install -y php-process php php-mysql
-
开通监控管理机和MGR SSH互信(可用MHA的masterha_check_ssh脚本做检测)
-
手工添加VIP地址
-
shell> ip addr add 192.168.148.100/32 dev eth0 ; arping -q -c 2 -U -I eth0 192.168.148.100
-
MGR(组复制)高可用VIP切换脚本
-
运行条件:
-
Modified by: hcymysql 2019/07/24
-
1、MySQL 8.0版本
-
2、single-primary mode(单主模式)
-
3、Native Password Authentication(5.5/5.6/5.7传统用户认证模式)
-
例:
CREATE USER 'hechunyang'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT ALL ON . TO 'hechunyang'@'%' WITH GRANT OPTION;
Usage:
Options:
-I interval time seconds 设置守护进程下间隔监测时间
--daemon 1 开启后台守护进程,0关闭后台守护进程
--conf 指定配置文件
--help 帮助
Example :
前台运行
shell> php mgr_master_ip_failover.php --conf=mgr_configure1.php
后台运行
shell> nohup /usr/bin/php mgr_master_ip_failover.php --conf=mgr_configure1.php -I 5 --daemon 1 > /dev/null 2>&1 &
关闭后台运行
shell> php mgr_master_ip_failover.php --conf=mgr_configure1.php --daemon 0
mgr_configure1.php为配置文件,你可以配置多个监控配置文件,监控多套MGR环境。
使用
MGR搭建此处不赘述,参考如下文章即可
https://www.cnblogs.com/voldemort/p/14035625.html
重点说明一些参数
若单个事务太大,无法在5秒的时间内通过网络在组成员之间复制消息(message),则可能会怀疑成员失败了,然后将其驱逐出局。
此外,大型事务可能还会由于内存分配问题导致系统变慢。为避免这些问题,请使用以下缓解措施:
(a)限制事务大小;
(b)可使用group_replication_transaction_size_limit变量指定事务大小限制,
在5.7版本中该值为0,没有限制;8.0版本中默认值为150000000字节(约143 MB),
超过此限制的事务将回滚,并且不会发送到组复制的组通信系统(GCS)进行分发。
(c)使用系统变量group_replication_compression_threshold来指定消息大小,系统默认值为1000000字节,如果消息大小大于该值会进行压缩。
当组复制的组通信系统(GCS)收到group_replication_transaction_size_limit设置允许,但超出group_replication_compression_threshold设置的消息时,将执行压缩。
如果group_replication_transaction_size_limit设置为零,则将禁用压缩。(当网络带宽成为瓶颈时,消息压缩可以在组通信级别上将吞吐量提高多达30-40%)
如未使用消息压缩并且未指定最大事务大小,则复制组成员上的应用程序线程可以处理的消息的大小上限为该成员的值slave_max_allowed_packet系统变量,
其默认值为最大值1073741824字节(1 GB),当接收成员尝试处理超过此限制的消息时,该消息将失败。
(但是max_allowed_packet会指定事务的大小,如果执行的事务超出max_allowed_packet但是未超出slave_max_allowed_packet会不会执行成功呢?(猜测不可以,未测试))
参数设置
1.这里我手动设置当前Primary和备选Primary参数group_replication_member_weight值为100(权重100,默认为50的Secondary不进行vip切换)
2.手动设置当前Primary和备选Primary参数group_replication_consistency值为BEFORE_ON_PRIMARY_FAILOVER
3.关闭限流模式set global group_replication_flow_control_mode = 'DISABLED'
4.Native Password Authentication传统认证方式
5.single-primary mode(单主模式)
基础环境
1.MySQL8.0
2.配置ssh互信
3.安装如下依赖
yum install -y php-process php php-mysql php-mysqli
4.手动在主节点上配置vip
如ifconfig ehr0:1 10.30.1.250/24
如需要删除vip可以使用
ifconfig ehr0:1 down
配置mgr_failover_vip
运行
前台运行
php mgr_master_ip_failover.php --conf=mgr_configure1.php
后台运行
nohup /usr/bin/php mgr_master_ip_failover.php --conf=mgr_configure1.php -I 5 --daemon 1 > /dev/null 2>&1 &
关闭后台运行
php mgr_master_ip_failover.php --conf=mgr_configure1.php --daemon 0
网友评论