一 新主选择机制
1 当主节点宕掉,自动会根据服务器的server_uuid变量和group_replication_member_weight变量值,选择下一个slave谁作为主节点,group_replication_member_weight的值最高的成员被选为新的主节点,
2 在group_replication_member_weight值相同的情况下,group根据数据字典中 server_uuid排序,排序在最前的被选择为主节点
3 如果原主需要下线进行维护,那么可以直接stop复制,如果有目标新主,预先调整好权重即可.新主会进行识别
二 集群节点数量
1 一旦集群故障的节点超过阈值,整个集群变会被挂起,成为只读的状态,比如 3个节点,一旦挂掉2个 就会导致集群只读
计算方式 2n+1=total, n为故障节点的阈值
三 集群节点状态
ONLINE 表示该节点可正常提供服务
RECOVERING 表示当前节点正在从其他节点恢复数据(也有可能处于错误状态)
OFFLINE 表示GR插件已经加载,但是该节点不属于任何一个GR组
ERROR 表示节点在recovery阶段或者从其他节点同步状态中出现错误
UNREACHABLE 表示节点处于不可达状态,无法与之发生网络通讯
只有ONLINE和RECOVERING两种状态会在集群中得到同步
四 集群节点延时
组复制的延迟对集群是有影响的,一旦出现延迟(默认延迟25000个事务),则启动流量控制(Flow Control),每个周期性能衰减当前的10%,直到集群不可用(但集群节点状态为online),单个节点慢整个集群全慢。
五 写集合
1 写集合由主键+binlog_event和其他一些信息进行封装,然后广播送到其他节点进行验证
2 全局构建的hash_map用来验证写集合是否冲突
六 整体过程
0 MGR 在主节点执行事务,形成写集合并且按照顺序广播发送到各个成员
1 从节点进行冲突验证,验证通过后
1 所有节点都会将日志写入磁盘binlog中(io_thread)
2 主节点反馈给客户端,代表事务提交
3 从节点进行应用队列的应用(sql_thread)
七 MGR 本身限制
1 具有主键的innodb表(不能带有外键)
2 针对以下的要求限制
1 事务不能太大
2 网络通讯要稳定,最好是同一机房内
3 成员硬件配置必须保持一致
4 最好是RC的环境
3 只支持IPV4段
4 仅仅是集群写的强一致性,但是可能读会有延时
5 非可用性:
1 当节点成员存活少于 2n+1的成员时,集群属于不可写状态
2 当集群本身并发数量太高时,会触发流控机制,这时集群也属于不可用状态
6 多主条件下的限制
1 针对同一对象但是不同实例的并发DML操作,在DDL操作执行完前,是有风险的,会存在 未检测到不同实例执行冲突的DDL语句风险
2 不支持同一对象但是不同实例的并发DDL操作
原文:https://www.cnblogs.com/danhuangpai/p/13042041.html