17.3.9.1 Semisynchronous Replication Administrative Interface
17.3.9.2 Semisynchronous Replication Installation and Configuration
17.3.9.3 Semisynchronous Replication Monitoring
除了内置的异步复制外,MySQL 5.6还支持通过插件实现的半同步复制接口。本节讨论什么是半同步复制及其工作方式。以下各节介绍了半同步复制的管理界面以及如何安装,配置和监视它。
默认情况下,MySQL复制是异步的。主机将事件写入其二进制日志,但不知道从机是否或何时检索并处理了它们。使用异步复制,如果主服务器崩溃,则它提交的事务可能不会传输到任何从服务器。因此,在这种情况下,从主服务器到从服务器的故障转移可能会导致故障转移到缺少相对于主服务器的事务的服务器。
半同步复制可以用作异步复制的替代方法:
从机在连接到主机时指示其是否具有半同步功能。
如果在主服务器端启用了半同步复制,并且至少有一个半同步从服务器,则在提交完成后,在主服务器上执行事务提交的线程将等待并等待至少一个半同步从服务器确认已接收到所有事件。交易,或直到发生超时。
从属仅在将事件写入其中继日志并刷新到磁盘后,才确认接收到事务事件。
如果发生超时而没有任何从属确认事务,则主控将还原为异步复制。当至少有一个半同步从属服务器赶上时,主服务器将返回到半同步复制。
必须在主服务器和从服务器上都启用半同步复制。如果在主服务器上禁用了半同步复制,或者在主服务器上但没有从属服务器上启用了半同步复制,则主服务器将使用异步复制。
当主服务器阻塞时(在执行提交后等待从服务器的确认),它不会返回执行事务的会话。当块结束时,主节点返回到会话,然后会话可以继续执行其他语句。在这一点上,事务已在主端进行,并且至少一个从属已确认其事件的接收。
在回写到二进制日志的回滚之后也会发生阻塞,回滚会在修改非事务表的事务回滚时发生。回滚的事务即使对事务表没有影响,也会记录下来,因为对非事务表的修改无法回滚,必须发送给从属服务器。
对于不在事务上下文中发生的语句(即,当没有使用START TRANSACTION或 启动任何事务时 SET autocommit = 0),启用了自动提交,并且每个语句都隐式提交。对于半同步复制,主服务器在提交每个这样的语句之后会阻塞,就像显式事务提交一样。
要了解“ 半同步复制 ”中的 “ 半 ”的含义,请将其与异步和完全同步复制进行比较:
通过异步复制,主服务器将事件写入其二进制日志,而从服务器则在事件准备就绪时对其进行请求。不能保证任何事件都会到达任何从属服务器。
使用完全同步复制,当主服务器提交事务时,所有从服务器也将在主服务器返回执行事务的会话之前提交事务。这样做的缺点是完成交易可能会有很多延迟。
半同步复制介于异步复制和完全同步复制之间。主机在提交后仅等待,直到至少一个从机接收并记录了事件。它不等待所有从站确认接收,它仅需要接收,而不是事件已在从站侧完全执行并提交。
与异步复制相比,半同步复制提供了改进的数据完整性。提交成功返回后,就可以知道数据至少存在于两个位置(在主机和至少一个从机上)。如果主服务器提交但在主服务器等待来自从服务器的确认时发生崩溃,则可能是事务尚未到达任何从服务器。
半同步复制还通过限制二进制日志事件可以从主服务器发送到从服务器的速度来限制繁忙会话的速率。当一个用户太忙时,这会减慢它的速度,这在某些部署情况下很有用。
半同步复制确实会对性能产生一些影响,因为由于需要等待从属服务器,因此提交速度较慢。这是提高数据完整性的折衷方案。减速量至少是TCP / IP往返时间,以将提交发送到从设备并等待从设备确认接收。这意味着半同步复制最适合通过快速网络通信的关闭服务器,而最不适合通过慢速网络通信的远程服务器。




