Contents
  1. 1. 一、MGR的成员数量最大是多少
  2. 2. 二、group中的成员是如何连接的
  3. 3. 三、group_replication_bootstrap_group主要用作什么用途
  4. 4. 四、为了恢复,如何设置credentials
  5. 5. 五、可以使用MGR来scale-out我的写压力么
  6. 6. 六、相比普通复制,在相同的负载下,MGR需要更多的网络带宽和cpu计算资源吗
  7. 7. 七、可以在广域网部署MGR吗
  8. 8. 八、如果网络临时有问题,组成员会自动重新加入group吗
  9. 9. 九、什么时候成员会被排除(excluded)在外
  10. 10. 十、如果一个节点严重延迟,会产生什么问题
  11. 11. 十一、有没有一个特殊的成员来负责触发重新更新配置来踢出某个member
  12. 12. 十二、是否可以用MGR来sharding
  13. 13. 十三、是否可以在selinux和iptables环境下使用MGR
  14. 14. 十四、作为组成员,如何恢复relay-log in replication channel
  15. 15. 十五、为什么MGR使用2个绑定地址
  16. 16. 十六、如何找到primary

https://dev.mysql.com/doc/refman/8.0/en/group-replication-frequently-asked-questions.html

一、MGR的成员数量最大是多少

最大9个

二、group中的成员是如何连接的

他们直接是通过peer-to-peer TCP连接,主要用作内部交流和信息传递
通过group_replication_local_address 可以设置相关的地址

三、group_replication_bootstrap_group主要用作什么用途

bootstrap flag,主要用作创建一个group,然后扮演一个初始化server的角色
第二个成员加入到组,需要问bootstrap server来动态调整配置,以便自己能够顺利加入该组

一个成员bootstrap一个组的场景大概2个:

  1. 第一次初始化创建group
  2. shutdown,然后重启整个group

四、为了恢复,如何设置credentials

提前配置一个GR的恢复通道credentials,使用CHANGE MASTER TO 语句

五、可以使用MGR来scale-out我的写压力么

a)并不是直接的扩展方式,因为MGR的每一个成员都有完整的数据copy

b)但是,其他server并不是做完全一样的写动作,因为MGR通过ROW模式复制,其他server只需要apply row即可,并不是re-executed事务了,因此会快且压力小很多

c)更进一步讲,row-based应用都是经过压缩过的,可以减少很多IO动作,相比master上的执行压力会小很多的

d)总结,你可以scale-out写,在没有写冲突事务的时候在多台服务器上执行事务是可以做到scale-out的。

六、相比普通复制,在相同的负载下,MGR需要更多的网络带宽和cpu计算资源吗

是会有一些额外的压力产生,因为MGR需要不断的沟通协作来保证同步的目的,但是很难计算出高出多少资源

七、可以在广域网部署MGR吗

可以,但是要保证他们的可靠和合适的网络性能
低延迟、高吞吐是MGR的基本配备条件

如果网络带宽是问题,可以使用 Section 18.10.7.2, “Message Compression” 方法来降低带宽的所需
但是如果网络丢包,导致的数据重传会严重影响性能

八、如果网络临时有问题,组成员会自动重新加入group吗

这取决于是什么网络问题
如果网络问题是短暂的,瞬间的,那么MGR的错误检测机制根本还没来得及探测到此问题,那么该成员是不会被移除出组的
如果是长时间的问题,那么错误检测机制最终会认为它除了问题,会将此server移除出组

一旦移除出组,你就需要让他重新加入一次,换句话说,你需要手工来处理,或用脚本来自动处理

九、什么时候成员会被排除(excluded)在外

如果一个server变成了孤岛,其他成员会从组配置中将其移除出组
一般这种情况发生在 server挂了,或网络disconnect了

在指定的timeout后,这个错误被检测出来,然后一个新的没有该成员的配置会重新生成

十、如果一个节点严重延迟,会产生什么问题

没有一个很好的策略来自动判断什么时候去驱逐一个成员
你需要找到为什么它会延迟,并解决它,或移除它
否则,当一个server慢到触发流控,然后整个group都会变的慢下来
流控可以根据你喜好来配置

十一、有没有一个特殊的成员来负责触发重新更新配置来踢出某个member

没有。
每个member都是一样的,你无法控制和设置

十二、是否可以用MGR来sharding

无法对MRG成员进行sharding,但是你可以设计,以MGR作为sharding的一个分片,即: MGR1 是一个分片,MGR2是另外一个分片

十三、是否可以在selinux和iptables环境下使用MGR

可以,需要额外配置和过滤

十四、作为组成员,如何恢复relay-log in replication channel

STOP GROUP_REPLICATION, START GROUP_REPLICATION,这样MGR会再次创建一个group_replication_applier 通道

十五、为什么MGR使用2个绑定地址

MGR使用两个绑定地址,主要是为了区分 SQL地址(业务应用ip来连接server) 和 group_replication_local_address (成员内部通信)
主要是为了隔离和安全

十六、如何找到primary

如果是single-primary,你可以使用Section 18.4.1.3, “Finding the Primary”的方法,轻松找到primary

  • 方法一、
1
2
3
4
5
6
7
8
sql> SELECT MEMBER_HOST, MEMBER_ROLE FROM performance_schema.replication_group_members;
+-------------------------+-------------+
| MEMBER_HOST | MEMBER_ROLE |
+-------------------------+-------------+
| remote1.example.com | PRIMARY |
| remote2.example.com | SECONDARY |
| remote3.example.com | SECONDARY |
+-------------------------+-------------+
  • 方法二、
1
mysql> SHOW STATUS LIKE 'group_replication_primary_member'
Contents
  1. 1. 一、MGR的成员数量最大是多少
  2. 2. 二、group中的成员是如何连接的
  3. 3. 三、group_replication_bootstrap_group主要用作什么用途
  4. 4. 四、为了恢复,如何设置credentials
  5. 5. 五、可以使用MGR来scale-out我的写压力么
  6. 6. 六、相比普通复制,在相同的负载下,MGR需要更多的网络带宽和cpu计算资源吗
  7. 7. 七、可以在广域网部署MGR吗
  8. 8. 八、如果网络临时有问题,组成员会自动重新加入group吗
  9. 9. 九、什么时候成员会被排除(excluded)在外
  10. 10. 十、如果一个节点严重延迟,会产生什么问题
  11. 11. 十一、有没有一个特殊的成员来负责触发重新更新配置来踢出某个member
  12. 12. 十二、是否可以用MGR来sharding
  13. 13. 十三、是否可以在selinux和iptables环境下使用MGR
  14. 14. 十四、作为组成员,如何恢复relay-log in replication channel
  15. 15. 十五、为什么MGR使用2个绑定地址
  16. 16. 十六、如何找到primary

幸福,不在于得到的多

而在于计较的少