安装、配置Semi-sync Replication

在两台主机上安装好MySQL5.5,编译好的插件在目录CMAKE_INSTALL_PREFIX/lib/plugin下(默认是/usr/local/mysql/lib/plugin)。例如这里编译是指定CMAKE_INSTALL_PREFIX为/home/mysql/mysql,则有:semisync_master.so  semisync_slave.so

mysql主从备份之间存在同步,半同步与异步的方式,对于同步与异步相对而言比较好理解,但是同步存在延迟比较大,效率不高,异步又不能百分百保证数据的一致性。而半同步方式正好是两者的兼容。

mysql半同步模式是在mysql5.5版本以后增加的,所谓半同步指当master事物提交后,等待slave接收日志后才返回给应用层表示成功,事物足够小,延迟较小的话,通过半同步的模式,牺牲较小的性能就能保证数据不丢失。

但是半同步的方式也存在着缺陷,完成单条事物增加了额外的开销,同时延迟的大小也取决于网络的好坏。

采用半同步的方式,当slave down机时,master在一次等待超时时,会关闭半同步的特性,切换到异步的方式。master down机后,可能存在一些事务已经在主库Commit,但是还没有传给任何slave,这类事务被称为"墙头事务",“墙头事务”都是没有返回给slave的,所以发起事务的应用层并不知道这个事务是否已经完成。这时,如果应用层不做切换,只是等down机的master恢复后,继续在master进行操作,客户端会发现前面的"墙头事务"都已经完成,可以继续进行后续的业务处理;另一种情况,如果应用层Failover到slave上,应用层会发现前面的“墙头事务”都没有成功,则需要重新做这些事务,然后继续进行后续的业务处理。

对于slave可以有多个,任何一个slave接收完成日志后,master就可以返回给应用层了,网络传输在并发线程较多时,一次可能传输很多日志,事务的平均延迟会降低。"墙头事务"在墙头上的时候,是可以被读取的,但是这些事务在上面Failover的场景下,是被认为没有完成的。

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.01 sec)
mysql>  show global variables like 'rpl_semi_sync%';
+------------------------------------+-------+
| 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    |
+------------------------------------+-------+
4 rows in set (0.00 sec)

从库需要安装rpl_semi_sync_slave

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.01 sec)
mysql> show global variables like 'rpl_semi_sync%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | OFF   |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
2 rows in set (0.01 sec)
mysql>

这些参数是可以动态修改的
rpl_semi_sync_master_enabled  :
启动master 支持半同步复制。

rpl_semi_sync_master_timeout  :
主库等待半同步复制信息返回的超时间隔,默认10秒

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追赶上后,也不会采用半同步的

相应的系统的状态变量:master

mysql> show global status like 'rpl_semi_sync%'; ;
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     | #记录支持半同步的slave的个数
| Rpl_semi_sync_master_net_avg_wait_time     | 411   | #master 等待slave 回复的平均等待时间。 单位毫秒.
| Rpl_semi_sync_master_net_wait_time         | 27959 | #master 总的等待时间
| Rpl_semi_sync_master_net_waits             | 68    | #master 等待slave 回复的的总的等待次数
| Rpl_semi_sync_master_no_times              | 0     | #master 关闭半同步复制的次数
| Rpl_semi_sync_master_no_tx                 | 0     | #aster 没有收到slave的回复而提交的次数
| Rpl_semi_sync_master_status                | ON    | #标记master现在是否是半同步复制状态
| Rpl_semi_sync_master_timefunc_failures     | 0     | #时间函数未正常工作的次数
| Rpl_semi_sync_master_tx_avg_wait_time      | 512   | #开启Semi-sync,事务返回需要等待的平均时间
| Rpl_semi_sync_master_tx_wait_time          | 34881 | #事务等待备库响应的总时间
| Rpl_semi_sync_master_tx_waits              | 68    | #事务等待备库响应的总次数
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     | #改变当前等待最小二进制日志的次数
| Rpl_semi_sync_master_wait_sessions         | 0     | # 当前有几个线程在等备库响应
| Rpl_semi_sync_master_yes_tx                | 68    | # Semi-sync模式下,成功的事务数
+--------------------------------------------+-------+

slave 的系统状态变量

mysql> show global status like 'rpl_semi_sync%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | OFF   |
+----------------------------+-------+
1 row in set (0.01 sec)
#标记slave 是否在半同步状态。

关于Rpl_semi_sync_master_wait_pos_backtraverse

花了一些时间弄明白这个变量,继续证实了这个变量确实不重要。

在semisync_master中,维护了这样的两个变量wait_file_name_和wait_file_pos_,当主库上多个事务都在等待备库的响应时,这两个变量记录了所有等待中,最小的那一个Binlog位置。如果这时,一个新的事务加入等待,并且该事务需要等待的Binlog比wait_file_name_和wait_file_pos_还小的话,则更新这两个值,并将Rpl_semi_sync_master_wait_pos_backtraverse值自增一次。

配置mysql原生主从,master配置:

