MariaDB 半同步复制

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 本文主要为大家详解讲解 MariaDB 的半同步复制功能,包括插接安装、卸载,以及配置参数等。

作者:powdba

镜像下载、域名解析、时间同步请点击 阿里巴巴开源镜像站

安装半同步复制插件

在MariaDB 10.3.3和更高版本中,半同步复制功能内置于MariaDB服务器中,不再由插件提供。这意味着这些版本不支持安装插件。
半同步复制插件实际上是两个不同的插件,一个是主插件,一个是从插件。这两个插件的共享库都包含在MariaDB中。尽管默认情况下插件的共享库随MariaDB一起分发,但是默认情况下,MariaDB并未实际安装该插件,而MariaDB 10.3.3之前。有两种方法可用于通过MariaDB安装插件。
第一种方法可用于安装插件,而无需重新启动服务器。您可以通过执行INSTALL SONAME或INSTALL PLUGIN动态安装插件。
例如,如果是master:

INSTALL SONAME 'semisync_master’;

如果是slave:

INSTALL SONAME 'semisync_slave';

第二种方法可以用来告诉服务器在启动时加载插件。可以通过提供--plugin-load或--plugin-load-add选项以这种方式安装插件。可以将其指定为mysqld的命令行参数,也可以在选项文件中的相关服务器选项组中指定。
例如,如果是master:

[mariadb]
...
plugin_load_add = semisync_master

如果是slave:

[mariadb]
...
plugin_load_add = semisync_slave

卸载半同步复制插件

在MariaDB 10.3.3和更高版本中,半同步复制功能内置于MariaDB服务器中,不再由插件提供。这意味着这些版本不支持卸载插件。
可以通过执行UNINSTALL SONAME或UNINSTALL PLUGIN动态卸载插件。
例如,如果是master:

UNINSTALL SONAME 'semisync_master’;

如果是slave:

UNINSTALL SONAME 'semisync_slave';

如果通过在选项文件中相关服务器选项组中提供--plugin-load或--plugin-load-add选项来安装插件,则应删除这些选项以防止下次加载插件服务器重新启动。

半同步复制配置参数

