我们有一个位于不同数据中心的vanilla master 和slave MySQL 设置,以及与master 位于同一数据中心的另一个slave。
数据中心之间的带宽相当高(在我们所做的网络基准测试中,我们可以达到 15MB/秒),但存在延迟,约为 28 毫秒。无论如何它都不高,但它比同一数据中心的亚秒延迟要高得多。
有时,我们会在删除从站时遇到严重的滞后(2000 秒甚至更多),而本地从站保持最新。在查看滞后的远程slave时,SQL线程通常会花时间等待IO线程更新中继日志。主人同时显示“等待网络”或类似的东西。
所以这意味着它是网络,但在发生这种情况时我们仍然有免费带宽。
我的问题是:数据中心之间的延迟会影响复制的性能吗?从属 io 线程是否只是流式传输事件直到主节点停止发送它们,还是在事件之间以某种方式池主节点?
我正在研究MySQL Semisynchronous Replication,我对工作流程的理解如下:
rpl_semi_sync_master_timeout
几毫秒以接收来自至少一个从站的确认我的问题是,在任何时候,这种类型的复制都确保事务在从属上执行(SQL_TREAD
应用它)。考虑到它会在每个事务上增加延迟,并且在 master 失败的情况下,不能 100% 保证 slave 与 master 一致,使用这种类型的复制有什么好处?