mysql 半同步 插件_mysql 半同步复制 插件安装以及测试

mysql Server version:         5.5.18-log MySQL Community Server (GPL)

1.安装插件

检查mysql是否支持动态添加插件:

root@localhost (none)>select @@have_dynamic_loading ;

+------------------------+

| @@have_dynamic_loading |

+------------------------+

| YES                    |

+------------------------+

1 row in set (0.00 sec)

在master上安装插件:rpl_semi_sync_master

二进制安装的mysql插件一般放在:$MYSQL_HOME/lib/plugin

root@localhost wjlcn>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

root@localhost (none)>show global variables like 'rpl_semi%';

+------------------------------------+-------+

| Variable_name                      | Value |

+------------------------------------+-------+

| rpl_semi_sync_master_enabled       | OFF   |   #启动master 支持半同步复制

| rpl_semi_sync_master_timeout       | 10000 |   #主库等待半同步复制信息返回的超时间隔,默认10秒(单位毫秒)

| rpl_semi_sync_master_trace_level   | 32    |

| rpl_semi_sync_master_wait_no_slave | ON    |

+------------------------------------+-------+

rpl_semi_sync_master_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)

rpl_semi_sync_master_wait_no_slave :是否允许master 每个事物提交后都要等待slave的receipt信号。默认为on ,每一个事务都会等待,如果slave当掉后,当slave追赶上master的日志时,可以自动的切换为半同步方式,如果为off,则slave追赶上后,也不会采用半同步的方式复制了,需要手工配置。

root@localhost (none)>show global status like 'rpl_semi%';

+--------------------------------------------+-------+

| Variable_name                              | Value |

+--------------------------------------------+-------+

| Rpl_semi_sync_master_clients               | 0     |   #记录支持半同步的slave的个数

| Rpl_semi_sync_master_net_avg_wait_time     | 0     |   #master 等待slave回复的平均等待时间,单位微秒

| Rpl_semi_sync_master_net_wait_time         | 0     |   #master 总的等待时间

| Rpl_semi_sync_master_net_waits             | 0     |   #master 等待slave回复的的总的等待次数

| Rpl_semi_sync_master_no_times              | 0     |   #master 关闭半同步复制的次数

| Rpl_semi_sync_master_no_tx                 | 0     |   #master 没有收到slave的回复而提交的次数

| Rpl_semi_sync_master_status                | OFF   |   #标记master现在是否是半同步复制状态

| Rpl_semi_sync_master_timefunc_failures     | 0     |   #时间函数未正常工作的次数

| Rpl_semi_sync_master_tx_avg_wait_time      | 0     |   #开启Semi-sync,事务返回需要等待的平均时间

| 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     |   #当前有多少个session 因为slave 的回复而造成等待

| Rpl_semi_sync_master_yes_tx                | 0     |   #master 成功接收到slave的回复的次数

+--------------------------------------------+-------+

(注:status中rpl相关的时间单位是微秒)

在slave上安装插件:rpl_semi_sync_slave

root@localhost wjlcn>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

root@localhost (none)>show global variables like 'rpl_semi%';

+---------------------------------+-------+

| Variable_name                   | Value |

+---------------------------------+-------+

| rpl_semi_sync_slave_enabled     | OFF   |   #启动slave 支持半同步复制

| rpl_semi_sync_slave_trace_level | 32    |

+---------------------------------+-------+

动态设置rpl_semi_sync_slave_enabled =ON,然后重启replication(stop slave;start slave;)即可。记得一定要重启,否则master无法确认该slave是否开启了半同步。相同的操作可以在任意多个slave中进行设置。

root@localhost (none)>show global status like 'rpl_semi%';

+----------------------------+-------+

| Variable_name              | Value |

+----------------------------+-------+

| Rpl_semi_sync_slave_status | OFF   |    #表示当前处于异步模式还是半同步模式

+----------------------------+-------+

2.上面比较重要的状态值有:

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是否有超时失败过,该计数器则记录了这样的失败次数。

3.简单测试

3.1 开启半同步复制

设置master  rpl_semi_sync_master_enabled=1 and rpl_semi_sync_master_timeout=12000

设置slave   rpl_semi_sync_slave_enabled=1

3.2 创建测试表

CREATE TABLE `test` (

`id` int(11) DEFAULT NULL,

`address` varchar(50) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

3.3 插入一些数据,一切正常

root@localhost wjlcn>select count(*) from test;

+----------+

| count(*) |

+----------+

|        8 |

+----------+

查看status变量:

master中:Rpl_semi_sync_master_status ON  and Rpl_semi_sync_master_clients 1

slave 中:Rpl_semi_sync_slave_status  ON

3.4 停止slave

root@localhost (none)>stop slave;

slave 中:Rpl_semi_sync_slave_status  OFF

而master中仍然是:Rpl_semi_sync_master_status ON  and Rpl_semi_sync_master_clients 1

3.5 插入数据

执行:

root@localhost wjlcn>insert into test values(12,'kakak');

Query OK, 1 row affected (12.00 sec)

因为从库已停止,时间刚刚好是前面设置的 rpl_semi_sync_master_timeout 的值

再看master的status变成:Rpl_semi_sync_master_status OFF  and Rpl_semi_sync_master_clients 1

3.6 启动slave

start slave

当同步追上master时,

slave 中变回:Rpl_semi_sync_slave_status  ON

master中变回:Rpl_semi_sync_master_status ON  and Rpl_semi_sync_master_clients 1

3.7 rpl 的一些状态

root@localhost wjlcn>show global status like 'rpl_semi%';

+--------------------------------------------+-------+

| Variable_name                              | Value |

+--------------------------------------------+-------+

| Rpl_semi_sync_master_clients               | 1     |

| Rpl_semi_sync_master_net_avg_wait_time     | 5392  |

| Rpl_semi_sync_master_net_wait_time         | 59312 |

| Rpl_semi_sync_master_net_waits             | 11    |

| Rpl_semi_sync_master_no_times              | 1     |

| Rpl_semi_sync_master_no_tx                 | 1     |

| Rpl_semi_sync_master_status                | ON    |

| Rpl_semi_sync_master_timefunc_failures     | 0     |

| Rpl_semi_sync_master_tx_avg_wait_time      | 3115  |

| Rpl_semi_sync_master_tx_wait_time          | 15577 |

| Rpl_semi_sync_master_tx_waits              | 5     |

| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |

| Rpl_semi_sync_master_wait_sessions         | 0     |

| Rpl_semi_sync_master_yes_tx                | 1     |

+--------------------------------------------+-------+

可以看到关闭半同步复制的次数(Rpl_semi_sync_master_no_times)和 没有收到slave的回复而提交的次数(Rpl_semi_sync_master_no_tx)都变成1;可以查看Semi-sync的网络消耗有多大,给某个事务带来的额外的消耗有多大等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值