半同步复制参数设置。为避免主库高可用切换之后,需要在半同步复制的主从角色之间来回切换配置,在主库与备主之间设置相同的半同步复制参数即可(即,同时启用主库端和从库端的半同步复制插件),在my.cnf的[mysqld]标签下添加如下参数设置

  • rpl_semi_sync_master=semisync_master.so

    • 指定半同步复制在master上使用的库文件名称,不需要使用路径,该参数为mysqld启动参数,并非system variables,在my.cnf中不需要指定,只需要在安装插件库时使用INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';语句安装过这个库即可。
    • 默认ON,MariaDB 10.3.3移除
  • rpl_semi_sync_slave=semisync_slave.so

    • 指定半同步复制在slave上使用的库文件名称,不需要使用路径,该参数为mysqld启动参数,并非system variables,在my.cnf中不需要指定,只需要在安装插件库时使用INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';语句安装过这个库即可。使用plugin_load参数在mysqld启动时自动加载半同步复制插件,无需人工安装(注意,该参数必须放在所有半同步复制配置参数之前,否则半同步复制相关的参数无法识别)。
    • 默认ON,MariaDB 10.3.3移除
  • rpl_semi_sync_master_enabled=1

    • 半同步复制插件主库端开关参数。
    • 动态变量,默认值为OFF,布尔型值。
  • rpl_semi_sync_master_timeout=10000

    • 当参数rpl_semi_sync_master_enabled 开启时,该参数控制主库使用半同步复制机制把binlog发送到slave之后,等待从库ACK接收确认包的时间,如果在这个超时时间之内收到slave的接收确认包,则继续使用半同步复制机制同步下一个事务的binlog到从库,如果在这个超时时间之内未收到任何slave的接收确认包,则主库自动切换为异步复制。
    • 发生超时时,Rpl_semi_sync_master_status状态变量也将切换为OFF。
    • 全局变量,动态变量,默认为10000,表示10S(10000毫秒),整型值。
  • rpl_semi_sync_master_wait_no_slave=OFF

    • 控制在rpl_semi_sync_master_timeout 超时周期内,如果连接主库的从库数量降到0值,主库是否要继续等待从库的接收确认包。
    • 为ON值时,表示在rpl_semi_sync_master_timeout 超时周期内,如果连接主库的从库数量降到0值,主库仍然继续等待从库的接收确认包。
    • 为OFF值时,表示在rpl_semi_sync_master_timeout 超时周期内,如果连接主库的从库数量降到0值,主库不继续等待从库的接收确认包,直接切换为异步复制。
    • 全局变量,动态变量,默认值为ON,布尔型值。
  • rpl_semi_sync_master_wait_point=AFTER_SYNC

    • 此变量控制半同步复制中主库在发起事务commit操作之后在什么节点等待从库接收binlog的ACK确认。
    • AFTER_SYNC(默认值):主库将每个事务写入二进制日志,并将二进制日志sync到磁盘。在sync binlog之后,主库等待从库该事务的ack确认。在收到任意一个(5.7中可以使用参数rpl_semi_sync_master_wait_for_slave_count来设置必须要接收到多少个从库的ack确认之后才执行后续的动作,默认值为1,与5.7之前的版本相同)从库的确认后,主人将在存储引擎层提交事务,并将事务提交结果返回给客户端。
    • AFTER_COMMIT:主库将每个事务写入二进制日志,并sync二进制日志到磁盘,同时在存储引擎层提交事务。主库在存储引擎层提交事务之后再等待从库该事务的ACK确认。在收到从库ACK确认后,主库返回结果给客户端。
    • 全局变量,动态变量,枚举类型,有效值为:AFTER_SYNC和AFTER_COMMIT,默认值为AFTER_SYNC,10.1.3版本引入。
  • rpl_semi_sync_slave_delay_master

    • 仅在需要确认时写入主库的信息文件。
    • 全局变量,动态变量,默认值为OFF,布尔型值。
  • rpl_semi_sync_slave_enabled=1

    • 半同步复制插件从库端开关参数。
    • 全局变量,动态变量,默认值为OFF,布尔型值。
  • rpl_semi_sync_slave_kill_conn_timeout

    • mysql连接超时,该连接用于终止从io_thread在master上的连接。执行停止slave时,此超时起作用。
    • 全局变量,动态变量,默认值为OFF,整型值。MariaDB 10.3.3引入。
  • rpl_semi_sync_master_trace_level=32

    • 在master控制半同步复制中的debug信息跟踪等级,要能使用该参数的功能,则需要主库安装并启用了半同步复制插件。
    • 有如下4个等级

      • 1:general 等级,如:记录时间函数失效。
      • 16:detail 等级,记录更加详细的信息。
      • 32:net wait等级,记录包含有关网络等待的更多信息。
      • 64:function等级,记录包含有关function进入和退出的更多信息。
    • 全局变量,动态变量,默认值为32,整型。
  • rpl_semi_sync_slave_trace_level=32

    • 参考主库的rpl_semi_sync_master_trace_level参数解释部分。
      半同步复制关键状态变量
  • Rpl_semi_sync_master_clients

    • 当前处于半同步复制状态的从库数量。
  • Rpl_semi_sync_master_net_avg_wait_time

    • 主库等待从库回复ACK确认消息的平均时间(以微秒为单位)。
  • Rpl_semi_sync_master_net_wait_time

    • 主库等待从库回复ACK确认消息的总时间(以微秒为单位)。
  • Rpl_semi_sync_master_net_waits

    • 主库等待从库回复ACK确认消息的总次数。
  • Rpl_semi_sync_master_no_times

    • 主库端检测半同步复制插件被关闭的次数,如果不断增长,则说明主从之间的复制网络可能不稳定。
  • Rpl_semi_sync_master_no_tx

    • 主库端检测半同步复制中从库未成功接收 slave ACK提交的事务数量,如果持续增长或者频繁检测到非零值,说明半同步复制被降级为了异步复制或主从之间的复制网络不稳定。
  • Rpl_semi_sync_master_status

    • 半同步复制当前是否在主库上正常运行。如果正常运行,则该值为ON,否则为OFF。
  • Rpl_semi_sync_master_timefunc_failures

    • 主库调用gettimeofday()等时间函数时发生失败的次数。
  • Rpl_semi_sync_master_tx_avg_wait_time

    • 主库端检测半同步复制事务的平均ACK时间(单位为毫秒),如果该延迟逐渐增加,则说明主从之间的复制网络可能不稳定、从库的负载可能在持续增加导致响应ACK变慢。
  • Rpl_semi_sync_master_tx_wait_time

    • 主库等待事务(所有事务的ACK确认消息)的总时间(单位为微秒)。
  • Rpl_semi_sync_master_tx_waits

    • 主库等待事务(所有事务的ACK确认消息)的总次数。
  • Rpl_semi_sync_master_wait_pos_backtraverse

    • 主库等待的二进制坐标低于之前等待事件的事件总次数。当事务开始等待回复(ACK确认消息)的顺序与其二进制日志事件的写入顺序不同时,就会发生这种情况。
  • Rpl_semi_sync_master_wait_sessions

    • 主库等待从库回复(ACK确认消息)的会话数量。
  • Rpl_semi_sync_master_yes_tx

    • 主库成功接收到 slave 的 ACK的事务提交数量(主库使用半同步复制提交的次数)。
  • Rpl_semi_sync_slave_status

    • 半同步复制当前是否在从库上正常运行。如果插件已启用且从I/O线程正在运行,则此状态变量值为ON,否则为OFF。

