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的网络消耗有多大,给某个事务带来的额外的消耗有多大等

mysql 半同步复制 插件安装以及测试的更多相关文章

  1. centos7下mysql半同步复制原理安装测试详解

    原理简介: 在MySQL5.5之前,MySQL的复制其实都是异步复制(见下图),主库和从库的数据之间存在一定的延迟,这样存在一个隐患:当在主库上写入一个事务并提交成功,而从库尚未得到主库推送的BinL ...

  2. MySQL半同步复制的安装和配置

    (1)检查master/slave是否支持动态加载插件 > show variables like 'have_dynamic_loading'; +---------------------- ...

  3. MySQL半同步复制搭建

    默认情况下,MySQL 5.5/5.6/5.7和MariaDB 10.0/10.1的复制是异步的,异步复制可以提供最佳性能,主库把binlog日志发送给从库,这一动作就结束了,并不会验证从库是否接收完 ...

  4. 安装MySQL半同步复制

    一.简介 从MySQL5.5开始,MySQL以插件的形式支持半同步复制.如何理解半同步呢?首先我们来看看异步,全同步的概念 异步复制(Asynchronous replication) MySQL默认 ...

  5. MySQL半同步复制

    从MySQL5.5开始,MySQL以插件的形式支持半同步复制.如何理解半同步呢?首先我们来看看异步,全同步的概念 异步复制(Asynchronous replication) MySQL默认的复制即是 ...

  6. Mysql半同步复制模式说明及配置示例 - 运维小结

    MySQL主从复制包括异步模式.半同步模式.GTID模式以及多源复制模式,默认是异步模式 (如之前详细介绍的mysql主从复制).所谓异步模式指的是MySQL 主服务器上I/O thread 线程将二 ...

  7. MHA-结合MySQL半同步复制高可用集群(Centos7)

    目录 一.理论概述 本案例部署思路 二.环境 三.部署 部署MHA 部署二进制包MySQL及部署主从复制 部署半同步复制 配置MHA MHA测试 部署lvs+keepalived(lvs1,lvs2) ...

  8. MySQL半同步复制(5.5之后引入)

    半同步复制架构在主库提交一个事务后,commit完成即反馈客户端,无需等待推送binlog完成,如图: 半同步复制在主库完成一个事务后,需等待事务信息写入binlog日志并且至少有一个从库写入rela ...

  9. mysql半同步复制实现

    mysql半同步复制和异步复制的区别如上述架构图所看到的:在mysql异步复制的情况下.Mysql Master Server将自己的Binary Log通过复制线程传输出去以后,Mysql Mast ...

随机推荐

  1. dataTables 使用整理

    官方网站:http://www.datatables.net/ 简介:DataTables是一个jQuery的表格插件.这是一个高度灵活的工具,依据的基础逐步增强,这将增加先进的互动控制,支持任何HT ...

  2. hibernate框架(4)---主键生成策略

    主键生成策略 常见的生成策略分为六种 1.increment 由Hibernate从数据库中取出主键的最大值(每个session只取1次),以该值为基础,每次增量为1,在内存中生成主键,不依赖于底层的 ...

  3. 微信小程序教学第二章:小程序中级实战教程之预备篇 - 项目结构设计 |基于最新版1.0开发者工具

    iKcamp官网:http://www.ikcamp.com 访问官网更快阅读全部免费分享课程:<iKcamp出品|全网最新|微信小程序|基于最新版1.0开发者工具之初中级培训教程分享>. ...

  4. springboot 入门五-日志一

    springboot内部采用commons logging作为日志纪录,但也保留了第三方的日志框架接入的实现,例如Java Util Logging,Log4J2还有Logback.如果你要实现一种日 ...

  5. Java用代码获取classes目录下的文件的方式

    假设我们有个Maven的Web项目,其中有src/main/java和src/main/resources两个输出目录(注意这两个目录下的内容运行后都会输出到classes目录下), 而在src/ma ...

  6. 常用的 JS 排序算法整理

    关于排序算法的问题可以在网上搜到一大堆,但是纯 JS 版比较零散,之前面试的时候特意整理了一遍,附带排序效率比较. //1.冒泡排序 var bubbleSort = function(arr) { ...

  7. 浅谈,html\css脱离标准文档流相关

    (个人知识有限,难免有误,请见谅) 标准文档流,顾名思义,是要按照一定规矩排列的,默认的就是元素会从左至右,从上至下排列,块级会独占一行,行内元素会和小伙伴们共享一行. 本来在标准文档流下,各个元素相 ...

  8. ubuntu16.04 查询ip,网关,dns信息

    用ifconfig命令只能查询ip,子网掩码信息,不能获取dns和网关信息 用下面命令即可查询 nmcli dev show

  9. 第六节 etc/passwd 、etc/shadow 、 useradd 、 groupadd

    调优方法原理:禁用atime的修改来节省cpu和内存资源.命令:mount noatime disk 1.配置文件1. /etc/passwd文档结构:由":" 分隔成7个字段&q ...

  10. linux 写U盘出现的问题

    在写U盘的时候,报了这样的错,记录如下: umount /dev/sdb // 提示未挂载 mkfs.vfat /dev/sdb // device or resource busy umount / ...