后记
  MySQL HA一直是一个水比较深的领域,笔者仅仅列出了一些近研究的东西,有些相关工具会尽量在go-mysql中实现。
  更新
  经过一段时间的思考与研究,笔者又有了很多心得与收获,设计的MySQL HA跟先前有了很多不一样的地方。后来发现,自己设计的这套HA方案,跟facebook这篇文章几乎一样,加之近跟facebook的人聊天听到他们也正在大力实施,所以感觉自己方向是对了。
  新的HA,我会完全拥抱GTID,比较这玩意的出现是为了解决原先replication那一堆问题的,所以我不会考虑非GTID的低版本MySQL了。幸运的是,我们项目已经将MySQL全部升级到5.6,完全支持GTID了。
  不同于fb那篇文章将mysqlbinlog改造支持semi-sync replication协议,我是将go-mysql的replication库支持semi-sync replication协议,这样能实时的将MySQL的binlog同步到一台机器上面。这可能是我和fb方案的区别了。
  只同步binlog速度铁定比原生slave要快,毕竟少了执行binlog里面event的过程了,而另外真正的slaves,我们仍然使用原始的同步方式,不使用semi-sync replication。然后我们通过MHA监控整个集群以及进行故障转移处理。
  以前我总认为MHA不好理解,但其实这是一个非常强大的工具,而且真正看perl,发现也还是看的懂得。MHA已经被很多公司用于生产环境,经受了检验,直接使用比自己写一个要划算。所以后续我也不会考虑zookeeper,考虑自己写agent了。