mysql5.7 半同步复制二(安装部署)

一、半同步复制的安装部署
要想使用半同步复制,必须满足以下几个条件:
1. MySQL 5.5及以上版本即可安装(实验使用mysql 5.7.20 版本)
2. 变量have_dynamic_loading为YES
在两台MySQL服务器上检查"have_dynamic_loading"是否为YES
MySQL > show variables LIKE 'have_%';
+------------------------+----------+
| Variable_name          | Value    |
+------------------------+----------+
| have_dynamic_loading   | YES      |
+------------------------+----------+
3. 异步复制已经存在(非常重要!如果异步复制不存在会导致半同步失败。
异步部署请查看mysql5.7 主从配置
 
二、安装与配置
1.master服务器安装插件
mysql > install plugin rpl_semi_sync_master soname 'semisync_master.so'; #安装插件 
Query OK, 0 rows affected (0.20 sec) 
 
mysql > show plugins; #查看是否安装成功 
+----------------------+--------+-------------+--------------------+---------+
| Name                 | Status | Type        | Library            | License |
+----------------------+--------+-------------+--------------------+---------+ 
| rpl_semi_sync_master | ACTIVE | REPLICATION | semisync_master.so | GPL     |
+----------------------+--------+-------------+--------------------+---------+
43 rows in set (0.14 sec) 
 
mysql > SET GLOBAL rpl_semi_sync_master_enabled = 1;  #开启半同步复制,默认是关闭的 
Query OK, 0 rows affected (0.29 sec)
2.slave服务器安装插件
mysql > INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; #安装插件 
Query OK, 0 rows affected (0.29 sec)  
 
mysql > show plugins;  #查看插件是否安装成功 
+---------------------+----------+-------------+-------------------+---------+ 
| Name                | Status   | Type        | Library           | License | 
+---------------------+----------+-------------+-------------------+---------+
| rpl_semi_sync_slave | ACTIVE   | REPLICATION | semisync_slave.so | GPL     | 
+---------------------+----------+-------------+-------------------+---------+ 
43 rows in set (0.04 sec) 
 
mysql > SET GLOBAL rpl_semi_sync_slave_enabled = 1; #开启半同步复制 
Query OK, 0 rows affected (0.02 sec) 
 
mysql > STOP SLAVE IO_THREAD;   #重启从服务器IO线程,手动将异步模式切换为半同步模式
Query OK, 0 rows affected (0.05 sec) 
 
mysql> START SLAVE IO_THREAD; 
Query OK, 0 rows affected (0.00 sec)
重启后,slave会在master上注册为半同步复制的slave角色。这时候,主的error.log中会打印如下信息:
2018-04-19 10:09:56 33021 [Note] Semi-sync replication initialized for transactions. 
2018-04-19 10:09:56 33021 [Note] Semi-sync replication enabled on the master. 
2018-04-19 10:13:16 33021 [Note] Stop asynchronous binlog_dump to slave (server_id: 2) 
2018-04-19 10:13:16 33021 [Note] Start semi-sync binlog_dump to slave (server_id: 2), pos(mysql-bin.000002, 695)
3.查看半同步是否在运行
master:
mysql > show status like 'Rpl_semi_sync_master_status'; 
+-----------------------------+-------+ 
| Variable_name               | Value | 
+-----------------------------+-------+ 
| Rpl_semi_sync_master_status | ON    | 
+-----------------------------+-------+ 
1 row in set (0.02 sec)
slave:
mysql > show status like 'Rpl_semi_sync_slave_status'; 
+----------------------------+-------+ 
| Variable_name              | Value | 
+----------------------------+-------+ 
| Rpl_semi_sync_slave_status | ON    | 
+----------------------------+-------+ 
1 row in set (0.06 sec)
4.配置文件/etc/my.cof下配置参数,因为服务器重启后半同步会失效(必选)
master:
plugin-load=rpl_semi_sync_master=semisync_master.so 
rpl_semi_sync_master_enabled=1
slave:
plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=1
在有的高可用架构下,master和slave需同时启动,以便在切换后能继续使用半同步复制(即同时安装master和slave插件)
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" 
rpl-semi-sync-master-enabled = 1 
rpl-semi-sync-slave-enabled = 1
5.查看相关参数
mysql > show variables like '%semi%'; #环境变量 
+------------------------------------+-------+ 
| Variable_name                      | Value | 
+------------------------------------+-------+ 
| rpl_semi_sync_master_enabled       | ON    |  
| rpl_semi_sync_master_timeout       | 10000 |
| rpl_semi_sync_master_trace_level   | 32    |
| rpl_semi_sync_master_wait_no_slave | ON    |
+------------------------------------+-------+ 
4 rows in set (0.00 sec)
rpl_semi_sync_master_enabled          #表示开启半同步复制
rpl_semi_sync_master_timeout          #默认1000毫秒,即10秒超时,将切换为异步复制
rpl_semi_sync_master_trace_level      #表示用于开启半同步复制时的调试级别,默认32
rpl_semi_sync_master_wait_no_slave #表示是否允许master每个事物都要等待slave接收确认,默认为ON。如果我的架构是1主2从,2个从都采用了半同步复制,且设置的是rpl_semi_sync_master_wait_for_slave_count=2,如果其中一个挂掉了,对于rpl_semi_sync_master_wait_no_slave设置为ON的情况,此时显示的仍然是半同步复制,如果rpl_semi_sync_master_wait_no_slave设置为OFF,则会立刻变成异步复制。
 
mysql > show status like '%semi%';  #状态变量 
+--------------------------------------------+-------+ 
| 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             | 0     | 
| Rpl_semi_sync_master_no_times              | 0     | 
| Rpl_semi_sync_master_no_tx                 | 0     |
| Rpl_semi_sync_master_status                | ON    | 
| 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     |
+--------------------------------------------+-------+ 
14 rows in set (0.00 sec)
Rpl_semi_sync_master_clients  #表示从服务器有多少个配置成半同步复制
Rpl_semi_sync_master_no_tx   #表示从服务器确认失败提交的数量
Rpl_semi_sync_master_status  #表示主服务器使用是异步还是半同步复制
Rpl_semi_sync_master_yes_tx  #表示从服务器确认成功提交的数量
 
slave:
mysql > show variables like '%semi%'; 
+---------------------------------+-------+ 
| Variable_name                   | Value | 
+---------------------------------+-------+ 
| rpl_semi_sync_slave_enabled     | ON    |  #表示在slave已经开始半同步复制模式 
| rpl_semi_sync_slave_trace_level | 32    |  #表示用于开启半同步复制时的调试级别,默认32
+---------------------------------+-------+ 
2 rows in set (0.20 sec)
mysql> show status like '%semi%'; 
+----------------------------+-------+ 
| Variable_name              | Value | 
+----------------------------+-------+ 
| Rpl_semi_sync_slave_status | ON    |  #表示从服务器开启半同步复制 
+----------------------------+-------+ 
1 row in set (0.08 sec)
MySQL半同步复制搭建完毕!

您可以选择一种方式赞助本站

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: