【MySQL】Semisynchronous Replication 配置和参数说明

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:  前文 Semisynchronous Replication 概述 已经介绍 semi sync的基本原理以及特性,优缺点。本章将进入实践,毕竟“纸上来得终觉浅,绝知此事要躬行”。
 前文 Semisynchronous Replication 概述 已经介绍 semi sync的基本原理以及特性,优缺点。本章将进入实践,毕竟“纸上来得终觉浅,绝知此事要躬行”。^_^
一环境准备
  1 MySQL 5.5 + 版本
  2 本例已经搭建好的MySQL Replication 同时也有另一种搭建方法先配置好semi sync ,然后再搭建主从。
提示:如何搭建主从 请参考  如何搭建 MySQL 主从复制

二 安装
说明: 此例演示的是M-M 架构 需要在主库和备库同时执行安装 plugin的命令。
在主库安装semisync_master和semisync_slave插件:

  1. root@rac3 mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
  2. root@rac3 mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
  3. root@rac3 mysql> show plugins;
  4. +-----------------------+--------+--------------------+--------------------+---------+
  5. | Name                  | Status | Type               | Library            | License |
  6. +-----------------------+--------+--------------------+--------------------+---------+
  7. | rpl_semi_sync_master  | ACTIVE | REPLICATION        | semisync_master.so | GPL     |
  8. | rpl_semi_sync_slave   | ACTIVE | REPLICATION        | semisync_slave.so  | GPL     |
  9. +-----------------------+--------+--------------------+--------------------+---------+
  10. 22 rows in set (0.00 sec)
  11. root@rac3 mysql> show variables like \"%rpl_semi%\";
  12. +------------------------------------+-------+
  13. | Variable_name                      | Value |
  14. +------------------------------------+-------+
  15. | rpl_semi_sync_master_enabled       | ON    |
  16. | rpl_semi_sync_master_timeout       | 1000  |
  17. | rpl_semi_sync_master_trace_level   | 32    |
  18. | rpl_semi_sync_master_wait_no_slave | ON    |
  19. | rpl_semi_sync_slave_enabled        | ON    |
  20. | rpl_semi_sync_slave_trace_level    | 32    |
  21. +------------------------------------+-------+
  22. 6 rows in set (0.00 sec)
在备库上 加载semisync_master和semisync_slave插件:

  1. root@rac3 mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
  2. root@rac3 mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME  'semisync_slave.so';
  3. root@rac3 mysql> show plugins;
  4. +-----------------------+--------+--------------------+--------------------+---------+
  5. | Name                  | Status | Type               | Library            | License |
  6. +-----------------------+--------+--------------------+--------------------+---------+
  7. | rpl_semi_sync_master  | ACTIVE | REPLICATION        | semisync_master.so | GPL     |
  8. | rpl_semi_sync_slave   | ACTIVE | REPLICATION        | semisync_slave.so  | GPL     |
  9. +-----------------------+--------+--------------------+--------------------+---------+
当然如果需要卸载 该plugin 需要执行

  1. mysql> uninstall plugin rpl_semi_sync_slave

三 其他注意事项
注意安装完plugin 之后 ,MySQL会将该插件记录到系统表mysql.plugin中,下次启动时系统则会自动加载该插件了,无需再次执行上面的命令,同时还需要修改主备库my.cnf 配置文件。

  1. ## semi sync
  2. rpl_semi_sync_master_enabled=1
  3. rpl_semi_sync_master_timeout=1000
  4. rpl_semi_sync_slave_enabled=1
以下是我测试在安装问plugin 之后 my.cnf 中不配置和配置的系统启动日志:
my.cnf 中带有rpl_semi 等参数

  1. 140523 22:42:12 InnoDB: Waiting for the background threads to start
  2. 140523 22:42:13 InnoDB: 1.1.8 started; log sequence number 1909957825
  3. 140523 22:42:13 [Note] Semi-sync replication initialized for transactions.
  4. 140523 22:42:13 [Note] Semi-sync replication enabled on the master.
安装完成 my.cnf 不加rpl_semi 参数,是不开启semi sync 复制的。
  1. 140523 22:49:09 mysqld_safe Starting mysqld daemon with databases from /home/mysql/data3306/data
  2. .......
  3. 140523 22:49:13 InnoDB: Waiting for the background threads to start
  4. 140523 22:49:14 InnoDB: 1.1.8 started; log sequence number 1909961006
  5. 140523 22:49:14 [Note] Event Scheduler: Loaded 0 events
  6. 140523 22:49:14 [Note] /usr/sbin/mysqld: ready for connections.
四 常用参数

