我们有一个应用程序,它向ProxySQL发出写操作,然后立即发出可能受写操作影响的读操作。 ProxySQL的后面是四个MySQL服务器-一个写入器和三个从写入器复制的读取器。
现在,ProxySQL能够通过记录从原始写入的OK数据包中发回的GTID和来自读取器的binlog提要来记录,以确保它选择了一个“最新”读取器,以确保它选择了已执行已经写了。
我们的问题是,由于我们的拓扑结构,读取实际上可能通过与写入不同的连接到达ProxySQL。因此,“读取”连接可能持有较旧的GTID,因此可能会选择尚未发生写入的“非最新”读取器。
如果可以告诉ProxySQL以确保读者使用最新的“指定的” GTID(我们自己从OK数据包中解析出的GTID)而不是连接上的GTID,我们可以看到一个可能的解决方案,但是我们不知道我们是否可以这样做-我在文档中什么都看不到。
任何对可行解决方案的想法都将受到欢迎!
我们将MySQL 5.7.25与ProxySQL 2.0.3-29-g00f26d5一起使用。
当前的结果是,我们通常先执行写操作,然后执行读操作,但是读操作返回写操作之前存在的状态。
答案 0 :(得分:0)
我的理解是,proxysql支持开箱即用的GTID-在满足某些情况时。
session_track_gtids
上的mysql_replication_hostgroups
也已设置答案 1 :(得分:0)
对于ProxySQL来说,今天的现状(2.0.3-29-g00f26d50)似乎还没有“答案”,尽管ProxySQL的人愿意为此付费建立设施。
同时,我们已采取以下步骤:使用writer(通过将其分配给一个组并进行选择)来进行必须与上一个调用保持最新状态的读取,因为它将始终保持最新的一致视图。这将对性能造成影响,但如果此类请求不太常见,则可以接受。