对于MySQL数据库的高可用架构而言,其中的是复制技术,它可是用来保障数据一致性的,同时也是促进这个系统容灾能力得以实现的基石呀。

上一章内容里,我们成功完成了,基于异步进行复制的,“一主两从”这种环 境的搭建工作了,到了本章,将会在此特定基础之上,深入去解析一番,怎样去配置,更加具备可靠性质的,半同步复制操作,以此用来解决,处于异步模式情况下,有可能会出现的,数据丢失方面的问题。

2.5 配置半同步复制

尽管异步复制具备卓越性能,不过其有着“主库提交便成功,从库异步去追赶”这样的机制,在主库出现宕机状况时会存在短暂的数据窗口期。

半同步复制借助插件机制,于原生异步复制之上增添了确认环节,此确认环节切实有效地弥合了那一个缺陷。

2.5.1 安装半同步复制插件

半同步复制功能借助插件形式达成,得在主库那儿安装对应的插件文件,并且还要在从库安装对应的插件文件。

1. 环境要求与权限

若要启用半同步复制,那么操作数据库用户得具备INSERT权限,此权限是用于向mysql.plugin表写入的,或者得具备全局的SUPER权限。

MySQL官方所发行的版本已经预先进行编译了半同步插件,主库的插件名称是semisync_master.so ,从库的插件名称是semisync_slave.so

那些动态库文件,默认是存放在MySQL安装目录的lib/plugin这个位置下面,像经由二进制安装的路径,一般情况下就是/usr/local/mysql/lib/plugin/

你同样能够借由查询`@@plugin_dir`系统变量,进而去证实现时环境的插件目录。

     -- 在主库
     install plugin rpl_semi_sync_master soname 'semisync_master.so';
     -- 在每个从库
     install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

2. 执行插件安装

成功登录MySQL之后,于主库之上执行如下SQL语句来加载插件,同时,在所有从库上面,也执行此SQL语句以加载插件。

在主库上执行,加载主端插件
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
在每个从库上执行,加载从端插件
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

     mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
     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)

3. 常见问题处理

于Linux环境当中,要是安装之际提示有着类似ERROR 1126 (HY000): Can't open shared library这般的错误,一般来讲均是源自系统缺失依赖库(例如像libimf.so这样子的)。

在这个时候,要进行安装相关对应的依赖包的操作,或者从MySQL安装包内里把缺失的库文件提取出来,补充到系统库目录当中。

4. 验证安装

安装semisync插件_配置MySQL半同步复制_数据库半同步复制

插件被成功安装之后,能够借助查询 information_schema.PLUGINS 这个表,也可以运用 SHOW PLUGINS; 此语句来进行验证。

例如,在主库执行以下命令,检查插件状态是否为ACTIVE

SHOW VARIABLES LIKE '%semi%';

数据库半同步复制_安装semisync插件_配置MySQL半同步复制

这时,主控库会增添以rpl_semi_sync_master_开首的系统变量,从属库会增添以rpl_semi_sync_slave_开首的系统变量,这些变量会用来后续的操控与监测。

2.5.2 启用半同步复制

插件加载后默认处于禁用状态,需手动启用。

只有主库跟从库一块儿开启,半同步复制才会起作用;若是只把一侧开启,复制机制就会自行降低为异步复制来确保服务的连续性。

1. 动态启用

可通过SET GLOBAL命令在线启用,无需重启服务:

主库开启半同步复制功能
SET GLOBAL rpl_semi_sync_master_enabled = 1;
设置主库超时时间(毫秒),若从库确认超时则降级为异步
SET GLOBAL rpl_semi_sync_master_timeout = 10000;
从库开启半同步复制功能
SET GLOBAL rpl_semi_sync_slave_enabled = 1;

2. 配置文件固化

要是想让配置在数据库重新启动之后仍然能够生效,那就需要把跟着参数写入主库以及从库的配置文件,像那种配置文件比如是my.cnf或者my.ini一样的。

# 主库配置
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=10000
# 从库配置
[mysqld]
rpl_semi_sync_slave_enabled=1

3. 重启I/O线程

安装semisync插件_数据库半同步复制_配置MySQL半同步复制

配置MySQL半同步复制_安装semisync插件_数据库半同步复制

在从库上开启插件后,必须重启I/O线程以使注册信息生效:

STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;

重启后,从库会以半同步从库的角色在主库上进行注册。

若省略此步,复制链路将仍运行在异步模式下。

安装semisync插件_数据库半同步复制_配置MySQL半同步复制

4. 运行状态验证

启用后,可通过状态变量确认半同步复制是否正常运行:

针对主库操作,执行这样一条指令,即SHOW STATUS LIKE 'Rpl_semi_sync_master_status'; ,假如返回的结果是ON ,这就意味着主库处于半同步复制模式的状态之下。

若是从库,那么就去执行SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';,要是返回结果为ON,这就意味着从库已经开启了半同步功能。

安装semisync插件_数据库半同步复制_配置MySQL半同步复制

至此,半同步复制架构已成功搭建。

2.5.3 监控半同步复制

半同步复制插件给出了充裕的状态变量,目的在于从深度层面去监测复制链路的健康状况以及性能表现。

这些变量仅在插件安装后可用,是日常运维排查的重要依据。

1. 从库监控指标

     stop slave io_thread;
     start slave io_thread;

从库端主要关注其运行状态:

关于“Rpl_semi_sync_slave_status”,其呈现为“ON”的时候,意味着从库当前所采用的是半同步复制方式,而当呈现为“OFF”之际,所体现的则是运行处于异步模式。

2. 主库监控指标

主库端给出了多达14个状态变量,被用来精细地刻画半同步复制的运行方面的细节。

核心监控指标包括:

当前,Rpl_semi_sync_master_clients所展示表达的,是那些被注册成为半同步从库相应数量的呈现。

主库半同步复制的工作状态,被命名为Rpl_semi_sync_master_status

配置MySQL半同步复制_数据库半同步复制_安装semisync插件

叫“Rpl_semi_sync_master_tx_avg_wait_time”的这个,是事务等待从库确认的平均时间耗费呀,能够反映出网络延迟以及从库的性能呢。

在主库上因半同步复制,事务等待从库进行确认操作的,其总的 occurrence 的次数 ,是以次数来进行计数的。

从库确认事务数成功收受的数量,关于此数量有着不同的统计指标,这里所指的是名为Rpl_semi_sync_master_yes_tx的相关统计信息所对应的数量。

Rpl_semi_sync_master_no_tx;属于那种数量,是因超时或者其他缘由没能收到确认而退化成异步提交的事务的数量。

Rpl_semi_sync_master_off_times:半同步复制,由于时间超出规定范围或者出现差错,从而转变为异步模式的数量。

在持续监控这些指标的过程中,数据库管理员能够精确判断复制链路有没有延迟,网络是不是稳定,并且能够为此为架构开展例如作出调整像对超时阈值这样一些相关修改等等方面举动提供相应数据给予支撑。

于MySQL高可用集群里头,恰当地运用半同步复制,可于确保数据一致性以及系统可用性之际,获取优良的平衡状态,此乃生产环境部署的关键参考方案。