使用show variables like '%rpl_semi%' 查看半同步复制相关的参数

  1. root@rac4 mysql > show variables like "%rpl_semi%";
  2. +------------------------------------+-------+
  3. | Variable_name                      | Value |
  4. +------------------------------------+-------+
  5. | rpl_semi_sync_master_enabled       | OFF   |
  6. | rpl_semi_sync_master_timeout       | 10000 |
  7. | rpl_semi_sync_master_trace_level   | 32    |
  8. | rpl_semi_sync_master_wait_no_slave | ON    |
  9. | rpl_semi_sync_slave_enabled        | OFF   |
  10. | rpl_semi_sync_slave_trace_level    | 32    |
  11. +------------------------------------+-------+
说明:
rpl_semi_sync_master_enabled 控制在主库是否开启了异步复制模式,可以设置为ON,OFF ,默认是off 。
rpl_semi_sync_master_timeout 控制主库等待备库反馈已提交事务在备库落地的时间,以毫秒为单位默认是10s 。
rpl_semi_sync_slave_enabled    控制在从库是否开启了异步复制模式,可以设置为ON,OFF ,默认是off 。
rpl_semi_sync_master_trace_level和rpl_semi_sync_slave_trace_level是可以组合(求或)的参数,可以是下面值的组合:

  1. 1  = general level (for example, time function failures)
  2. 16 = detail level (more verbose information)
  3. 32 = net wait level (more information about network waits)
  4. 64 = function level (information about function entry and exit)
rpl_semi_sync_master_wait_no_slave
表示是否允许master每个事务提交后都要等待slave的接收确认信号。默认为ON,即每一个事务都会等待。如果为OFF,则slave追赶上后,也不会开启半同步复制模式,需要手工开启。

五 查看运行状态

  1. root@rac4 mysql > show status like "%rpl_semi%";
  2. +--------------------------------------------+---------------+
  3. | Variable_name                              | Value         |
  4. +--------------------------------------------+---------------+
  5. | Rpl_semi_sync_master_clients               | 1             |# 有多少个Semi-sync的备库
  6. | Rpl_semi_sync_master_net_avg_wait_time     | 732           |# 事务提交后,等待备库响应的平均时间
  7. | Rpl_semi_sync_master_net_wait_time         | 27885         |# 等待网络响应的总次数
  8. | Rpl_semi_sync_master_net_waits             | 1323          |# 总的网络等待时间
  9. | Rpl_semi_sync_master_no_times              | 0             |# 一共有几次从Semi-sync跌回普通状态
  10. | Rpl_semi_sync_master_no_tx                 | 0             |# 备库未及时响应的事务数
  11. | Rpl_semi_sync_master_status                | ON            |# 主库上Semi-sync是否正常开启
  12. | Rpl_semi_sync_master_timefunc_failures     | 0             |# 时间函数未正常工作的次数
  13. | Rpl_semi_sync_master_tx_avg_wait_time      | 59            |# 开启Semi-sync,事务返回需要等待的平均时间
  14. | Rpl_semi_sync_master_tx_wait_time          | 8649          |# 事务等待备库响应的总时间
  15. | Rpl_semi_sync_master_tx_waits              | 809           |# 事务等待备库响应的总次数
  16. | Rpl_semi_sync_master_wait_pos_backtraverse | 9398          |# 改变当前等待最小二进制日志的次数
  17. | Rpl_semi_sync_master_wait_sessions         | 230           |# 当前有几个线程在等备库响应
  18. | Rpl_semi_sync_master_yes_tx                | 801           |# Semi-sync模式下,成功的事务数
上面比较重要的状态值有:
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是否有超时失败过,该计数器则记录了这样的失败次数。

六 参考文章
[1] Semisynchronous Replication Installation and Configuration 
[2] Semisynchronous Replication Monitoring 
[3] MySQL 5.5 Semi-sync Replication安装配置、参数说明

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
机器学习/深度学习 缓存 算法
MySQL 5.7 常用参数的设置
本章介绍MySQL 5.7 常用参数的设置
261 0
|
缓存 关系型数据库 MySQL
通过配置Mysql参数提高写入速度
1) innodb_buffer_pool_size 如果用Innodb,那么这是一个重要变量。相对于MyISAM来说,Innodb对于buffer size更敏感。MySIAM可能对于大数据量使用默认的key_buffer_size也还好,但Innodb在大数据量时用默认值就感觉在爬了。
1651 0
|
关系型数据库 MySQL
MySQL Group Replication
MySQL Group Replication
107 0
|
SQL 存储 监控
理解MySQL——复制(Replication)
1、复制概述1.1、复制解决的问题数据复制技术有以下一些特点:(1)    数据分布(2)    负载平衡(load balancing)(3)    备份(4)    高可用性(high availability)和容错1.2、复制如何工作从高层来看,复制分成三步:(1)    master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);(2)    slave将master的binary log events拷贝到它的中继日志(relay log);(3)    slave重做中继日志中的事件,将改变反映它自己的数据。
1129 0
|
SQL 关系型数据库 MySQL
|
SQL 存储 关系型数据库
|
SQL 关系型数据库 MySQL
|
关系型数据库 MySQL