并行复制和半同步复制

并行复制

主库一般有多个进程同时访问,就会有多个进程的操作被记录在二进制日志中,但是SLAVE端如果只有1个SQL线程执行回放操作的话,会很慢,时间延迟大,所以要开启多多线程,并由一个线程负责调度;
在server11(slave)上:

mysql> show processlist;
+----+-------------+---------------+------+---------+------+--------------------------------------------------------+------------------+
| Id | User        | Host          | db   | Command | Time | State                                                  | Info             |
+----+-------------+---------------+------+---------+------+--------------------------------------------------------+------------------+
|  1 | system user |               | NULL | Connect | 1156 | Slave has read all relay log; waiting for more updates | NULL             |
|  2 | system user |               | NULL | Connect | 9313 | Waiting for master to send event                       | NULL             |
|  8 | root        | localhost     | test | Query   |    0 | starting                                               | show processlist |
| 11 | proxy       | server6:37401 | test | Sleep   | 3856 |                                                        | NULL             |
+----+-------------+---------------+------+---------+------+--------------------------------------------------------+------------------+
#此时只能看见一个进程
[root@server11 ~]# vim /etc/my.cnf
#添加:
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
[root@server11 ~]# /etc/init.d/mysqld restart

mysql> show processlist;
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
| Id | User        | Host      | db   | Command | Time | State                                                  | Info             |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
|  1 | system user |           | NULL | Connect |    3 | Slave has read all relay log; waiting for more updates | NULL             |
|  2 | system user |           | NULL | Connect |    5 | Waiting for master to send event                       | NULL             |
|  4 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
|  5 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
|  6 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
|  7 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
|  8 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
|  9 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
| 10 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
| 11 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
| 12 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
| 13 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
| 14 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
| 15 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
| 16 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
| 19 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
| 20 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
| 21 | system user |           | NULL | Connect |    5 | Waiting for an event from Coordinator                  | NULL             |
| 22 | root        | localhost | NULL | Query   |    0 | starting                                               | show processlist |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
此时有16个线程!
参数解释:
slave-parallel-type=LOGICAL_CLOCK  #基于组的并行复制方式,默认基于库的并行复制方式
slave-parallel-workers=16     #指定开启的线程数
  • 半同步复制:

主:

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
mysql> show variables like '%rpl%';
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | OFF        |
| rpl_semi_sync_master_timeout              | 10000      |
| rpl_semi_sync_master_trace_level          | 32         |
| rpl_semi_sync_master_wait_for_slave_count | 1          |
| rpl_semi_sync_master_wait_no_slave        | ON         |
| rpl_semi_sync_master_wait_point           | AFTER_SYNC |
| rpl_stop_slave_timeout                    | 31536000   |
+-------------------------------------------+------------+
  • slave:
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
mysql> show plugins;
mysql> show variables like '%rpl%';
+---------------------------------+----------+
| Variable_name                   | Value    |
+---------------------------------+----------+
| rpl_semi_sync_slave_enabled     | OFF      |
| rpl_semi_sync_slave_trace_level | 32       |
| rpl_stop_slave_timeout          | 31536000 |
+---------------------------------+----------+
  • 测试:
slave上:mysql> stop io_thread;
        mysql> show slave status\G;
master上:mysql> insert into userdb values ('user7','777');
            Query OK, 1 row affected (10.51 sec)                #等待了10秒才复制过去
mysql> show status like "Rpl_semi_sync%";
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 0     |
| Rpl_semi_sync_master_net_avg_wait_time     | 0     |
| Rpl_semi_sync_master_net_wait_time         | 0     |
| Rpl_semi_sync_master_net_waits             | 0     |
| Rpl_semi_sync_master_no_times              | 1     |
| Rpl_semi_sync_master_no_tx                 | 1     |
| Rpl_semi_sync_master_status                | OFF   |
| Rpl_semi_sync_master_timefunc_failures     | 0     |
| Rpl_semi_sync_master_tx_avg_wait_time      | 0     |
| Rpl_semi_sync_master_tx_wait_time          | 0     |
| Rpl_semi_sync_master_tx_waits              | 0     |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
| Rpl_semi_sync_master_wait_sessions         | 0     |
| Rpl_semi_sync_master_yes_tx                | 0     |
+--------------------------------------------+-------+

slave:mysql> start slave io_thread;
master:
mysql> insert into userdb values ('user8','888');
Query OK, 1 row affected (0.23 sec)              #很快的复制过去了
mysql> show status like "Rpl_semi_sync%";
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     |
| Rpl_semi_sync_master_net_avg_wait_time     | 0     |
| Rpl_semi_sync_master_net_wait_time         | 0     |
| Rpl_semi_sync_master_net_waits             | 2     |
| Rpl_semi_sync_master_no_times              | 1     |
| Rpl_semi_sync_master_no_tx                 | 1     |
| Rpl_semi_sync_master_status                | ON    |
| Rpl_semi_sync_master_timefunc_failures     | 0     |
| Rpl_semi_sync_master_tx_avg_wait_time      | 403   |
| Rpl_semi_sync_master_tx_wait_time          | 403   |
| Rpl_semi_sync_master_tx_waits              | 1     |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
| Rpl_semi_sync_master_wait_sessions         | 0     |
| Rpl_semi_sync_master_yes_tx                | 1     |
+--------------------------------------------+-------+

猜你喜欢

转载自blog.csdn.net/weixin_42167918/article/details/81512495