# master my.cnf
log-bin                = /data/mysqllog/binlog/mysql-bin
expire_logs_days       = 2
server-id              = 20        ID,主从不可重复
binlog-do-db            = dingmh   #需要同步的库
binlog-ignore-db        = mysql    #忽略同步的库
增加主从同步的帐户
GRANT REPLICATION SLAVE ON *.* TO 'slave001'@'172.168.10.12' IDENTIFIED BY '123456';
#slave my.cnf
server-id              = 21
replicate-do-db = dingmh            #需要复制的数据库名
replicate-ignore-db= xxx            #不需要复制的数据库名
change master to master_host='172.168.10.11',master_user='slave001',master_password='123456';
slave start;

配置semi-sync:

#master  my.cnf
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
#slave my.cnf
rpl_semi_sync_slave_enabled=1

转载于:https://blog.51cto.com/dingmh/1407563

mysql 5.5半同步复制功能部署相关推荐

  1. MySQL 5.5 到MySQL 5.6半同步复制(SSL)

    数据放在一个raid 1上: [root@slave1 ~]# yum -y install mdadm [root@slave1 ~]# mdadm -C /dev/md0 -l1 -n2 /dev ...

  2. mysql确认半同步命令_怎么判断mysql是否是半同步复制

    AFTER_COMMIT(5.6默认值) master将每个事务写入binlog ,传递到slave 刷新到磁盘(relay log),同时主库提交事务.master等待slave 反馈收到relay ...

  3. mysql主从复制,半同步,主主复制架构的实现

    mysql的数据同步功能,不仅在一定程度上提供数据库查询时的负载均衡,而且为实现数据库的冗灾.备份.恢复.负载均衡等都是有极大帮助.而数据的同步功能可以通过主从复制来实现,而主从复制是异步进行的,并且 ...

  4. mysql 5.5半同步复制_MySQL5.5配置安装半同步复制

    确认master和slave上是否开启have_dynamic_loading master MASTER@root@(none) 10:54:58>show variables like 'h ...

  5. Kettle-开源的ETL工具集-实现SqlServer到Mysql表的数据同步并部署在Windows服务器上

    场景 kettle 中文名称叫水壶,该项目的主程序员MATT希望把各种数据放到一个壶里,然后 以一种指定的格式流出.是一款由纯Java编写的ETL工具,绿色无需安装,数据抽取高效稳定(数据迁移工具). ...

  6. MySQL 迁移到半同步模式

    下面实验是基于http://5073392.blog.51cto.com/5063392/1536487搭建的 1) 在master上安装插件 mysql> install plugin rpl ...

  7. mysql 5.5半同步复制_(5.5)mysql高可用系列——MySQL半同步复制(实践)

    关键词,mysql半同步复制 [0]实验环境 操作系统:CentOS linux 7.5 数据库版本:5.7.24 数据库架构:主从复制,主库用于生产,从库用于数据容灾和主库备机,采用默认传统的异步复 ...

  8. mysql 1539_MySQL:半同步(三)从库端初始化和回调函数

    源码版本5.7.29 一.全局变量 semisync_slave_plugin.cc ReplSemiSyncSlave repl_semisync; /* indicate whether or n ...

  9. mysql semi-sync(半同步复制)

    半同步复制: 5.5集成到MySQL,以插件的形式存在,需要单独安装 确保事务提交后bnog至少传输到一个从库 不保证从库应用完这个事务的binlog 性能有一定的降低,响应时间会更长 网络异常或从库 ...

最新文章

  1. jquery获取对象
  2. sscanf操作字符串和整型的区别
  3. 【数学和算法】最小二乘法,SVD奇异值分解、LU分解的应用场景
  4. linux 挂载ISO文件以及yum源配置
  5. leetcode 384. Shuffle an Array | 384. 打乱数组(Fisher-Yates洗牌算法)
  6. Spring开启@Async异步方法(javaconfig配置)
  7. 【SDK】Memory read error at 0xF8007080
  8. 30-算法训练 最短路 spfa
  9. linux定位异常前后日志信息
  10. WINDOWS获得当前执行程序路径的办法
  11. 高版本linux安装gamit,Ubuntu 14.04下安装GAMIT/GLOBK10.50软件
  12. 周测作业五(apache的安装与配置)
  13. 什么是iu组装服务器,IU李知恩和“买家秀”在“教科书”级别的私有服务器共享是邻居...
  14. 单词迷阵游戏就是从一个10x10的字母矩阵中找出目标单词,查找方向可以从左往右、从右往左、从上往下或者从下往上。例如下面的迷阵中包含quot等单词。
  15. python二级第四套答案
  16. 计算机网络笔记---互联网的组成及三种交换方式
  17. SAP MM 物料主数据:公司代码 XXXX 不存在或没有完全维护
  18. Win10家庭版如何正确关闭自动更新
  19. 超融合服务器硬件与普通区别,超融合架构与传统的IT架构有哪些区别
  20. 冯诺依曼设计的计算机局限性,计算机智能化中冯·诺依曼体系结构的局限性

热门文章

  1. 所有接口添加plist文件的写法 swift
  2. RSA签名的PSS模式
  3. 如何用纯 CSS 创作一个同心圆弧旋转 loader 特效
  4. OpenGL编程轻松入门(四)
  5. Kotlin基本语法和使用
  6. CCAH-CCA-500-4题:Where are Hadoop task log files stored?
  7. Flex Air程序打包成独立的exe安装文件
  8. centos下为firefox安装flash插件的几种方法
  9. 区块链4.0DexChain是什么?
  10. react 渲染道具_关于React道具的另一篇文章