半同步复制
(1).半同步复制原理。
在半同步复制架构中,主机会确保当前的事务至少已经发送到一个备机中(不等待事务重做完成),
才会返回消息到客户端。如果在设置的时间内,事务日志还没传送到备机,那么半同步会变成异步复制。
(2).半同步复制的和异步复制的区别:
异步复制:主机不会去检测事务日志是否已经传动到备机,就返回消息到客户端。在高负载的系统中丢失数据的风险比较大。
半同步复制;主机会检测事务日志是否已经至少传送到一个备机中,如果在设置的时间内一直没有传送到一个备机中,
主机不会返回消息到客户端,此时客户端一直会处于等待状态,其实这个时候,在主机上事务已经执行成功,并且已经提交。
(3).配置半同步复制:
在mysql5.6 中半同步复制时作为一个插件存在的,默认情况下禁用的,需要手动启动半同步复制。
在master上安装半同步复制插件:
master> INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so‘;
在slave上安装半同步复制插件:
slave> INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so‘;
master安装完之后会出现与半同步相关的变量
mysql> show variables like ‘rpl_semi%‘ ;
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled | 0 |
| rpl_semi_sync_master_timeout | 30000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave | ON |
+------------------------------------+-------+
4 rows in set (0.00 sec)
slave 安装完之后会出现与半同步相关的变量
mysql> show variables like ‘rpl_semi%‘ ;
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | 0 |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
2 rows in set (0.01 sec)
安装完半同步复制插件之后需要激活半同步复制
建议直接写入配置文件中,否则服务重启半同步失效
SET GLOBAL rpl_semi_sync_master_enabled = ON;
mysql> show variables like ‘rpl_semi_sync_master_enabled‘ ;
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| rpl_semi_sync_master_enabled | ON |
+------------------------------+-------+
1 row in set (0.00 sec)
(4)与半同步相关的变量
master 上的
mysql> show variables like ‘rpl_semi%‘ ;
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 30000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave | ON |
+------------------------------------+-------+
4 rows in set (0.00 sec)
slave 上的:
mysql> show variables like ‘rpl_semi%‘ ;
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
2 rows in set (0.00 sec)
变量解释:
rpl_semi_sync_master_enabled:是否开启了半同步复制
rpl_semi_sync_master_timeout:客服端等待master返回消息的超时时间
rpl_semi_sync_master_wait_no_slave:表示即使没有SLAVE也会等待过期时间结束,是默认值,
主库的状态变量:
mysql> show global status like ‘rpl_semi%‘ ;
+--------------------------------------------+----------+
| Variable_name | Value |
+--------------------------------------------+----------+
| Rpl_semi_sync_master_clients | 1 |
| Rpl_semi_sync_master_net_avg_wait_time | 6482 |
| Rpl_semi_sync_master_net_wait_time | 51861 |
| Rpl_semi_sync_master_net_waits | 8 |
| Rpl_semi_sync_master_no_times | 2 |
| Rpl_semi_sync_master_no_tx | 2 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 6287791 |
| Rpl_semi_sync_master_tx_wait_time | 25151166 |
| Rpl_semi_sync_master_tx_waits | 4 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 1 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 4 |
+--------------------------------------------+----------+
参数解释:
Rpl_semi_sync_master_clients:处于连接的slave 数
Rpl_semi_sync_master_no_times:从半同步模式变为普通模式(异步模式)的次数
Rpl_semi_sync_master_no_tx:未在半同步模式下执行的事务数
Rpl_semi_sync_master_status:模式状态
Rpl_semi_sync_master_yes_tx:在半同步模式下成功执行的事务数
Rpl_semi_sync_master_wait_sessions:等待备库响应的线程数
网络相关:
Rpl_semi_sync_master_net_avg_wait_time:等待网络响应的平均时间
Rpl_semi_sync_master_net_wait_time:等待网络响应的总时间
Rpl_semi_sync_master_net_waits:等待网络响应的总次数
备库状态香瓜:
Rpl_semi_sync_master_tx_avg_wait_time:等待备库响应的平均时间
Rpl_semi_sync_master_tx_wait_time:等待备库响应的总时间
Rpl_semi_sync_master_tx_waits:等待备库响应的响应的次数
备库的状态变量:
mysql> show global status like ‘rpl_semi%‘ ;
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
Rpl_semi_sync_slave_status:备库的状态
注释:半同步复制只在MySQL 5.5及更高版本中可用
以下为参考链接:
http://blog.csdn.net/wyzxg/article/details/8487953
http://www.orczhou.com/index.php/2011/06/mysql-5-5-semi-sync-replication-setup-config/
http://bbs.51cto.com/thread-877655-1.html
http://blog.itpub.net/24945919/viewspace-764369/
本文出自 “SQLServer MySQL” 博客,请务必保留此出处http://dwchaoyue.blog.51cto.com/2826417/1552821