【问题标题】:why innodb primary selection does not consider "consistency" with the old primary?为什么innodb主选不考虑与旧主的“一致性”?
【发布时间】:2020-06-20 18:43:40
【问题描述】:

当我从 InnoDB 的主服务器读取数据复制到辅助服务器时。令我惊讶的是,复制是异步的或至少是半异步的。所以我有以下问题,在异步复制的情况下,主节点可能会出现故障,其中一些辅助节点没有接收到复制信息。并且下一个主节点的后续选择不考虑哪个辅助节点最接近旧主节点,因此可能会选择一个没有最新异步复制的节点。这样是否可以得出主从集群不一致的结论?

【问题讨论】:

    标签: mysql innodb database-replication


    【解决方案1】:

    这个问题和我回答的一个老问题差不多:Does mySQL replication have immediate data consistency?

    您说得对,异步副本集中存在数据丢失的风险。如果主节点丢失,则它的副本可能没有应用最新的更改。即使在 MySQL 所谓的“半同步”中,副本也可能接收所有事件的日志,但尚未应用它们。

    在故障转移场景中,最安全的情况是副本保持只读状态,并且在应用所有待处理日志完全“赶上”之前不允许客户端对其进行写入。

    在这种情况下,您可以自行设计应用程序以容忍延迟。

    我们希望一切都完全一致并且没有延迟,但唯一可能的方法是,如果在主服务器上提交的每个事务都必须等待在副本上应用相同的更改。

    在大多数公司中,这不是他们愿意接受的折衷方案。他们宁愿让事务在正常情况下在主服务器上尽可能快地运行,并接受故障转移期间数据丢失的小风险。

    【讨论】:

    • 谢谢你的账单,但是仍然有一个令人困惑的地方,至少在主崩溃期间,下一个选择可以比较同步的 bin 日志并选择最佳从属。但就innodb doc所说,只考虑版本和uuid,所以这很奇怪吗? @BillKarwin
    • 你说的是 InnoDB Cluster 吗?我没有使用过它或阅读过任何关于它的内容。
    • 我发现了这个:dev.mysql.com/doc/refman/5.7/en/…,它似乎描述了确保集群的所有成员都接近赶上的机制,或者延迟事务以便所有成员都能赶上。这更接近于完全同步的复制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多