mysql复制--半同步复制配置

21人阅读 评论(0) 收藏 举报
分类:

半同步复制原理:

在mysql5.5之前mysql的复制都是异步操作,主库和从库的数据之间存在一定延迟,这样存在一个隐患:当在主库上写入一个事务并提交,而从库尚未得到主库推送的Binlog日志时,主库宕机了,例如:主库可能因为磁盘损坏,内存故障等造成主库上该事务Binlog丢失,此时从库上就可能损失这个事务,从而造成主从不一致。为了解决这个问题,在mysql5.5引入了半同步复制。
在mysql5.5之前的异步复制时,主库执行完了commit提交操作后,在主库写入Binlog日志后即可成功返回客户端,无需等待binlog日志传送给从库。
这里写图片描述
而半同步复制时,为了保证主库上的每一个Binlog事务都能够被可靠的复制到从库上,主库在每次事务成功提交时,并不及时反馈给前端应用用户,而是等待其中一个从库也收到binlog事务并成功写入中继日志后,主库才返回commit操作成功给客户端。
半同步复制保证了事务成功提交后,至少有两份日志记录,一份在主库的binlog日志上,另一份在至少一个丛库的中继日志 relay log上,从而进一步保证了数据的完整性,半同步复制的大致流程图如下:
这里写图片描述
在半同步复制模式下,假如在1,2,3中的任何一步骤中主机宕机,则事务并未提交成功,从库上也没有收到事务对应的binlog日志,所以主从数据是一致的。假如在步骤4 传送binlog日志到丛库时从库宕机或是网络故障,导致binlog并没有及时的传送到从库上,此时主库上的事务会等待一段时间(时常有参数 rpl_semi_sync_master_timeout设置的毫秒数决定),如果binglog在这段时间内都无法成功推送到从库上,则mysql自动调整复制模式为异步,事务正常返回提交结果给客户端。
半同步复制很大程度上取决于主从库之间的网络情况,往返时延 RTT 越小决定了从库的实时性能越好,通俗的说,主从库之间网络越快,从库越实时。尽量保证该从节点和主节点在同一个机房,同一个机柜的,同一台交换机上最好。
google为mysql5.5以后开发的semi同步插件,我们可以利用该插件实现半同步复制,
主库和从库使用不同的插件。

实验环境:
192.168.0.196 主节点1
192.168.0.198 主节点2
myql版本:mysql-5.5.17
配置防火墙,运行两主节点的能够互相访问对方的3306端口。

配置流程:
1:)判断msyql服务器是否支持动态增加插件
这里写图片描述
2:)确认支持动态插件后,检查mysql的安装目录下是否存在插件,一般默认在安装目录/lib/plugin目录下存在主库插件:semisync_master.so和从库插件semisync_slave.so
这里写图片描述
3:)在主库上安装插件
这里写图片描述
4:)在从库上安装插件

这里写图片描述
5:)从mysql.plugin中查看安装的插件
这里写图片描述
这里写图片描述
当安装完成后,MySql会在系统表plugin中记录刚才安装的插件,下次系统重启后会自动加载插件。
6:)需要分别在主库和从库上配置参数打开半同步 semi_sync,默认半同步设置是不打开的。
主库上配置全局参数:
这里写图片描述
从库上一样配置全局参数:
这里写图片描述
7:启动从库上的slave线程
这里写图片描述
到此步,半同步配置完成

配置测试
在主库上查看半同步状态:
这里写图片描述
注意一下三个参数:
rpl_semi_sync_master_status =ON :表示半同步复制目前处于打开状态
rpl_semi_sync_master_yes_tx 值为 0 :表示主库目前尚未有任何一个事务是通过半同步复制到从库。
rpl_semi_sync_master_no_tx 值为0:表示当前有0个事务不是半同步模式下从库及时响应的。
执行一个事务,在检查一下状态:
这里写图片描述
此时会发现 rpl_semi_sync_master_yes_tx变为1,刚才的update事务通过半同步复制到了从库上, rpl_semi_sync_master_yes_tx增加了1
查看从库数据表
这里写图片描述

