MySQL高可用解决方案(8)部署replication-manager v2.3.16 实现MySQL8自动化高可用
关于replication-manager(简称RM)的部署使用在之前已经发布过一篇《MySQL高可用解决方案(7)replication-manager数据库高可用》。近期公司MySQL升级到了8.0版本,然后在使用老版本的RM时由于数据库参数命名变化等原因(比如slave变为了replicate)导致了RM的异常检测会出现一定的异常,所以部署了最新版本的RM来实现数据库高可用,并且经过了生产测试。以下是RM v2.3.16的部署步骤:
1、配置RM的YUM仓库
cat /etc/yum.repos.d/signal18.repo [signal18] name=Signal18 repositories baseurl=http://repo.signal18.io/centos/$releasever/$basearch/ gpgcheck=0 enabled=1
2、安装RM软件
yum install replication-manager-osc
3、配置RM全局设置
cat /etc/replication-manager/config.toml [Default] include = "/etc/replication-manager/cluster.d" monitoring-save-config = false monitoring-datadir = "/var/lib/replication-manager" #monitoring-sharedir = "/usr/share/replication-manager" monitoring-ticker = 5 monitoring-performance-schema = false monitoring-processlist = false monitoring-queries = false ######### ## LOG ## ######### log-file = "/var/log/replication-manager.log" log-heartbeat = false verbose = 0 log-failed-election = true log-level = 7 log-rotate-max-age = 7 log-rotate-max-backup = 7 log-rotate-max-size = 256 log-sql-in-monitoring = false log-sst = false ########## ## HTTP ## ########## http-server = true http-bind-address = "0.0.0.0" http-port = "10001" #web端端口 http-auth = false http-session-lifetime = 3600 ######### ## API ## ######### api-credentials = "admin:repman" #管理后台的账号密码 api-port = "10005" api-credentials-acl-allow = "admin:cluster db prov" api-credentials-acl-discard = false api-credentials-external = "dba:repman,foo:bar"
4、配置RM需要管理的数据库集群
cat /etc/replication-manager/cluster.d/test.toml #为每个数据库集群创建的文件 [tanglu_test] #数据库集群的名字 title = "测试" #管理后台显示的数据库集群名 db-servers-hosts = "172.22.8.13:3333,172.22.8.14:3333,172.22.8.15:3333" #数据库集群的每个节点和端口 db-servers-prefered-master = "172.22.8.15:3333" #failover优先被选举为主的节点 db-servers-credential = "root:123456" #数据库管理账号 db-servers-connect-timeout = 1 replication-credential = "repl:123456" #主从账号 verbose = false log-failed-election = true log-level = 3 log-rotate-max-age = 7 log-rotate-max-backup = 7 log-rotate-max-size = 5 log-sql-in-monitoring = true log-sst = true ############## ## TOPOLOGY ## ############## replication-multi-master = false replication-multi-tier-slave = false ############## ## FAILOVER ## failover-mode = "automatic" #发生故障后是否自动切换,manual为手动切换 failover-post-script = "/usr/local/shell/rm_failover_post_test.sh" #发生故障后执行的脚本 failover-readonly-state = true failover-max-slave-delay = 0 failover-event-scheduler = false failover-event-status = false failover-falsepositive-ping-counter = 10 failover-limit = 0 failover-time-limit = 3600 failover-at-sync = true failover-restart-unsafe = false # failover-falsepositive-heartbeat = true # failover-falsepositive-heartbeat-timeout = 3 # failover-falsepositive-maxscale = false # failover-falsepositive-maxscale-timeout = 14 # failover-falsepositive-external = false # failover-falsepositive-external-port = 80 ################ ## SWITCHOVER ## ################ switchover-wait-kill = 5000 switchover-wait-trx = 10 switchover-wait-write-query = 10 switchover-at-equal-gtid = false switchover-at-sync = false switchover-max-slave-delay = 30 ############ ## REJOIN ## ############ autorejoin = false #autorejoin-script = "" #autorejoin-semisync = true #autorejoin-backup-binlog = true #autorejoin-flashback = false #autorejoin-mysqldump = false #################### ## CHECKS & FORCE ## #################### check-replication-filters = true check-binlog-filters = true check-replication-state = true force-slave-heartbeat= false force-slave-heartbeat-retry = 5 force-slave-heartbeat-time = 3 force-slave-gtid-mode = false force-slave-semisync = false force-slave-failover-readonly-state = false force-binlog-row = false force-binlog-annotate = false force-binlog-slowqueries = false force-binlog-compress = false force-binlog-checksum = false force-inmemory-binlog-cache-size = false force-disk-relaylog-size-limit = false force-disk-relaylog-size-limit-size = 1000000000 force-sync-binlog = false force-sync-innodb = false
5、配置VIP切换脚本
cat /usr/local/shell/rm_failover_post_tanglu.sh #!/bin/bash old_master=$1 new_master=$2 old_port=$3 new_port=$4 instance="测试" interface=eth0 vip=172.22.8.88 ssh_user=root ssh_password=123456 ssh_port=22 add_vip="sudo /sbin/ip address add ${vip} dev ${interface}" del_vip="sudo /sbin/ip address del ${vip}/32 dev ${interface} && ip route flush cache" vip_bind_check(){ result=`sshpass -p ${ssh_password} ssh -p ${ssh_port} -tt -o StrictHostKeyChecking=no root@${old_master} "ip a | grep ${vip}" | wc -l` if [ $result -eq 1 ];then echo "节点VIP绑定检查:${vip} 绑定节点${old_master}正常!" return 0 else echo "节点VIP绑定检查:${vip} 绑定节点${old_master}异常!" exit 12 fi } vip_status(){ if ping -c 1 -W 5 "$vip"; then return 0 else return 1 fi } vip_stop(){ rc=0 sshpass -p ${ssh_password} ssh -p ${ssh_port} -tt -o StrictHostKeyChecking=no ${ssh_user}@${old_master} "${del_vip}" rc=$? return $rc } vip_start(){ rc=0 sshpass -p ${ssh_password} ssh -p ${ssh_port} -tt -o StrictHostKeyChecking=no ${ssh_user}@${new_master} "${add_vip}" rc=$? return $rc } vip_bind_check if vip_status;then echo "`date +'%Y-%m-%d %T'`:节点:${old_master} VIP:${vip} 即将下线......" if vip_stop;then if vip_status;then echo "`date +'%Y-%m-%d %T'`:VIP ${vip} 从 ${old_master} 删除失败!" exit 13 else echo "`date +'%Y-%m-%d %T'`:VIP ${vip} 从 ${old_master} 删除成功!" fi fi fi if vip_start; then echo "`date +'%Y-%m-%d %T'`:VIP ${vip} 漂移至 ${new_master}!" else echo "`date +'%Y-%m-%d %T'`:VIP ${vip} 添加至 ${new_master} 失败,请进行手动修复!" exit 14 fi
6、通过RM管理后台可以看到配置的集群信息和关系,其中有大拇指图标的就是故障后会优先提升为主的节点
版权声明:本文章版权归数据库运维网(www.ywdba.cn)所有。如需引用本站内容,请注明来源及作者。
评论