1. 关于MGR

想要建立一个容错的系统,我们需要使所有的组件冗余,换句话来说就是组件可以被移除而不影响系统的功能,因此最大的挑战是让多个服务器协同起来以达到一致的状态,这时可以当成一个数据库或者最终的状态是一致的,而这些在数据库复制中尤为重要

MySQL组复制通过服务器之间的强大协调提供分布式状态机复制。

当服务器在同一个组时他们自动协调

它既可以设为单主模式也可以设置为多主模式

MGR有一个内置的 group membership service 可以在任何时间点提供组一致性和可用性的视图,当成员有加入和移除时会自动的更新

对于一个提交的事务,MGR会按照一定的顺序去同意该操作,无论是同意提交还是回滚所有服务器是独立的进行的,不过需要所有服务器是做出相同的决定以达到一致性

MGR提供一套内置的自动的,防止脑裂的机制

如果由于某些原因导致无法达成共识,则系统无法继续运行直到问题解决

所有的这些都是由Group Communication System (GCS) 协议提供支持。他提供如下功能

  • failure detection mechanism
  • group membership service
  • safe and completely ordered message delivery

所有的这些都是用来保障组内数据复制一致的

内部采用Paxos 算法作为组通讯引擎

2. 参考资料

https://dev.mysql.com/doc/refman/5.7/en/group-replication-background.html