MariaDB 半同步复制

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 本文主要为大家详解讲解 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。

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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
关系型数据库
Mariadb的半同步复制
Mariadb的半同步复制
99 1
|
存储 关系型数据库 MySQL
MariaDB半同步复制整理
安装半同步复制插件 在MariaDB 10.3.3和更高版本中,半同步复制功能内置于MariaDB服务器中,不再由插件提供。这意味着这些版本不支持安装插件。半同步复制插件实际上是两个不同的插件,一个是主插件,一个是从插件。
1346 0
|
关系型数据库 数据库 安全
|
关系型数据库 数据库 开发工具
MariaDB主从半同步复制详解
半同步复制(Semisynchronous replication) 介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。
1188 0
|
NoSQL 关系型数据库 MySQL
阿里云RDS关系型数据库大全_MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等
阿里云RDS关系型数据库如MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等,NoSQL数据库如Redis、Tair、Lindorm和MongoDB
331 0
|
3月前
|
关系型数据库 Java MySQL
Linux安装JDK1.8 & tomcat & MariaDB(MySQL删减版)
本教程提供了在Linux环境下安装JDK1.8、Tomcat和MariaDB的详细步骤。这三个组件的组合为Java Web开发和部署提供了一个强大的基础。通过遵循这些简单的指导步骤,您可以轻松建立起一个稳定、高效的开发和部署环境。希望这个指导对您的开发工作有所帮助。
213 8
|
4月前
|
缓存 关系型数据库 MySQL
error: Failed dependencies: mariadb-connector-c-config is obsoleted by mysql-community-server-8.0.36-1.el7.x86_64 问题解决
error: Failed dependencies: mariadb-connector-c-config is obsoleted by mysql-community-server-8.0.36-1.el7.x86_64 问题解决
243 19
|
3月前
|
SQL 关系型数据库 MySQL
如何在 MySQL 或 MariaDB 中导入和导出数据库
如何在 MySQL 或 MariaDB 中导入和导出数据库
526 0
|
3月前
|
SQL Ubuntu 关系型数据库
如何在云服务器上创建和管理 MySQL 和 MariaDB 数据库
如何在云服务器上创建和管理 MySQL 和 MariaDB 数据库
46 0