【问题标题】:MySQL/MariaDB read preference from slave with max stalenessMySQL/MariaDB 从具有最大陈旧性的从站读取首选项
【发布时间】:2018-12-15 05:20:13
【问题描述】:

我正在使用带有 Innodb 存储引擎版本 10.x 的 Mysql/MariaDB。

我想建立一个主从配置的集群。可以选择使用 --innodb-read-only 或 --read-only 从从站读取数据。

但是除了上述之外,当且仅当最大从属延迟小于 x 秒时,客户端才需要从从属读取数据

由于网络拥塞、低磁盘吞吐量、长时间运行的操作等,从属服务器可能会落后于主服务器。具有最大允许陈旧性选项的读取首选项应该让应用程序指定最大复制延迟或“陈旧性”,用于从奴隶。当辅助节点的估计过期时间超过时,客户端停止将其用于从节点的读取操作并开始从主节点读取。

我想知道MySql/InnoDB中是否有选项?

【问题讨论】:

    标签: mysql mariadb innodb database-replication eventual-consistency


    【解决方案1】:

    没有将查询切换到主查询的自动选项。这由应用程序逻辑处理。

    您可以运行查询SHOW SLAVE STATUS,返回的字段之一是Seconds_Behind_Master。您必须编写应用程序代码来检查这一点,如果滞后大于您的阈值,请改为查询主节点。

    您可能会发现某种类型的代理可以为您执行此逻辑。见https://mydbops.wordpress.com/2018/02/19/proxysql-series-mysql-replication-read-write-split-up/

    将延迟 X 秒的副本视为不可用并不总是最佳选择。无论滞后如何,一些查询都完全没问题。几年前我写了一篇关于这个的演示文稿,其中包括一些示例查询。 Read / Write Splitting with MySQL and PHP(Percona 网络研讨会 2013)

    【讨论】:

    • 这正是我想要的。实际上我的数据库集群不需要强一致性,可以承受几分钟的延迟。无论如何,我都会尝试 ProxySQL。如果您可以分享一些有关实时用例的信息,那就太好了。非常感谢。
    • 您看过我链接到的演示文稿了吗?它在里面。
    • 是的,比尔。还看到 ProxySQL 在 v1.4.9 发布后具有容错性或高可用性。看起来很有希望............我必须跨区域设置我的数据库集群,看看我将如何部署 ProxySQL 集群。所以被问及任何参考。没关系。谢谢。
    • 哦,我以为您指的是一般的读/写拆分用例。 ProxySQL的具体使用我帮不了你,我自己没用过。
    【解决方案2】:
    • 有许多代理产品可能有这样的代码。
    • 如果您自动切换到 Master,那么 it 可能会不堪重负,从而导致更糟糕的系统问题。
    • 如果您尝试切换到另一个 Slave,则很容易陷入飘忽不定的境地。
    • Galera 有一种方法可以处理“关键读取”,如果您想使用集群设置而不是 Master + Slaves。
    • 如果部分问题是Master和Slave之间的距离,如果切换到Master,Client在哪里?如果它在从站附近,到达主站的额外时间不会抵消一些好处吗?
    • 避免长时间运行的查询,加强从属服务器以避免磁盘速度变慢,加快经常访问磁盘的查询,研究网络改进。

    总之,我不喜欢尝试将查询移至 Master 的想法;我会努力解决根本问题。

    【讨论】:

      【解决方案3】:

      MariaDB MaxScale 有多种处理复制延迟的方法。

      最简单的方法是使用max_slave_replication_lag 参数限制最大允许复制延迟。这完全按照您描述的方式工作:如果一个奴隶比主人落后太多秒,其他奴隶,作为最后的手段,使用主人。这是 MaxScale 中处理复制滞后的最常用方法。

      另一种选择是使用 causal_reads 功能,该功能利用了 MASTER_GTID_WAIT 和 MariaDB 10.2 及更高版本中的其他功能。这允许读取一致性,而不会在主服务器上增加额外的负载。这确实是以延迟为代价的:如果服务器滞后读取几秒钟,则可能需要更长的时间。当数据一致性很重要但请求延迟不那么重要时使用此选项。

      第三个选项是在写入发生后使用CCRFilter 强制读取到主机。与causal_reads 相比,这是一种更简单的方法,但它以增加主节点负载为代价提供数据一致性。

      【讨论】:

        猜你喜欢
        • 2015-01-17
        • 2016-05-20
        • 2022-01-05
        • 1970-01-01
        • 1970-01-01
        • 2013-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多