参数group_replication_consistency:
1.EVENTUAL
RO 和 RW事务不会等待在当前之前事务执行完才执行。RW事务不会等待其他成员执行完,意味着一个事物可能单独在一个成员中存在比其它先。当发生failover时,新primary能在当前之前的事务执行被应用之前,接收新的RO和RW. RO可以结果是旧数据,RW可能导致冲突而引起回滚。

2.BEFORE_ON_PRIMARY_FAILOVER
新选取的主库,当前旧主库的blacklog时,新的RO和RW事各会一直held住,直到backlog被应用完。
当failover时,client能看到主库最新的值,确保一致性。但会client会在处理blacklog时产生延时,延时的大小取决于blacklog日志大小。

3。BEFORE
RW事务会等待之前事务完成才会被应用,RO事务会等待之前事物完成才会被执行。确保读事务永远是最新值。This reduces the overhead of synchronization on every RW transaction, by ensuring synchronization is used only on RO transactions.
(读少写多,一致性包含BEFORE_ON_PRIMARY_FAILOVER)

4。AFTER
RW事务一直等到其它成员已经应用后。对RO事务没影响。当一个事务本地提交时,随后其它节点能读到最新的值。主导RO。This reduces the overhead of synchronization on every RO transaction, by ensuring synchronization is used only on RW transactions
(读多写少,一直性包含BEFORE_ON_PRIMARY_FAILOVER)

5。BEFORE_AND_AFTER
RW事务等待 1。之前事务完成,2。更改被其他成员应用。RO会等待之前事务完成才发生。
(BEFORE_ON_PRIMARY_FAILOVER )

BEFORE / BEFORE_AND_AFTER : RO,RW
AFTER : no impact RO

怎么选:
1.读多写少 -> AFTER
2 读少写多 -》 BEFORE
3。总是读到最新值 -》 BEFORE

  1. 主导RO事务,只要rw事务一旦提交,随后能读到最新的 AFTER
  2. 主导RO事务,RW事总是读最新数据,一旦提交并应用到其他成员中,随后读最新数据 -》BEFORE_AND_AFTER
    6. 系统处理时,一些需求要一致性,一些不需要一致性

SET @@SESSION.group_replication_consistency= 'AFTER'
SET @@SESSION.group_replication_consistency= 'EVENTUAL'
7.在6基础之上,有些在需求要读最新值
SET @@SESSION.group_replication_consistency= ‘BEFORE’

标签: group_replication_consistency, MySQL