MariaDB半同步复制整理

安装半同步复制插件

在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。
上一篇:asp.net 调用带证书的webservice解决办法


下一篇:高并发下log4j的性能瓶颈