MySQL 半同步复制详解-阿里云开发者社区

开发者社区> 技术小胖子> 正文

MySQL 半同步复制详解

简介:
+关注继续查看

MySQL Semisynchronous Replication


MySQL5.5 除了支持内置的异步复制机制,还开始支持接口支持半同步复制的机制。


一、半同步复制的概念:


i.

当Slave主机连接到Master时,能够查看其是否处于半同步复制的机制。


ii.

当Master上开启半同步复制的功能时,至少应该有一个Slave开启其功能。此时,一个线程在Master上提交事务将受到阻塞,直到得知一个已开启半同步复制功能的Slave已收到此事务的所有事件,或等待超时。


iii.

当一个事务的事件都已写入其relay-log中且已刷新到磁盘上,Slave才会告知已收到。


iv.

如果等待超时,也就是Master没被告知已收到,此时Master会自动转换为异步复制的机制。当至少一个半同步的Slave赶上了,Master与其Slave自动转换为半同步复制的机制。


v.

半同步复制的功能要在Master,Slave都开启,半同步复制才会起作用;否则,只开启一边,它依然为异步复制。



二、同步,异步,半同步复制的比较:


同步复制:Master提交事务,直到事务在所有的Slave都已提交,此时才会返回客户端,事务执行完毕。缺点:完成一个事务可能会有很大的延迟。


异步复制:当Slave准备好才会向Master请求binlog。缺点:不能保证一些事件都能够被所有的Slave所接收。


半同步复制:半同步复制工作的机制处于同步和异步之间,Master的事务提交阻塞,只要一个Slave已收到该事务的事件且已记录。它不会等待所有的Slave都告知已收到,且它只是接收,并不用等其完全执行且提交。



三、常用参数解释:


开启半同步复制的状态量:


rpl_semi_sync_master_enabled  是控制Master是否开启半同步,开启或不开启,将其设置为ON或OFF(1or0).


rpl_semi_sync_master_timeout  是控制Master等待多长时间被告知Slave已收到,也就是所谓的超时时间。


rpl_semi_sync_slave_enabled   是控制Slave是否开启半同步,开启或不开启,将其设置为ON或OFF(1or0)。



监控半同步复制的状态变量(几个常用的):


Rpl_semi_sync_master_clients:查看有多少个开启半同步复制的插件的Slave


Rpl_semi_sync_master_status:查看在Master上半同步复制是否正在运行,其值为ON时,说明Master已启用半同步且已被告知有Slave收到;其值为OFF时,说明Master没启用半同步或是没被告知,由于timeout等原因。


Rpl_semi_sync_master_no_tx:查看有多少事务没有用半同步复制的机制进行复制。


Rpl_semi_sync_master_yes_tx:查看有多少事务是通过半同步复制机制成功复制。


Rpl_semi_sync_slave_status:查看Slave上半同步复制是否正常运行,其值为ON时,说明Slave正通过半同步复制且Slave I/O正在运行;为OFF时,反之。


可以通过以下方法查看以上的参数状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mysql> show status like 'rpl_semi%';
+--------------------------------------------+-------+
| Variable_name                    | Value     |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients            | 2      |
| Rpl_semi_sync_master_net_avg_wait_time         | 654     |
| Rpl_semi_sync_master_net_wait_time         | 1308     |
| Rpl_semi_sync_master_net_waits           | 2     |
| Rpl_semi_sync_master_no_times            | 0     |
| Rpl_semi_sync_master_no_tx             | 0     |
| Rpl_semi_sync_master_status             | ON     |
| Rpl_semi_sync_master_timefunc_failures       | 0     |
| Rpl_semi_sync_master_tx_avg_wait_time        | 0     |
| 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     |
| Rpl_semi_sync_master_yes_tx             | 1     |
| Rpl_semi_sync_slave_status             | ON     |
+--------------------------------------------+-------+
15 rows in set (0.00 sec)



四、开始部署:


部署环境要求:


i.MySQL版本需求


MySQL5.5或以上版本


ii.

在MySQL上安装插件需要数据库支持动态载入。检查是否支持,用如下检测:

1
2
3
4
5
6
7
mysql> show global variables like 'have_dynamic_loading';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| have_dynamic_loading | YES  |
+----------------------+-------+
1 row in set (0.00 sec)


