Group Replication优化思路

Group Replication 是一种新的复制模式,它彻底颠覆了传统的复制模式,虽然还是异步复制(或者可称其为同步复制,异步应用),但能够实现强最终一致性,并且完全实现了无人干预式高可用,必将成为未来的主流。本文不详细介绍Group Replication的实现原理,网上有许多资料,这里主要对如何优化Group Replication集群进行分析探讨。

首先我们分析下影响GR性能的主要因素。

影响GR性能主要因素:

  1. 网络带宽
    在写节点上产生的事务,在最终被commit前,需要发送到复制组中做冲突校验,这需要消耗网络带宽,并给事务的延迟至少增加一个RTT(Round Trip Time,TCP数据包旅行一个回路的时间)。
  2. 校验吞吐量
    事务会被按照相同的顺序发送到各节点做冲突校验,校验通过后会被远端节点写入relay-log,这个写入是由一个单线程负责。当校验的速率很高,磁盘吞吐量(relay-log写入)将会成为瓶颈。
  3. 读节点applier线程应用效率
    读节点的applier线程的应用不及时会触发writer节点flow-control,对于多主模式架构,applier线程的低效可能会造成校验失败率升高。

GR性能瓶颈主要存在上面三个方面,有些是需要提升物理硬件,有些则是参数调整。我们来分析下针对每一个方面的优化措施。

网络因素:

  1. 使用高带宽低延迟网络,使所有节点都处于同一网关

  2. 减少带宽消耗,如采取启用压缩,尽量缩小binlog等措施

    group_replication_compression_threshold=1000000 # default in mysql8.0.11
    binlog_row_image=MINIMAL
    

    group_replication_compression_threshold 当复制组间通信的event超过这一阈值时,启用LZ4压缩,以减小通信量。

    binlog_row_image默认是full,即将某行数据的改变前(before)和改变后(after)的数据都写入binlog.实际上只有update才会产生改变前和改变后两个数据镜像,而对于insert只会有改变后的数据镜像,delete只会有改变前的数据镜像。如果每个表都有primary key(表定义在主从架构中完全相同,group replication要求表必须有主键),完全可以在binlog中的before镜像中记入主键值(它已经能唯一标识数据改变的行了),而在after镜像中只记录所改变的字段的值,而不是所有的字段的值。这样binlog就大大缩小,网络间通信量也就大大减少了。只是在从节点应用这样的binlog event时,效率会有点低。

  3. 通过频繁等待,减少group replication线程睡眠次数

     SET GLOBAL group_replication_poll_spin_loops= 10000; # default 0
    

    这样可使GCT(Group Comunitcatoin Thread)积极地在消息队列处等待,一旦队列中有新消息可以更快地响应。同时也降低了操作系统对其上下文切换频率。

校验速率:

  1. 可以使用single-primary模式,因为正常情况下,这种模式是不需要校验的(有一种情况除外,就是新master正在应用从之前的primary复制来的binlog,这种情况下是需要校验的),但这种模式下,一旦primary宕机,需要选举一个新的master,多了一个选举的过程。
  2. 将relay-log,tmpdir 置于高性能硬盘, 校验通过后非local_transaction要写入relay log,对于大事务writeset的抽取可能会需要写入磁盘临时文件,如果relay log/临时文件读写性能很差,将会大大增加事务的延时。在这两个地方可能产生物理IO瓶颈。
  3. 对于多主架构减少校验的复杂度
    group_replication_gtid_assignment_block_size=1000000 # default
    
    事务在节点执行完成,commit前发送到GR做校验。校验成功后,GR会给此事务分配一个GTID(如果该事务没有GTID)。GR会给每个节点预留一个范围的GTID,(GTID是由server_uuid+数字组成,gr中GTID中的UUID部分都是一样的,数字部分则为各节点分配一个范围段,用完了再分配一个新的范围段)。这个范围段的大小就是有group_replication_gtid_assignment_block_size变量控制,默认是1000000。这个数字范围如果很大的话,gtid_executed就不能及时合并,许多GTID interval 会使校验算法变得复杂。

Applier应用线程

  1. 启用MTS多线程应用
set global slave_parallel_type=LOGICAL_CLOCK;
set global slave_parallel_workers=8/16/32/+;
set global slave_preserve_commit_order=ON;

  1. 启用基于写集依赖的多线程应用,使并发效率更高
# for mysql8
binlog_transaction_dependency_tracking=WRITESET

Applier线程的高效应用对提升集群性能非常重要。因为Applier 线程应用不及时可能会触发writer节点启用flow control,直接影响性能。除此之外,它对校验也会有重要的影响。因为Applier 的及时应用可以使transaction_commit_on_all_memebers及时跟进,stable set 更加接近最新的事务。这会使校验集合(Certification_info)中的无用的快照版本被及时垃圾回收,从而降低了校验的复杂度,提高了整体性能的吞吐量。这是一个很重要的优化策略!

总结

根据group replication的实现原理,其瓶颈主要产生于三点:

  1. 复制组间通信(高带宽网络)
  2. 事务在各节点的校验
  3. Applier应用效率

优化的思路也是主要集中在这三个方向。每次调整参数都应压测对比效果,确保理论符合实际。盲目根据理论调优而不压测对比是不可取的。一套优化方案,都是经过反复调参反复压测而得出的最终结果。

参考资料:
之前读过一篇文章,写的很好,现在找不到了,很抱歉!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容