一般来说,裂脑的发生,主要是由以下的几个原因导致的:
- 节点对之间心跳线路故障,导致无法正常的通信 。
- 节点对上开启了防火墙阻挡了心跳消息的传输 。
- 节点对上的心跳网卡地址等信息配置的不正确,导致发送心跳失败 。
- 其它服务配置不当等原因,如心跳的方式不同,心跳广播冲突,软件出现了BUG等 。
实际的生产环境中,我们可以从以下几个方面来防止裂脑的发生:
- 同时使用串行电缆和以太网电缆连接,同时用两条心跳线路,这样一条线路坏了,另一个线路还是好的,依然能传送消息,这是最简单的一个方案,也是推荐的防脑裂方法 。
- 检测到裂脑的时候强行的关闭一个心跳节点(需要特殊的节点支持,如stonith,fence),相当于程序上备节点发现心跳线故障,发送关机命令到主节点 。
- 做好对裂脑的监控报警,如邮件以及手机短信等,在问题发生的时候能够人为的介入到仲裁,降低损失 。当然,在实施高可用方案的时候,要根据业务的实际需求确定是否能够容忍这样的损失 。对于一般的网站业务,这个损失是可控的 。
- 启用磁盘锁 。正在服务一方锁住共享磁盘,脑裂发生的时候,让对方完全抢不走共享的磁盘资源 。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的乙方不主动解锁,另一方就永远得不到共享磁盘 。现实中介入服务节点突然死机或者崩溃,另一方就永远不可能执行解锁命令 。后备节点也就截关不了共享的资和应用服务 。于是有人在HA中设计了“智能”锁,正在服务的一方只在发现心跳线全部断开时才启用磁盘锁,平时就不上锁 。
- 报警报在服务器接管之前,给人员处理留足够的时间就是1分钟内报警了,但是服务器不接管,而是5分钟之后接管,接管的时间较长 。数据不会丢失,但就是会导致用户无法写数据 。
- 报警后,不直接自动服务器接管,而是由人员接管 。
- 增加仲裁的机制,确定谁该获得资源,这里面有几个参考的思路:增加一个仲裁机制 。例如设置参考的IP,当心跳完全断开的时候,2个节点各自都ping一下参考的IP,不同则表明断点就出现在本段,这样就主动放弃竞争,让能够ping通参考IP的一端去接管服务 。或者通过第三方软件仲裁谁该获得资源 。
- DRBD详解 及 DRBD+Mysql应用:https://www.cnblogs.com/chenghuan/articles/7531984.html
- CentOS 7下DRBD数据同步部署:https://www.linuxidc.com/Linux/2017-12/149268.htm
- heartbeat心跳检测和裂脑:https://blog.51cto.com/xxr007/1912518?utm_source=oschina-App
【一文详解 MySQL 高可用之 DRBD】
推荐阅读
- mysql入门级,20分钟搞定
- like,%,_ Mysql 使用通配符进行模糊查询
- 允许远程连接MySQL数据库教程
- VPC是什么,VPC能做什么,VPC详解
- 音频压缩编码的基本原理详解
- PING命令详解,端到端的延时测试工具
- MySQL 导出数据 导入数据
- 如何提高思维逻辑深度?深度详解提高个人的能力,提高职场竞争力
- 航线、航班号、航空公司 一文读懂航空
- 每秒570000的写入,MySQL如何实现?