我们有一个位于不同数据中心的vanilla主站和从站MySQL设置,以及与主站位于同一数据中心的另一个从站.
数据中心之间的带宽相当高(在我们已经完成的网络基准测试中,我们可以达到15MB /秒),但是存在延迟,大约是28ms.它无论如何都不高,但它远远高于同一数据中心的亚秒级延迟.
偶尔,我们会在删除奴隶时经历严重的滞后(2000秒或更长时间),而本地奴隶则保持最新状态.在查看滞后的远程从站时,SQL线程通常会花费时间等待IO线程更新中继日志.大师同时显示“等待网”或类似的东西.
所以它意味着它的网络,但在发生这种情况时我们仍然拥有免费带宽.
我的问题是:数据中心之间的延迟是否会影响复制的性能?
从属io线程是否只是流式传输事件,直到主服务器停止发送它们,或者它是否在事件之间以某种方式汇集主服务器?
解决方法:
您问题的直接答案是肯定的,但这取决于您运行的MySQL版本.在MySQL 5.5之前,复制将按如下方式运行:
> Master执行SQL
> Master在其二进制日志中记录SQL事件
> Slave从主二进制日志中读取SQL事件
> Slave通过I / O线程在其中继日志中存储SQL事件
> Slave通过SQL线程从中继日志读取下一个SQL事件
> Slave执行SQL
> Slave确认SQL事件完全执行的主人
从MySQL 5.5开始,使用Semisynchronous Replication,现在复制将按如下方式运行:
> Master执行SQL
> Master在其二进制日志中记录SQL事件
> Slave从主二进制日志中读取SQL事件
> Slave确认SQL事件收据的主人
> Slave通过I / O线程在其中继日志中存储SQL事件
> Slave通过SQL线程从中继日志读取下一个SQL事件
> Slave执行SQL
> Slave确认SQL事件完全执行的主人
这种新的范例将允许奴隶与其主人更紧密地同步.
尽管如此,网络中的延迟可能会阻碍MySQL Semisync Replication恢复到旧式异步复制的程度.为什么?如果在没有任何从服务器确认事务的情况下发生超时,则主服务器将恢复为异步复制.当至少一个半同步从机赶上时,主机返回半同步复制.
更新2011-08-08 14:22美国东部时间
MySQL 5.5半同步复制的配置很简单
步骤1)将这四(4)行添加到/etc/my.cnf
[mysqld]
plugin-dir=/usr/lib64/mysql/plugin
#rpl_semi_sync_master_enabled
#rpl_semi_sync_master_timeout=5000
#rpl_semi_sync_slave_enabled
步骤2)重启MySQL
service mysql restart
步骤3)在MySQL客户端中运行这些命令
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
步骤4)在plugin-dir选项之后取消注释三个rpm_semi_sync选项
[mysqld]
plugin-dir=/usr/lib64/mysql/plugin
rpl_semi_sync_master_enabled
rpl_semi_sync_master_timeout=5000
rpl_semi_sync_slave_enabled
步骤5)重启MySQL
service mysql restart
全部完成 !!!现在只需像往常一样设置MySQL Replication.