半个PostgreSQL DBA,热衷于数据库相关的技术。我的ppt分享https://pan.baidu.com/s/1eRQsdAa https://github.com/chenhuajun https://chenhuajun.github.io
分类: Mysql/postgreSQL
2015-11-18 01:31:07
skykiker2016-10-30 10:05:51
luozhaode:首先,我们有这样的两种场景:一是主库假死(我们假定它死的不能响应任何外部的命令,包括ping命令,实际工作中不知道是否存在这样的情况),二是monitor和主库之间网络通信断了,主库成了孤岛(实际工作中为了高可用性,主备库处于不同的IDC的)。这个时候我们虽然摘不掉主库上的VIP,但是必须切到备库上继续提供服务,否则这个高可用就没有存在的意义了。切换后,VIP被绑到了备库上,如果过一段时间后,主库自动恢复了,那么它上面是绑有VIP的,就会造成同一个VIP在两边都存在的情况,就转化成了脑裂问题。所以我认为这种方案也存在脑裂问题,不知道分析的对不对。
其次,如果上面分析正确,那根据你的理论分析,处理脑裂问题的话,第三方仲裁和安全的fence设备缺一不可,该方案中monitor仅仅是起到了第三方仲裁的作用,却没有安全的fence设备,所以我认为这种方案自己解决不了脑裂问题,必须加入安全的fence设备才可以解决。
可以不纠结字面上的意义,关键是预防。如果所有流量都经过proxy(IPGW),proxy就是fence设备。还有一种方式是每个节点上部署agent发现自己已经不再是master了,主动把自己的vip摘掉。
回复 | 举报luozhaode2016-10-28 09:37:57
skykiker:着这里,第三方HAmonitor如果是单独的节点,其实HAmonitor就起到了仲裁的作用。monitor和主库之间的链路中断会导致旧主的VIP摘不掉,这个不属于脑裂的问题而是资源释放的问题。
首先,我们有这样的两种场景:一是主库假死(我们假定它死的不能响应任何外部的命令,包括ping命令,实际工作中不知道是否存在这样的情况),二是monitor和主库之间网络通信断了,主库成了孤岛(实际工作中为了高可用性,主备库处于不同的IDC的)。这个时候我们虽然摘不掉主库上的VIP,但是必须切到备库上继续提供服务,否则这个高可用就没有存在的意义了。切换后,VIP被绑到了备库上,如果过一段时间后,主库自动恢复了,那么它上面是绑有VIP的,就会造成同一个VIP在两边都存在的情况,就转化成了脑裂问题。所以我认为这种方案也存在脑裂问题,不知道分析的对不对。
其次,如果上面分析正确,那根据你的理论分析,处理脑裂问题的话,第三方仲裁和安全的fence设备缺一不可,该方案中monitor仅仅是起到了第三方仲裁的作用,却没有安全的fence设备,所以我认为这种方案自己解决不了脑裂问题,必须加入安全的fence设备才可以解决。
skykiker2016-10-27 20:43:20
luozhaode:再进一步,如果我们有这么一个架构设计,我们引入了一个中间件IPGW,它的作用就是设置VIP和和主备库实际IP之间的映射关系,当然为了达到这个目的,需要在主备库上安装IP tunnel。这样当monitor监控到主库挂了以后,就会进行主备切换,并且会修改映射关系,将VIP和备库IP对应起来。这样不需要在主备库上绑定VIP。这种情况下,还会发生脑裂问题吗?
IPGW就相当于我文章中提到的proxy,可以可靠的解决应用路由问题,防止部分应用访问老主部分应用访问新主。有了IPGW可以比较容易的防止脑裂,但也要防止来回切,比如只部署一个monitor(不要为monitor再做主备)。
回复 | 举报skykiker2016-10-27 20:21:20
luozhaode:博主这篇有关脑裂的文章是我看到过的理解的最透彻的。真是学习了,不过在实际工作中还是对脑裂存在着疑惑,恳请博主释疑一下。谢谢!
我们熟知的脑裂问题一般表现形式是:
在mysql主备上安装集群软件,比如keepalive管理VIP的飘逸、Heartbeat管理包括VIP在内的共享资源的转移等。主备间是通过心跳网络来维持的,一旦主备间的通信中断或者心跳网络不稳定,彼此都不知道对方的状态而抢夺包括VIP在内的共享资源,比如都将VIP占为己有,从而业务两边可访问,导致数据错乱。
而实际工作中,我们并没有在Mysql的主备库上安装集群软件,而是由第三方HAmonitor(和MHA的manage node角色相似)来监控主库是否可用,当然为了达到这个目的,我们在MySQL主备库中都会安装agent来和monitor进行通信。当monitor发现主库宕掉以后,就会先将VIP从主库中摘除,进行主备切换,然后将VIP绑定到备库上。这种情况下,还会发生脑裂问题吗,是不是脑裂的表现形式转移成了monitor和主库之间的链路中断而引出的问题呢?
着这里,第三方HAmonitor如果是单独的节点,其实HAmonitor就起到了仲裁的作用。monitor和主库之间的链路中断会导致旧主的VIP摘不掉,这个不属于脑裂的问题而是资源释放的问题。
回复 | 举报