在测试一下网络异常的环境下主库等待的毫秒超时后,自动转成异步复制的场景。
1)查看主库半同步复制的等待超时时间:
这里写图片描述
2:)开启从库防火墙,并设置过滤规则,模拟主库宕机或是网络故障。
*表示启用, 通过【空格键】切换是否启用
这里写图片描述
在从库上创建一条过滤规则
这里写图片描述
再在从库上执行停止slave线程并再开启slave线程,并查看slave线程。
这时 slave_IO_Running变为connecting状态,表示正在和主库进行连接操作。如果连接成功,slave_IO_Running变为yes状态.
这里写图片描述
3:)在主库上执行一个事务,并提交,主库上的提交操作会被阻塞30秒。
这里写图片描述
这里写图片描述
主库经过30秒的同步等待时间,没有获取从库的同步响应之后更新操作执行成功,该更新事务被写道主库的二进制文件中,并同时将半同步模式切换为异步模式。
这里写图片描述
rpl_semi_sync_master_status =OFF :表示半同步复制目前处于关闭
rpl_semi_sync_master_yes_tx 值为 1:表示主库目前有1一个事务是通过半同步复制到从库。
rpl_semi_sync_master_no_tx 值为3:表示当前有3个事务不是半同步模式下从库及时响应的,由之前的2变为三,就是因为半同步更新操作没有成功。

4:清除从库的防火墙规则。
清除防火墙规则后,从库会自动尝试连接主库,几秒钟后i/o 线程的状态会从Connecting 变成 YES,并且主库和从库的数据一致了
这里写图片描述
这里写图片描述
这里写图片描述
查看主库和从库的semi_sync状态:
这里写图片描述
这里写图片描述
发现主库的 rpl_semi_sync_master_status 变为 ON ,主库在检测到从库正常后,主库到从库的复制方式有异步模式,再次切换为半同步模式。
从半同步的复制的流程会发现,半同步复制的‘半’就体现在:虽然主库和从库的 binlog日志是同步,但是主库并不等待从库应用这部分日志就返回提交结果,这部分操作是异步的。从库的数据并不是和主库实时同步的。所以只能称为半同步,而不是完全的实时同步。

查看评论

MySQL半同步复制原理配置与介绍

环境介绍:Ubuntu Server 16.04.2+MySQL 5.7.17 Community Server (GPL)MySQL安装通过APT的方式安装,官方指导文档地址: https:/...
  • u010870518
  • u010870518
  • 2017-04-06 19:21:52
  • 10513

MySQL5.6半同步复制配置及实验

MySQL5.5之前是异步复制,主库上写入事务并成功提交之后就返回给用户成功。如果主库的binlog还没有来得及传给从库,这样会造成主从数据不一致。MySQL5.5引入了半同步复制机制,主库上comm...
  • guogang83
  • guogang83
  • 2017-07-04 15:25:19
  • 773

MySQL半同步复制配置

一、半同步复制的概念   从MYSQL5.5开始,支持半自动复制。之前版本的MySQL Replication都是异步(asynchronous)的,主库在执行完一些事务后,是不会管备库的进度的...
  • lichangzai
  • lichangzai
  • 2016-01-21 11:29:22
  • 4285

MySQL5.7半同步复制技术

Mysql的复制分为4种: 1、异步复制replication 2、Semi-sync replication  半同步复制 性能结余异步和全同步之间 3、Sync replication 全同步 4...
  • jerry____wang
  • jerry____wang
  • 2016-07-20 14:50:02
  • 1465

mysql异步复制与半同步复制的架构原理

迷徒少年 2017-12-18 20:37:14 在mysql5.5版本之前,复制都是异步复制,(关于异步复制的原理请大家自己参照下面的半同步复制,两者只是略有不同)。 该复制经常遇...
  • u011277123
  • u011277123
  • 2017-12-25 09:31:39
  • 152

MySQL关于异步复制、同步复制半同步复制、无损复制的概念与区别

  • 2017年03月10日 12:28
  • 179KB
  • 下载

mysql5.7的半同步复制

1.安装相关的插件 2.修改的参数 3.做同步 4.查看slave是否有数据 5.确认是同步还是半同步...
  • zhengwei125
  • zhengwei125
  • 2016-09-19 18:44:15
  • 2128

MySQL 5.7 深度解析: 半同步复制技术

转自 http://www.actionsky.com/docs/archives/129 复制架构衍生史 在谈这个特性之前,我们先来看看MySQL的复制架构衍生史。 MySQL...
  • skykingf
  • skykingf
  • 2016-08-04 10:28:44
  • 4581

MySQL的半同步复制和延时复制

半同步复制一、半同步复制的原理 1、当Slave主机连接到Master时,能够查看其是否处于半同步复制的机制。 2、当Master上开启半同步复制的功能时,至少应该有一个Slave开启其功能...
  • m0_37886429
  • m0_37886429
  • 2017-11-06 11:06:11
  • 661

MySQL5.7 对半同步复制的改进

mysql5.7可以更进一步减少半同步复制时发生意外,数据不一致丢失问题.
  • qq_16414307
  • qq_16414307
  • 2016-01-15 10:08:05
  • 1535
    个人资料
    持之以恒
    等级:
    访问量: 713
    积分: 144
    排名: 113万+
    文章分类
    文章存档