在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;