MySQL5.5半同步复制-阿里云开发者社区

开发者社区> 像教授> 正文

MySQL5.5半同步复制

简介:
+关注继续查看

 在保证数据库性能的前提下,怎么保证数据的一致性呢?

       在MySQL 5.5版本中即支持异步复制又支持半同步复制。

       1、当slave 连接master的时候,它会指出它是否支持半同步复制。

       2、当master启用 semisynchronous replication.并且至少有一台slave也启用了该功能,master端的事务会被阻塞,并且等到该事务会等待其中任何一个slave接受到该事务,或者超过等待时间才会提交。

       3slave端回复给master的信息依据是slave事务已经写入到relay-log并且已经刷写到了磁盘。
       4、如果master端等待超时的话,没有任何slave给出该事务已经写入relay-log的信息,那么他会自动转到异步复制,当其中一个支持异步复制的slave追赶上了master,那么master会进入到半同步复制状态。
       5、半同步复制必须是两端都支持。

      当master的线程处于被阻塞(等待slave端返回的消息时),并不会给该会话session返回任何消息。当阻塞结束的时候,master会返回给该session消息。

      如果一个事务中包含对非事务表的修改,在发生rollback的情况下,master也是会这些信息写入到binlog上面,并且也会发生阻塞,等待slave端写入。

      半同步复制需要在数据一致性和性能上作出权衡。

       5.5半同步功能的安装步骤

        1、这个首先需要5.5支持动态加载模块:查看变量: have_dynamic_loading是否是yes;

        2、基本的复制架构已经搭建

        3、master端和slave端的模块是随着版本发布的,在master端执行:

        INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

    在slave端执行:

    INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

    如果在安装的时候出现如下错误,请下载缺失的组件:http://dev.mysql.com/downloads/os-linux.html.

        ERROR 1126 (HY000): Can't open shared library
'/usr/local/mysql/lib/plugin/semisync_master.so' (errno: 22 libimf.so: cannot open
shared object file: No such file or directory)
         安装完成后,还需要设置变量才能正常启动:

         SET GLOBAL rpl_semi_sync_master_enabled =1;

     SET GLOBAL rpl_semi_sync_master_timeout =N 设置好超时时间,默认是10s (有点长啦)

          在slave 端执行:

          SET GLOBAL rpl_semi_sync_slave_enabled =1

     (以上信息都可以写到my.cnf文件中)

     这个时候复制还是属于异步复制,只有重启slave或者 重启 slave I/O线程,才能真正使用半同步复制功能。

     stop slave io_thread;start slave io_thread;

           监控半同步复制状态;

          几个重要的变量是:

          rpl_semi_sync_master_clients  支持和已经注册半同步复制的已连接的slave数量。

          rpl_semi_sync_master_status  Master的半同步复制状态,1是活动状态,0表示非活动,要么是没有启用该功能,要么以切换至异步复制状态

         rpl_semi_sync_slave_status Slave 上的半同步复制状态,1,表示已经启用而且I/O线程正在运行,0表示非活动状态。

使用半同步复制需要思考的几个问题:

1、当所有的slave崩溃,半同步复制的状态如何变化?

为防止半同步复制在没有收到确认的情况下发生阻塞,使用rpl-semi-sync-mastertimeout=millseconds(毫秒) 设置一个超时时间,在规定时间内master没有收到任何slave的回应,那么复制将装变为异步复制。注意事项:该选项在server重启之后不会保存,所以可以考虑写入到my.cnf中。

2、当master产生新的事件,此时没有slave与之保持连接,这个时候master该如何变化?

默认情况下,和1上面所说的一样,有一个超时时间,。为了更高效的进行复制,我们可以设置 rpl-semi-sync-master-wait-no-slave=on|off ,来关闭默认的行为,直接转变为异步复制

3、对于比较繁忙的master,如何在master出现故障时,保持数据主从的一致性?对于出现partial transaction的情况,可以利用第三方自动截取部分 roll back 字段。具体参考:http://www.woqutech.com/files/Partial_Transaction.pdf

 

       






本文转自 位鹏飞 51CTO博客,原文链接:http://blog.51cto.com/weipengfei/974866,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MySQL中的半同步复制(r11笔记第65天)
关于MySQL的复制架构,大体有下面三种方式,异步,全同步复制,半同步复制。 三种复制方式     第一种是异步复制,是比较经典的主从复制,搭建主从默认的架构方式,就是属于异步的,相对来说性能要好一些。
941 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 31 章 逻辑复制_31.2. 订阅
31.2. 订阅 31.2.1. 复制槽管理 订阅是逻辑复制的下游端。定义订阅的节点被称为 订阅者。 订阅定义了与另一个数据库的连接以及它想要订阅的一组发布(一个或多个)。 订阅者数据库的行为与任何其他PostgreSQL实例的行为相同, 并且可以通过定义自己的发布来用作其他数据库的发布者。
1250 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 31 章 逻辑复制_31.4. 限制
31.4. 限制 逻辑复制目前有以下限制或缺少的功能。 这些可能会在未来的版本中解决。 不复制数据库模式和DDL命令。初始模式可以使用pg_dump --schema-only 手动复制。后续的模式更改需要手动保持同步。
1027 0
Mysql13 复制2
<div class="markdown_views"> <h2 id="复制管理">复制管理</h2> <h3 id="监控">监控</h3> <p>SHOW MASTER LOGS; <br> 查看主库当前有哪些二级制日志,其logname是其他命令的入参, file_size是偏移量也是入参。</p> <p>假设我们知道日志的偏移量(来源于上面的命令)使用: <
1318 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 31 章 逻辑复制_31.7. 安全
31.7. 安全 用于复制链接的角色必须具有REPLICATION属性 (或者是超级用户)。该用户的访问权限必须在pg_hba.conf中配置。 用户必须具有数据库的CREATE权限才能创建发布。
952 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 31 章 逻辑复制_31.6. 监控
31.6. 监控 由于逻辑复制基于与物理流式复制 类似的体系结构,因此发布节点上的监视与物理复制主节点的监视类似 (请参见第 26.2.5.2 节)。 有关订阅的监控信息可以在pg_stat_subscription 中看到。
992 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 26 章 高可用、负载均衡和复制_26.5. 热备
26.5. 热备 26.5.1. 用户概览 26.5.2. 处理查询冲突 26.5.3. 管理员概览 26.5.4. 热备参数参考 26.5.5. 警告 术语热备用来描述服务器处于归档恢复或后备模式时连接到服务器并运行只读查询的能力。
1296 0
MySQL5.6同步复制新特性详解
作者:贺春阳,出处:mysqlpub.com ! 继5.5半同步复制后,5.6又对其进行了优化与改进,其中有两个地方较为重要: 1、对运维人员来说应该是一件大喜的事情,在主从切换后,在传统的方式里,你需要找到binlog和POS点,然后hangemasterto指向,而不是很有经验的运维,往往会将其找错,造成主从同步复制报错,在mysql5.6里,你无须再知道binlog和POS点,你
1063 0
+关注
987
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载