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

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

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

在主库安装semisync_master和semisync_slave插件:


root@rac3 mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
 
root@rac3 mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

root@rac3 mysql> show plugins;

+-----------------------+--------+--------------------+--------------------+---------+

| Name                  | Status | Type               | Library            | License |

+-----------------------+--------+--------------------+--------------------+---------+

| rpl_semi_sync_master  | ACTIVE | REPLICATION        | semisync_master.so | GPL     |

| rpl_semi_sync_slave   | ACTIVE | REPLICATION        | semisync_slave.so  | GPL     |

+-----------------------+--------+--------------------+--------------------+---------+

22 rows in set (0.00 sec)

root@rac3 mysql> show variables like \"%rpl_semi%\";

+------------------------------------+-------+

| Variable_name                      | Value |

+------------------------------------+-------+

| rpl_semi_sync_master_enabled       | ON    |

| rpl_semi_sync_master_timeout       | 1000  |

| rpl_semi_sync_master_trace_level   | 32    |

| rpl_semi_sync_master_wait_no_slave | ON    |

| rpl_semi_sync_slave_enabled        | ON    |

| rpl_semi_sync_slave_trace_level    | 32    |

+------------------------------------+-------+

6 rows in set (0.00 sec) 

在备库上 加载semisync_master和semisync_slave插件:


root@rac3 mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
 
root@rac3 mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME  'semisync_slave.so';

root@rac3 mysql> show plugins;

+-----------------------+--------+--------------------+--------------------+---------+

| Name                  | Status | Type               | Library            | License |

+-----------------------+--------+--------------------+--------------------+---------+

| rpl_semi_sync_master  | ACTIVE | REPLICATION        | semisync_master.so | GPL     |

| rpl_semi_sync_slave   | ACTIVE | REPLICATION        | semisync_slave.so  | GPL     |

+-----------------------+--------+--------------------+--------------------+---------+ 

当然如果需要卸载 该plugin 需要执行


mysql> uninstall plugin rpl_semi_sync_slave 

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


## semi sync 
 
rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

rpl_semi_sync_slave_enabled=1 

以下是我测试在安装问plugin 之后 my.cnf 中不配置和配置的系统启动日志:
my.cnf 中带有rpl_semi 等参数


140523 22:42:12 InnoDB: Waiting for the background threads to start
 
140523 22:42:13 InnoDB: 1.1.8 started; log sequence number 1909957825

140523 22:42:13 [Note] Semi-sync replication initialized for transactions.

140523 22:42:13 [Note] Semi-sync replication enabled on the master. 

安装完成 my.cnf 不加rpl_semi 参数,是不开启semi sync 复制的。


140523 22:49:09 mysqld_safe Starting mysqld daemon with databases from /home/mysql/data3306/data
 
.......

140523 22:49:13 InnoDB: Waiting for the background threads to start

140523 22:49:14 InnoDB: 1.1.8 started; log sequence number 1909961006

140523 22:49:14 [Note] Event Scheduler: Loaded 0 events

140523 22:49:14 [Note] /usr/sbin/mysqld: ready for connections. 

四 常用参数

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


root@rac4 mysql > show variables like "%rpl_semi%";
 
+------------------------------------+-------+

| 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    |

| rpl_semi_sync_slave_enabled        | OFF   |

| rpl_semi_sync_slave_trace_level    | 32    |

+------------------------------------+-------+ 

说明:
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  = 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的接收确认信号。默认为ON,即每一个事务都会等待。如果为OFF,则slave追赶上后,也不会开启半同步复制模式,需要手工开启。

五 查看运行状态


root@rac4 mysql > show status like "%rpl_semi%";
 
+--------------------------------------------+---------------+

| Variable_name                              | Value         |

+--------------------------------------------+---------------+

| Rpl_semi_sync_master_clients               | 1             |# 有多少个Semi-sync的备库

| Rpl_semi_sync_master_net_avg_wait_time     | 732           |# 事务提交后,等待备库响应的平均时间

| Rpl_semi_sync_master_net_wait_time         | 27885         |# 等待网络响应的总次数

| Rpl_semi_sync_master_net_waits             | 1323          |# 总的网络等待时间

| Rpl_semi_sync_master_no_times              | 0             |# 一共有几次从Semi-sync跌回普通状态

| Rpl_semi_sync_master_no_tx                 | 0             |# 备库未及时响应的事务数

| Rpl_semi_sync_master_status                | ON            |# 主库上Semi-sync是否正常开启

| Rpl_semi_sync_master_timefunc_failures     | 0             |# 时间函数未正常工作的次数

| Rpl_semi_sync_master_tx_avg_wait_time      | 59            |# 开启Semi-sync,事务返回需要等待的平均时间

| Rpl_semi_sync_master_tx_wait_time          | 8649          |# 事务等待备库响应的总时间

| Rpl_semi_sync_master_tx_waits              | 809           |# 事务等待备库响应的总次数

| Rpl_semi_sync_master_wait_pos_backtraverse | 9398          |# 改变当前等待最小二进制日志的次数

| Rpl_semi_sync_master_wait_sessions         | 230           |# 当前有几个线程在等备库响应

| 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
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
|
25天前
|
缓存 监控 关系型数据库
如何根据监控结果调整 MySQL 数据库的参数以提高性能?
【10月更文挑战第28天】根据MySQL数据库的监控结果来调整参数以提高性能,需要综合考虑多个方面的因素
64 1
|
28天前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
28天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
83 2
|
2月前
|
SQL 关系型数据库 MySQL
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
Mysql中搭建主从复制原理和配置
|
3月前
|
关系型数据库 MySQL 数据安全/隐私保护
docker应用部署---MySQL的部署配置
这篇文章介绍了如何使用Docker部署MySQL数据库,包括搜索和拉取MySQL镜像、创建容器并设置端口映射和目录映射、进入容器操作MySQL,以及如何使用外部机器连接容器中的MySQL。
docker应用部署---MySQL的部署配置
|
2月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
69 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
2月前
|
SQL 关系型数据库 MySQL
数据库:MYSQL参数max_allowed_packet 介绍
数据库:MYSQL参数max_allowed_packet 介绍
103 2
|
3月前
|
关系型数据库 MySQL Go
go抽取mysql配置到yaml配置文件
go抽取mysql配置到yaml配置文件
|
3月前
|
SQL 关系型数据库 MySQL
MySQL主从配置
MySQL主从配置