采用MySQL-MMM做DB高可用时,遇到的一个小坑
一、服务器分布
二、MySQL-MMM 配置
(1)、公共配置【所有DB节点:Master1、Master2、Slave1、Slave2 Monitor节点】
# vim /etc/mysql-mmm/mmm_common.conf
active_master_role writer <host default>
cluster_interface eth1 pid_path /var/run/mmm_agentd.pid
bin_path /usr/lib/mysql-mmm/ replication_user repl
replication_password repl123456 agent_user mmm_agent
agent_password
</host> <host db1>
ip 10.222.5.10
mode master
peer db2
</host> <host db2>
ip 10.222.5.225
mode master
peer db1
</host> <host db3>
ip 172.23.155.22
mode slave
</host> <host db4>
ip 172.24.18.68
mode slave
</host> <role writer>
hosts db1,db2
ips 10.222.5.224
mode exclusive
</role>
(2)、Agent节点【所有DB节点:Master1、Master2、Slave1、Slave2】
Master1节点:
# vim/etc/mysql-mmm/mmm_agent.conf include mmm_common.conf
this db1 Master2节点: # vim/etc/mysql-mmm/mmm_agent.conf include mmm_common.conf
this db2 Slave1节点: # vim/etc/mysql-mmm/mmm_agent.conf include mmm_common.conf
this db3 Slave2节点: # vim/etc/mysql-mmm/mmm_agent.conf include mmm_common.conf
this db4 ()、Monitor节点 # vim /etc/mysql-mmm/mmm_mon.conf include mmm_common.conf <monitor>
ip 10.137.23.103
pid_path /var/run/mmm_mond.pid
bin_path /usr/lib/mysql-mmm/
status_path /var/lib/misc/mmm_mond.status
ping_ips 10.222.5.10, 10.222.5.225,172.23.155.22,172.24.18.68
auto_set_online
</monitor> <host default>
monitor_user mmm_monitor
monitor_password
</host> debug
三、问题描述及解决方案
1、问题描述
当Master1发生故障,导致DB不可用时,VIP会自动漂移到Master2上,以实现高可用。但出现了一个问题,由于ARP老化时间过长,导致漂移过去的VIP不可用,也无法ping通。也就是说,MySQL-MMM没有考虑到ARP老化时间过长的情况而采取强刷ARP的方式。
2、解决方案
方法一(手动命令强刷)
获取网关地址:
# arping -I eth1 -c 3 -s10.222.5.224 10.222.0.1
方法二(代码级别修正)
# vim /usr/share/perl5/vendor_perl/MMM/Agent/Helpers/Actions.pm
方法三(SHELL脚本方式)
# vim /data/scripts/refresh_vip.sh
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin MMM_COMM_CONF="/etc/mysql-mmm/mmm_common.conf"
ETH_NAME=`awk '/cluster_interface/{print $2}' ${MMM_COMM_CONF}`
VIP_ADDR=`grep -A '<role writer>' ${MMM_COMM_CONF} | awk '/ips/{print $2}'`
GETWAY_ADDR=`/sbin/route | awk '/default/ {print $2}'` if [[ -n `/sbin/ip addr show ${ETH_NAME} | grep ${VIP_ADDR}` ]]; then
/sbin/arping -I ${ETH_NAME} -c -s ${VIP_ADDR} ${GETWAY_ADDR} >/dev/null >&
fi
需要添加的crontab信息【每10秒刷新一次】:
* * * * * sleep 10; /data/scripts/refresh_vip.sh >/dev/null 2>&1
* * * * * sleep 20; /data/scripts/refresh_vip.sh >/dev/null 2>&1
* * * * * sleep 30; /data/scripts/refresh_vip.sh >/dev/null 2>&1
* * * * * sleep 40; /data/scripts/refresh_vip.sh >/dev/null 2>&1
* * * * * sleep 50; /data/scripts/refresh_vip.sh >/dev/null 2>&1
采用MySQL-MMM做DB高可用时,遇到的一个小坑的更多相关文章
- mysql url 连接配置的一个小坑。 工作中不会遇到。 学习的时候会
<property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> & ...
- 做ie8css样式时浏览器默认杂项模式遇到的一个小坑
1 进行ie浏览器的样式兼容的时候,首先要确保打开浏览器浏览网页的时候的文本模式要为当前浏览器的"标准模式",注意<!DOCTYPE html>不缺失不错误,以免浏览器 ...
- Mysql MMM 高可用
一.Mysql MMM 高可用概况: mmm_mond 负责所有的监控工作的监控守护进程,决定节点的移除等: mmm_agentd 运行在mysql服务器上的代理守护进程,通过简单远程服务集提供给 ...
- 【MySQL】MMM和MHA高可用架构
用途 对MySQL主从复制集群的Master的健康监控. 当Master宕机后把写VIP迁移到新Master. 重新配置集群中的其他Slave从新Master同步 MMM架构 主服务器发生故障时, 1 ...
- Mysql占用CPU过高如何优化,如何解决
2017-02-28 15:13 331人阅读 评论(0) 收藏 举报 MySQL占用CPU过高如何优化 一次生产DB服务器的 超负荷运行问题解决: 1.查看生产DB服务器top列表, 执行 to ...
- 从 MySQL+MMM 到 MariaDB+Galera Cluster : 一个高可用性系统改造
很少有事情比推出高可用性(HA)系统之后便经常看到的系统崩溃更糟糕.对于我们这个Rails运行机的团队来说,这个失效的HA系统是MySQL多主复制管理器(MMM). 我们已经找寻MMM的替代品有一段时 ...
- 分享MYSQL中的各种高可用技术(源自姜承尧大牛)
分享MYSQL中的各种高可用技术(源自姜承尧大牛) 图片和资料来源于MYSQL大牛姜承尧老师(MYSQL技术内幕作者) 姜承尧: 网易杭州研究院 技术经理 主导INNOSQL的开发 mysql高可用各 ...
- MySQL单机load过高问题讨论
有一个朋友问我: "hi,我想问下你们遇到单机load过高的情况 采取什么紧急措施啊?" 我问他是不是mysql db server? 他说是. 我给他如下建议: 1 先看下是不是 ...
- 性能调优案例分享:Mysql的cpu过高
性能调优案例分享:Mysql的cpu过高 问题:一个系统,Mysql数据库,数据量变大之后.mysql的cpu占用率很高,一个测试端访问服务器时mysql的cpu占用率为15% ,6个测试端连服务 ...
随机推荐
- [LeetCode] 666. Path Sum IV 二叉树的路径和 IV
If the depth of a tree is smaller than 5, then this tree can be represented by a list of three-digit ...
- java内存泄露/溢出等常见问题模拟及原因分析
Java 8:从持久代到metaspace 系统稳定性--OutOfMemoryError 常见原因及解决方法 java各种异常问题示例(附pdf下载): java.lang.OutOfMemoryE ...
- java面试 (八)- 关于减少if else
if else一般不建议嵌套超过三层,如果一段代码存在过多的if else嵌套,就会严重降低可读性.那么如何降低if else的嵌套数呢? 1:把接口分为外部和内部接口,所有空值判断放在外部接口完成: ...
- redis如何实现主从数据的同步
Redis的主从同步机制可以确保redis的master和slave之间的数据同步.按照同步内容的多少可以分为全同步和部分同步:按照同步的时机可以分为slave刚启动时的初始化同步和正常运行过程中的数 ...
- zookeeper ACL权限
原文链接:https://www.jianshu.com/p/392248ab27f4 对zookeeper设置ACL属性 我们以zkCli为例,来说明zookeeper对ACL的设置. 使用zkCl ...
- 「LOJ2091」「ZJOI2016」小星星 容斥+DP
题目描述 小 Y 是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用 \(m\)条彩色的细线串了起来,每条细线连着两颗小星星.有一天她发现,她的饰品被破坏了,很多细线都被拆掉 ...
- list<Integer>,Integer[],int[]之间的互转(jdk1.8)
偶然在开发过程中需要将int[] 转成 List<Integer>,采用了遍历的方式,写的代码实在太多. List<Integer> list = new ArrayList& ...
- [转帖]推荐一款比 Find 快 10 倍的搜索工具 FD
推荐一款比 Find 快 10 倍的搜索工具 FD https://www.hi-linux.com/posts/15017.html 试了下 很好用呢. Posted by Mike on 2018 ...
- SpringBoot配置文件敏感信息加密-jasypt
使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些.打开application.properties或application.yml,比如mysq ...
- vs中web api程序不包含适合于入口点的静态“Main”方法
步骤:选择该项目的属性--应用程序--输出类型--类库