阿里巴巴开源镜像站 提供全面,高效和稳定的系统镜像、应用软件下载、域名解析和时间同步服务。”

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
8月前
|
关系型数据库
Mariadb的半同步复制
Mariadb的半同步复制
63 1
|
存储 关系型数据库 MySQL
MariaDB半同步复制整理
安装半同步复制插件 在MariaDB 10.3.3和更高版本中,半同步复制功能内置于MariaDB服务器中,不再由插件提供。这意味着这些版本不支持安装插件。半同步复制插件实际上是两个不同的插件,一个是主插件,一个是从插件。
1273 0
|
关系型数据库 数据库 安全
|
关系型数据库 数据库 开发工具
MariaDB主从半同步复制详解
半同步复制(Semisynchronous replication) 介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。
1128 0
|
6月前
|
NoSQL 关系型数据库 MySQL
阿里云RDS关系型数据库大全_MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等
阿里云RDS关系型数据库如MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等,NoSQL数据库如Redis、Tair、Lindorm和MongoDB
254 0
|
6月前
|
NoSQL 关系型数据库 MySQL
阿里云关系型数据库详细介绍MySQL/MariaDB/SQL Server/PolarDB/PostgreSQL等
阿里云关系型数据库详细介绍MySQL/MariaDB/SQL Server/PolarDB/PostgreSQL等,阿里云RDS关系型数据库如MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等
114 0
|
6月前
|
NoSQL Cloud Native 关系型数据库
阿里云RDS数据库_MySQL_SQL Server_MariaDB_PolarDB_PostgreSQL
阿里云RDS关系型数据库大全:MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等
110 0
|
8月前
|
关系型数据库 MySQL API
MariaDB数据库中如何允许远程链接mysql并开放3306端口
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。
547 0
|
8月前
|
存储 关系型数据库 MySQL
mysql--Centos安装MariaDB(mysql)
mysql--Centos安装MariaDB(mysql)
1327 0

推荐镜像

更多