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。