iii.半同步复制是基于复制的环境。也就是说配置半同步复制前,已有复制的环境。


开始安装:


在Master上执行:

1
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';


各个Slave上执行:

1
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';



iv.如果不清楚Plugin的目录,用如下查找:

1
2
3
4
5
6
mysql> show global variables like 'plugin_dir';
+---------------+----------------------------------+
| Variable_name | Value                            |
+---------------+----------------------------------+
| plugin_dir    | /opt/usr/local/mysql/lib/plugin/ |
+---------------+----------------------------------+


v.检查Plugin是否已正确安装:

1
2
3
mysql> show plugins;
or
mysql> select from information_schema.plugins;



五、开始配置:


在Master上执行:

1
2
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> SET GLOBAL rpl_semi_sync_master_timeout = N; N自己设置一个数字即可


在Slave上执行:

1
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;


如果在一个正在运行的Slave上开启半同步复制的功能,必须先停止Slave I/O,将其启用半同步后,再开启Slave I/O.

1
2
mysql> STOP SLAVE IO_THREAD; 
       START SLAVE IO_THREAD;


如果不这样做,Slave还是会以异步的方式进行复制。


正如大家所知,如果不将变量的设置写到配置文件,下次重启数据库,将失效。写入配置文件:


Master上:


[mysqld]


rpl_semi_sync_master_enabled=1


rpl_semi_sync_master_timeout=1000 #default 1 second



Slave上:


[mysqld]


rpl_semi_sync_slave_enabled=1


总结:

半同步复制个人感觉是维持数据完整性,安全性的的一个策略,虽会损失一点性能,还是值得的。配置很简单,关键是理解其工作机制。、




      本文转自crazy_charles 51CTO博客,原文链接:http://blog.51cto.com/douya/1790281,如需转载请自行联系原作者




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

相关文章
MySQL中的半同步复制(r11笔记第65天)
关于MySQL的复制架构,大体有下面三种方式,异步,全同步复制,半同步复制。 三种复制方式     第一种是异步复制,是比较经典的主从复制,搭建主从默认的架构方式,就是属于异步的,相对来说性能要好一些。
941 0
mysql配置完半同步复制之后报错[ERROR] The server quit without updating PID file
修改配置,MySQL启动报:[ERROR] The server quit without updating PID file     [root@localhost mysql]# /etc/init.
1496 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 31 章 逻辑复制_31.2. 订阅
31.2. 订阅 31.2.1. 复制槽管理 订阅是逻辑复制的下游端。定义订阅的节点被称为 订阅者。 订阅定义了与另一个数据库的连接以及它想要订阅的一组发布(一个或多个)。 订阅者数据库的行为与任何其他PostgreSQL实例的行为相同, 并且可以通过定义自己的发布来用作其他数据库的发布者。
1250 0
mysql主从复制(半同步方式)
mysql主从复制(半同步方式) 博客分类: MySQL mysql replication 复制  一、半同步复制原理介绍 1. 优点 当事务返回客户端成功后,则日志一定在至少两台主机上存在。
2547 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 31 章 逻辑复制_31.4. 限制
31.4. 限制 逻辑复制目前有以下限制或缺少的功能。 这些可能会在未来的版本中解决。 不复制数据库模式和DDL命令。初始模式可以使用pg_dump --schema-only 手动复制。后续的模式更改需要手动保持同步。
1027 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
3963 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
5698 0
mysql semi-sync(半同步复制)
半同步复制: 5.5集成到MySQL,以插件的形式存在,需要单独安装 确保事务提交后bnog至少传输到一个从库 不保证从库应用完这个事务的binlog 性能有一定的降低,响应时间会更长 网络异常或从库宕机,卡住主库直到超时或从库恢复 异步复制的逻辑...
1145 0
云存储网关复制模式新玩法 - 部分复制
说到云存储网关的复制模式,相信不少人都有既爱又恨的感觉。复制模式确实是一个非常实用的功能,它将数据在云端和网关侧同时保留了两份,不但降低了数据丢失的风险,同时也极大地提高了从网关访问数据的性能。如果预算允许,我相信所有用户都会选择复制模式,这样所有的数据都会缓存在网关,使用起来性能绝对是杠杠的。
376 0
13262
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载