MariaDB 半同步复制

本文来自于【阿里云官方镜像站:https://developer.aliyun.com/mirror/?utm_content=g_1000307095 】

原文链接:https://developer.aliyun.com/article/740758?spm=a2c6h.12873581.0.0.484f7e46JZ6t8J

安装半同步复制插件

在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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值