mysql 半同步复制


半同步复制


(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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。