19.4.10.2 配置半同步复制
在安装semisynchronous复制的源和副本插件时(见第19.4.10.1节,“安装半同步复制”),系统变量变得可用,以控制插件行为。
要查看semisynchronous复制的当前状态变量值,请使用SHOW VARIABLES
:
mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';
所有rpl_semi_sync_
系统变量在第19.1.6.2节,“Replication Source Options and Variables”和第19.1.6.3节,“Replica Server Options and Variables”中有描述。一些关键系统变量是:xxx
-
rpl_semi_sync_source_enabled
-
控制源服务器上是否启用semisynchronous复制。要启用或禁用插件,请将该变量设置为1或0,分别。默认值为0(关闭)。
-
rpl_semi_sync_replica_enabled
-
控制副本服务器上是否启用semisynchronous复制。
-
rpl_semi_sync_source_timeout
-
在毫秒中控制源服务器等待确认的时间,以便在超时后返回到异步复制。默认值为10000(10秒)。
-
rpl_semi_sync_source_wait_for_replica_count
-
控制源服务器必须从副本服务器接收的交易确认数量。默认值为1,表示源服务器只等待一个副本服务器确认交易事件的接收。
rpl_semi_sync_source_wait_point
系统变量控制semisynchronous源服务器等待副本确认交易接收的点。这些值是允许的:
-
AFTER_SYNC
(默认):源服务器将每个事务写入其二进制日志和副本,同步二进制日志。源服务器等待副本确认交易接收后。收到确认后,源服务器将事务提交到存储引擎,并返回结果给客户端,客户端然后可以继续。 -
AFTER_COMMIT
:源服务器将每个事务写入其二进制日志和副本,同步二进制日志,并将事务提交到存储引擎。源服务器等待副本确认交易接收后。收到确认后,源服务器返回结果给客户端,客户端然后可以继续。
这些设置的复制特性如下:
-
使用
AFTER_SYNC
,所有客户端都将看到已经确认的交易,这是在事务已经被副本确认和提交到存储引擎的源服务器上。因此,所有客户端都看到相同的数据在源服务器上。在源服务器故障时,所有已提交的事务都已经被复制到副本(保存到副本的中继日志)。副本的突然退出和故障转移到副本是无损的,因为副本是最新的。如上所述,源服务器不应该在故障转移后重新使用。
-
使用
AFTER_COMMIT
,客户端发出事务请求后,只在服务器将事务提交给存储引擎并收到复制副本确认后才会收到返回状态。在提交事务后,服务器收到复制副本确认前,其他客户端可以在提交客户端之前看到已经提交的事务。如果在复制副本处理事务时出现问题,那么在源服务器意外退出并 failover 到复制副本时,可能会出现与客户端在源服务器上看到的数据相比而言的数据丢失。
您可以通过启用系统变量 replication_sender_observe_commit_only
和 replication_optimize_for_static_plugin_config
来提高半同步复制的性能,这些设置限制回调和避免不必要的锁定获取。这些设置在 replica 数量增加时非常有帮助,因为锁定竞争可能会降低性能。半同步复制源服务器也可以从启用这些系统变量中获得性能益处,因为它们使用相同的锁定机制。