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

 前文 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安装配置、参数说明

时间: 2024-08-17 17:05:20

【MySQL】Semisynchronous Replication 配置和参数说明的相关文章

MySQL Semisynchronous Replication介绍

  这篇文章主要介绍了MySQL Semisynchronous Replication介绍,本文讲解了Semisynchronous Replication 定义.,需要的朋友可以参考下 前言 MySQL 5.5版本之前默认的复制是异步(Asynchronous )模式的, MySQL 5.5 以plugins的方式提供了Semisynchronous Replication 模式.在介绍 semi sync 之前,我们先了解:半同步 Asynchronous 和 同步 Synchronous

MySQL Semisynchronous Replication介绍_Mysql

前言     MySQL 5.5版本之前默认的复制是异步(Asynchronous )模式的, MySQL 5.5 以plugins的方式提供了Semisynchronous Replication 模式.在介绍 semi sync 之前,我们先了解:半同步 Asynchronous 和 同步 Synchronous . 异步复制模式     主库将已经提交的事务event 写入binlog后,即返回成功给app,该模式下并不保证任何已经提交的事务会传递到任何slave并被成功应用. 全同步复制

MySQL semisync replication配置及源代码实现

之前一直没有对semi sync做太多的关注,原因是线上的生产环境使用的非常少,最近需要提升semisync的生产环境优先级,以适应数据保护非常严格的场景,借此机会了解一下semisync,顺便过了一下大部分代码,以帮助后续的性能优化工作,以下分析基于代码MySQL5.6.13   如何配置   semisync的配置非常简单,采用MySQL Plugin的方式,在主库和备库上分别安装不同的插件,当然你也可以主库备库全部标准安装上,使用参数来控制sesmisync:     INSTALL PL

Mysql group replication复制原理

前言:          Mysql版本5.7.17推出Mysql group replication(组复制),相对以前传统的复制模式(异步复制模式async replication 及半同步复制模式semi-sync replication),一个主,对应一个或多个从,在主数据库上执行的事务通过binlog复制的方式传送给slave,slave通过 IO thread线程接收将事务先写入relay log,然后重放事务,即在slave上重新执行一次事务,从而达到主从事务一致的效果,如下图为两

【MySQL】Semisynchronous Replication 概述

前言      MySQL 5.5版本之前默认的复制是异步(Asynchronous )模式的, MySQL 5.5 以plugins的方式提供了Semisynchronous Replication模式.在介绍 semi sync 之前,我们先了解:半同步 Asynchronous 和 同步 Synchronous . 异步复制模式    主库将已经提交的事务event 写入binlog后,即返回成功给app,该模式下并不保证任何已经提交的事务会传递到任何slave并被成功应用. 全同步复制模

Linux MySQL主从复制(Replication)(MySQL数据同步)配置

MySQL是开源的关系型数据库系统.复制(Replication)是从一台MySQL数据库服务器(主服务器master)复制数据到另一个服务器(从服务器slave)的一个进程. 配置主服务器(master) 1.编辑数据库配置文件my.cnf,一般在/etc/目录下. 1.#vi /etc/my.cnf 在[mysqld]的下面加入下面代码: 1.log-bin=mysql-bin 2.server-id=1 3.innodb_flush_log_at_trx_commit=1 4.sync_b

高可用架构-- MySQL主从复制的配置

环境 操作系统:CentOS-6.6-x86_64-bin-DVD1.iso MySQL版本:mysql-5.6.26.tar.gz 主节点IP:192.168.1.205     主机名:edu-mysql-01 从节点IP:192.168.1.206     主机名:edu-mysql-02 主机配置:4核CPU.4G内存   依赖课程 <高可用架构篇--第13节--MySQL源码编译安装(CentOS-6.6+MySQL-5.6)>   MySQL主从复制官方文档 http://dev.

用Semisynchronous Replication半同步,mk-table-checksum数据同步一致性检查,监控主从同步运行状态的脚本等方式加强SQL性能和数据审核

一,为A组在X单独另建一个MYSQL服务器(MYSQL B),A组平时更新的数据库为MYSQL B.待MYSQL B的数据审核准确无误后.发布给现在布置在X上的MYSQL服务器(MYSQL A).并进行一致性CHECK. 有这样一道正式网站数据库同步前的隔离审查,就可以保证接下来的数据库同步的数据准确无误. 二,MYSQL A数据库收到MYSQL B的同步数据之后,才将其更新发布到网站MYSQL数据库上(MYSQL C).在同步过程中,建立启用半同步复制(有别于目前的异步复制,是google组开

单机版的Mysql主从数据库配置

原 单机版的Mysql主从数据库配置 发表于6年前(2009-04-30 08:49)   阅读(3067) | 评论(2) 9人收藏此文章, 我要收藏 赞0 环 境mysql-5.0.22 解压版.(Copy 成两份 ,master,slave)windowsXP一.Master的设置1.配制my.ini   [client]   port = 3308   [mysqld]    port           =3308    server-id    = 1    binlog-do-db