【问题标题】:Can ProxySQL be asked to use a specific GTID on a read?是否可以要求 ProxySQL 在读取时使用特定的 GTID?
【发布时间】:2019-07-17 15:40:35
【问题描述】:

我们有一个应用程序向 ProxySQL 发出写入,然后立即读取可能会受到写入的影响。 ProxySQL 后面是四台 MySQL 服务器——一台写入器和三个从写入器复制的读取器。

现在,ProxySQL 能够通过记录原始写入的 OK 数据包中发回的 GTID 和读取器的 binlog 提要来确保它选择一个“最新”读取器,以确保它选择一个已执行已经写好了。

我们的问题是,由于我们的拓扑结构,读取实际上可能在与写入不同的连接上到达 ProxySQL。因此,“读取”连接可能持有较旧的 GTID,因此可能会选择尚未发生写入的“非最新”读取器。

如果可以告诉 ProxySQL 确保阅读器使用“指定”GTID(我们自己从 OK 数据包中解析出来的)而不是连接上的 GTID,我们可以看到一个可能的解决方案,但是我们不知道我们是否可以这样做 - 我在文档中看不到任何内容。

非常欢迎任何关于可行解决方案的想法!

我们正在使用带有 ProxySQL 版本 2.0.3-29-g00f26d5 的 mySQL 5.7.25。

我们目前的结果是,我们经常先写再读,但是读返回的是写之前存在的状态。

【问题讨论】:

    标签: mysql gtid proxysql


    【解决方案1】:

    我的理解是,proxysql 支持开箱即用的 GTID - 当满足某些情况时。

    1. binlog_format 为 ROW
    2. 在后端 session_track_gtids 设置为 OWN_GTID
    3. proxysql的monitor用户存在于后端服务器上
    4. mysql_replication_hostgroups 也设置好了

    【讨论】:

    • 以上是对的,但GTID的一致性只是“每个连接”。在单独的连接上,没有工具可以说,“我希望与其他连接一样最新”,这正是我们所需要的。
    【解决方案2】:

    现在的 ProxySQL (2.0.3-29-g00f26d50) 似乎没有“答案”,尽管 ProxySQL 人员愿意付费建造该设施。

    同时,我们已采取步骤,将写入器(通过将其分配给一个组并选择该组)用于必须与先前调用保持同步的读取,因为它将始终保持最新的一致视图.这会影响性能,但如果此类请求不太常见,应该可以接受。

    【讨论】:

      猜你喜欢
      • 2012-05-29
      • 1970-01-01
      • 2016-08-24
      • 1970-01-01
      • 2021-01-12
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 2021-05-03
      相关资源
      最近更新 更多