双机mysql cluster的脑裂

两台机器构成的mysql cluster, 每台上都跑ndbd_mgmd, ndbd, mysqld

ndb_mgmd -f /var/lib/mysql-cluster/config.ini -v --nodaemon &
ndbd

拔一台机器网线后,没拔网线机器的ndbd应该接管,实际上却自动重启,导致整个mysql cluster不能服务。
分析:mysqld和ndb_mgmd会选举一个作为arbitrator仲裁者,以避免网络断开后两套系统各自为政, 出现脑裂 split-brain
所以mysql推荐三台以上机器配置,ndbd_mgmd放在中间机器上作为仲裁者。
两台机器的情况下,如果恰好作为仲裁者的机器网线被拔,另外一机器会认为自己与网络断开,所以ndbd进程被重启。

解决方法:在config.ini中设置Arbitration=WaitExternal
然后写一个ping网关的脚本来手工杀死或者启动mysql

一个有趣的现象,出现脑裂后,自动愈合很简单,一边数据覆盖掉另外一边。

另外,mysql cluster node加入节点会很慢。但是经过正常ndb_mgm -e "shutdown"命令停止的server会很快启动并正常服务。

你可能感兴趣的:(mysql,F#,脚本)