一、半同步复制的安装部署
要想使用半同步复制,必须满足以下几个条件:
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,则会立刻变成异步复制。
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 #表示从服务器确认成功提交的数量
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半同步复制搭建完毕!
您可以选择一种方式赞助本站