mysql mgr 踢出集群_MySQL MGR相关知识点

#MGR相关介绍

组复制脱离了传统的主从模式结构,是一个具有容错功能的集群架构,拥有多个server成员构成,并且每个成员都可以独立执行事务,也就意味着多写的功能,

但是所有的读写事务必须在冲突校验完成后才能提交,如果是只读型的事务那么会直接提交。

当某个节点上发出一个读写的事务准备提交时,那么这个节点就会向整个集群开始广播这次读写的变更和对应的一个校验标识符,

然后会针对这个事务产生一个全局的顺序号,由于是有顺序号的,所以集群中的每个成员都会按照顺序去执行事务的变更从而保证了数据的一致性。

如果在不同的server上执行了相同的操作,并且产生了事务冲突,那么校验机制就会做成相应的判断,通常先提交的事务先执行,后提交的回滚。

组复制的传输故障检测:

组复制的传输还是采用了mysql的binlog作为日志,但是因为有排队的机制所以必须采用GTID的模式,也就是说GTID必须打开。

那么当在整个MGR集群运行工作中,提交了一个读写事务,如果有某个server未响应,那么就会在集群内的所有成员进行仲裁投票,将这个未响应的活着已经死掉的server踢出集群。

组复制间成员关系:

MGR通过专门的插件来维护组内的关系,这个插件定义了哪些server在线状态并且是在组内的,我们可以通过相关的视图进行查询,

在组内的所有的server不仅对事务的提交是达成一致的,而且所能查询到的这张维护组复制的视图的内容也是一致的,

如果有新的server加入到集群组内或者有现有的server要从组内移除,那么整个视图都会进行动态的调整。

在这里需要特别注意,如果有server自愿离开组内时,首先整个组会动态重新配置,此时会触发一个投票的过程,在组内的除了离开的server开始投票,

如果投票达成一致,那么组内踢出离开的server并且自动开始维护视图,如果组内无法达成一致,那么系统将不会动态变更视图,此时系统会锁定整个组防止脑裂的发生,这时就需要人工介入。

容错机制:

MGR是根据Paxos算法来实现的,所以他具有一定的容错的数量,根据官方文档给出的公式,容忍f个故障所需的server数量(n)为n= 2×f + 1。

也就是说容忍一个故障没那么必须有3个server,也就说如果要实现仲裁和容错的效果,必须有3个server构成一个集群,以下是官方给出的数据

组大小 多数 允许的即使故障数1 102 203 2 1

4 3 1

5 3 2

6 4 2

7 4 3

#MGR的基础结构要求和使用限制

基础结构要求:1.引擎必须为innodb,因为需事务支持在commit时对各节点进行冲突检查2.每个表必须有主键,在进行事务冲突检测时需要利用主键值对比3.必须开启binlog且为row格式4.开启GTID,且主从状态信息存于表中(--master-info-repository=TABLE 、--relay-log-info-repository=TABLE),--log-slave-updates打开5.一致性检测设置--transaction-write-set-extraction=XXHASH64

使用限制:1.RP和普通复制binlog校验不能共存,需设置--binlog-checksum=none2.不支持gap lock(间隙锁),隔离级别需设置为read_committed。3.不支持对表进行锁操作(lock /unlock table),不会发送到其他节点执行 ,影响需要对表进行加锁操作的情况,列入mysqldump全表备份恢复操作4.不支持serializable(序列化)隔离级别5.DDL语句不支持原子性,不能检测冲突,执行后需自行校验是否一6.多主模式下不支持外键,单主模式下支持外键;最多9个节点,超过9台无法加入集群#组复制部分配置参数说明

group_replication变量使用的loose-前缀是指示Server启用时尚未加载复制插件也将继续启动

transaction_write_set_extraction=XXHASH64

指示Server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列

loose-group_replication_group_name="ac99b07f-acd1-45c1-adc8-7005f9205b87"表示将加入或者创建的复制组命名为ac99b07f-acd1-45c1-adc8-7005f9205b87

可自定义 通过cat/proc/sys/kernel/random/uuid

loose-group_replication_start_on_boot=off

设置为Server启动时不自动启动组复制

loose-group_replication_local_address="testdb62:33061"绑定本地的testdb62及33061端口接受其他组成员的连接,IP地址必须为其他组成员可正常访问

loose-group_replication_group_seeds="testdb62:33061,testdb136:33061,testdb76:33061"本行为告诉服务器当服务器加入组时,应当连接到testdb62:33061,testdb136:33061,testdb76:33061这些种子服务器进行配置。本设置可以不是全部的组成员服务地址。

loose-group_replication_bootstrap_group =off

配置是否自动引导组

loose-group-replication-ip-whitelist

是网络白名单参数,这里一定要注意,如果整个组复制中有不同网段的IP,一定要添加此参数,否则会添加节点失败#多主切单主不指定主节点进行切换,优先级先后顺序

MGR中多主切单主,不指定主节点进行切换,如果不指定主,切换时遵循以下的规则,前提无延迟情况下,按照优先级先后顺序:1、先检查集群内是否存在低版本的mysql,如果所有成员都是8.0.17版本以上的,则按照补丁先后顺序排列,

如果有成员是8.0.17版本以下的,或者5.7的按发行版本的主要版本来排序,忽略补丁编号。2、如果集群有任意一个低版本的mysql。且支持group_replication_member_weight这个参数的版本的mysql。

则根据group_replication_member_weight这个权重参数来,group_replication_member_weight默认都是50,权重越高优先级越高3、如果集群内有不支持group_replication_member_weight参数的mysql,比如有mysql5.7的,并且其中一个以上的成员具有最高的成员权重(或忽略了成员权重),

则考虑的第三个因素是生成的服务器UUID的词典顺序每个成员,由server_uuid系统变量指定。

服务器UUID最低的成员被选为主服务器,这里实际上就是查询performance_schema.replication_group_members 最靠前的且是活着的MEMBER_ID。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值