MySQL集群架构之主从模式并行复制实践

  在MySQL集群架构之主从模式 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中进行了并行复制的简单描述,对其原理进行了一些总结概述。本文将进行并行复制的实操。

  MySQL并行复制通过修改配置可以实现,不用另外添加plugin。修改配置如下(实操环境同MySQL集群架构之主从模式半异步复制实践 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)):

  要开启enhanced multi-threaded slave其实很简单,只需根据如下设置:

    slave-parallel-type=LOGICAL_CLOCK
    slave-parallel-workers=16
    slave_pending_jobs_size_max = 2147483648
    slave_preserve_commit_order=1
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    
relay_log_recovery=ON

  1、设置并发同步类型为基于组方式

    查看默认的并行复制方式:show variables like 'slave_parallel_type';

      

     可见默认是datebase,每个线程只能处理一个数据库。确保设置为组模式:set global slave_parallel_type='logical_clock';

      

  2、设置复制线程的数量: set global slave_parallel_workers=6;

      

   3、配置从库回放顺序:set global slave_preserve_commit_order=ON;

      

    slave_preserve_commit_order 参数在多线程复制环境下,能够保证从库回放relay log事务的顺序与这些事务在relay log中的顺序完全一致,也就是与主库提交的顺序完全一致。怎么理解呢?举个例子,开启并行复制后,如果relay log中有3个事务A,B,C,他们在relay log中的顺序是A->B->C,而它们的last_commited相同,也就是说他们可以并行回放,那么在从库上,这3个事务,提交的顺序可能就不再是A->B->C,设置slave_preserve_commit_order=ON,能够保证这3个事务,在从库回放时,仍然按照它们在relay log中的顺序来回放,保证从库回放relay log事务的顺序与主库完全相同。

      

  4、设置事件所需的内存大小:set global slave_pending_jobs_size_max= 536970912;

      

    从库回放线程的时间内存大小默认为16M,这个参数不一定非要修改,但是一定要大于主库设置的max_allowed_packet。

   5、统一配置文件:以上参数,全部可以在从库的配置文件中添加上,然后重启数据库

  以上配置都是在登录mysql后的命令行操作,也可在配置文件中进行设置,这些配置参数都是global的。

  测试

    Master:

      

     Slave:

      

     具体并行复制对异步复制延时的解决有多高效,需要通过压力测试验证。

  监控

    在使用了MTS后,复制的监控依旧通过SHOW SLAVE STATUS\G,同时performance_schema库中提供了很多元数据表,可以更详细的监控并行复制过程。

    1)show tables like 'replication%';

      

    2)select * from replication_group_member_actions;
      

 

 

 

 

posted on 2022-03-01 21:21  池塘里洗澡的鸭子  阅读(416)  评论(0编辑  收藏  举报