一环境准备
1 MySQL 5.5 + 版本
2 本例已经搭建好的MySQL Replication 同时也有另一种搭建方法先配置好semi sync ,然后再搭建主从。
提示:如何搭建主从 请参考 如何搭建 MySQL 主从复制
二 安装
说明:此例演示的是M-M 架构 需要在主库和备库同时执行安装 plugin的命令。
在主库安装semisync_master和semisync_slave插件:
-
root@rac3 mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
-
root@rac3 mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
-
root@rac3 mysql> show plugins;
-
+-----------------------+--------+--------------------+--------------------+---------+
-
| Name | Status | Type | Library | License |
-
+-----------------------+--------+--------------------+--------------------+---------+
-
| rpl_semi_sync_master | ACTIVE | REPLICATION | semisync_master.so | GPL |
-
| rpl_semi_sync_slave | ACTIVE | REPLICATION | semisync_slave.so | GPL |
-
+-----------------------+--------+--------------------+--------------------+---------+
-
22 rows in set (0.00 sec)
-
root@rac3 mysql> show variables like \"%rpl_semi%\";
-
+------------------------------------+-------+
-
| Variable_name | Value |
-
+------------------------------------+-------+
-
| rpl_semi_sync_master_enabled | ON |
-
| rpl_semi_sync_master_timeout | 1000 |
-
| rpl_semi_sync_master_trace_level | 32 |
-
| rpl_semi_sync_master_wait_no_slave | ON |
-
| rpl_semi_sync_slave_enabled | ON |
-
| rpl_semi_sync_slave_trace_level | 32 |
-
+------------------------------------+-------+
- 6 rows in set (0.00 sec)
-
root@rac3 mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
-
root@rac3 mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
-
root@rac3 mysql> show plugins;
-
+-----------------------+--------+--------------------+--------------------+---------+
-
| Name | Status | Type | Library | License |
-
+-----------------------+--------+--------------------+--------------------+---------+
-
| rpl_semi_sync_master | ACTIVE | REPLICATION | semisync_master.so | GPL |
-
| rpl_semi_sync_slave | ACTIVE | REPLICATION | semisync_slave.so | GPL |
- +-----------------------+--------+--------------------+--------------------+---------+
- mysql> uninstall plugin rpl_semi_sync_slave
三 其他注意事项
注意安装完plugin 之后 ,MySQL会将该插件记录到系统表mysql.plugin中,下次启动时系统则会自动加载该插件了,无需再次执行上面的命令,同时还需要修改主备库my.cnf 配置文件。
-
## semi sync
-
rpl_semi_sync_master_enabled=1
-
rpl_semi_sync_master_timeout=1000
- rpl_semi_sync_slave_enabled=1
my.cnf 中带有rpl_semi 等参数
-
140523 22:42:12 InnoDB: Waiting for the background threads to start
-
140523 22:42:13 InnoDB: 1.1.8 started; log sequence number 1909957825
-
140523 22:42:13 [Note] Semi-sync replication initialized for transactions.
- 140523 22:42:13 [Note] Semi-sync replication enabled on the master.
-
140523 22:49:09 mysqld_safe Starting mysqld daemon with databases from /home/mysql/data3306/data
-
.......
-
140523 22:49:13 InnoDB: Waiting for the background threads to start
-
140523 22:49:14 InnoDB: 1.1.8 started; log sequence number 1909961006
-
140523 22:49:14 [Note] Event Scheduler: Loaded 0 events
- 140523 22:49:14 [Note] /usr/sbin/mysqld: ready for connections.
使用show variables like '%rpl_semi%' 查看半同步复制相关的参数
-
root@rac4 mysql > show variables like "%rpl_semi%";
-
+------------------------------------+-------+
-
| 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_no_slave | ON |
-
| rpl_semi_sync_slave_enabled | OFF |
-
| rpl_semi_sync_slave_trace_level | 32 |
- +------------------------------------+-------+
rpl_semi_sync_master_enabled 控制在主库是否开启了异步复制模式,可以设置为ON,OFF ,默认是off 。
rpl_semi_sync_master_timeout 控制主库等待备库反馈已提交事务在备库落地的时间,以毫秒为单位默认是10s 。
rpl_semi_sync_slave_enabled 控制在从库是否开启了异步复制模式,可以设置为ON,OFF ,默认是off 。
rpl_semi_sync_master_trace_level和rpl_semi_sync_slave_trace_level是可以组合(求或)的参数,可以是下面值的组合:
-
1 = general level (for example, time function failures)
-
16 = detail level (more verbose information)
-
32 = net wait level (more information about network waits)
- 64 = function level (information about function entry and exit)
表示是否允许master每个事务提交后都要等待slave的接收确认信号。默认为ON,即每一个事务都会等待。如果为OFF,则slave追赶上后,也不会开启半同步复制模式,需要手工开启。
五 查看运行状态
-
root@rac4 mysql > show status like "%rpl_semi%";
-
+--------------------------------------------+---------------+
-
| Variable_name | Value |
-
+--------------------------------------------+---------------+
-
| Rpl_semi_sync_master_clients | 1 |# 有多少个Semi-sync的备库
-
| Rpl_semi_sync_master_net_avg_wait_time | 732 |# 事务提交后,等待备库响应的平均时间
-
| Rpl_semi_sync_master_net_wait_time | 27885 |# 等待网络响应的总次数
-
| Rpl_semi_sync_master_net_waits | 1323 |# 总的网络等待时间
-
| Rpl_semi_sync_master_no_times | 0 |# 一共有几次从Semi-sync跌回普通状态
-
| Rpl_semi_sync_master_no_tx | 0 |# 备库未及时响应的事务数
-
| Rpl_semi_sync_master_status | ON |# 主库上Semi-sync是否正常开启
-
| Rpl_semi_sync_master_timefunc_failures | 0 |# 时间函数未正常工作的次数
-
| Rpl_semi_sync_master_tx_avg_wait_time | 59 |# 开启Semi-sync,事务返回需要等待的平均时间
-
| Rpl_semi_sync_master_tx_wait_time | 8649 |# 事务等待备库响应的总时间
-
| Rpl_semi_sync_master_tx_waits | 809 |# 事务等待备库响应的总次数
-
| Rpl_semi_sync_master_wait_pos_backtraverse | 9398 |# 改变当前等待最小二进制日志的次数
-
| Rpl_semi_sync_master_wait_sessions | 230 |# 当前有几个线程在等备库响应
- | Rpl_semi_sync_master_yes_tx | 801 |# Semi-sync模式下,成功的事务数
Rpl_semi_sync_master_tx_avg_wait_time:事务因开启Semi_sync,平均需要额外等待的时间
Rpl_semi_sync_master_net_avg_wait_time:事务进入等待队列后,到网络平均等待时间
依据上面两个状态值可以知道,Semi-sync的网络消耗有多大,给某个事务带来的额外的消耗有多大。
Rpl_semi_sync_master_status 则表示当前Semi-sync是否正常工作。
从Rpl_semi_sync_master_no_times变量,可以知道一段时间内,Semi-sync是否有超时失败过,该计数器则记录了这样的失败次数。
六 参考文章
[1] Semisynchronous Replication Installation and Configuration
[2] Semisynchronous Replication Monitoring
[3] MySQL 5.5 Semi-sync Replication安装配置、参数说明