我们有一个应用程序,它向ProxySQL发出写操作,然后立即进行读操作,这可能会受到写操作的影响。在ProxySQL后面是四个MySQL服务器-一个写入器和三个从写入器复制的读取器。
现在,ProxySQL能够通过记录从原始写入的OK包中发回的GTID和来自读取器的binlog feed来确保它选择一个“最新”的读取器,以确保它选择了已经执行了写入的读取器。
我们的问题是,由于我们的拓扑结构,读操作实际上可能会在与写操作不同的连接上到达ProxySQL。因此,“读取”连接可能持有较旧的GTID,因此可能会选择“不是最新的”读取器,在该读取器上还没有发生写入。
我们可以看到一个可能的解决方案,如果可以告诉ProxySQL确保读者是最新的“指定的”GTID (一个我们自己解析出来的OK包),而不是连接上的那个,但我们不知道我们是否能做到这一点-我在文档中看不到任何东西。
任何对可行解决方案的想法都将是非常受欢迎的!
我们使用的是带有ProxySQL版本2.0.3-29-g00f26d5的mySQL 5.7.25。
我们目前的结果是,我们通常先执行写操作,然后执行读操作,但读操作会返回写操作之前的状态。
发布于 2019-08-10 03:12:16
我的理解是,当满足某些情况时,proxysql支持开箱即用的GTID。
servers
mysql_replication_hostgroups is session_track_gtids is OWN_GTID(后端上存在proxysql的监视器用户)也是setup
发布于 2019-09-03 20:48:19
现在的ProxySQL (2.0.3-29-g00f26d50)似乎对此没有“答案”,尽管ProxySQL的人愿意收费建造这个设施。
同时,我们采取了使用写入器(通过将其分配到一个组并选择它)的步骤,用于必须与上一个调用保持最新一致视图的读取。这将影响性能,但如果此类请求不太常见,则应该是可以接受的。
https://stackoverflow.com/questions/57079671
复制相似问题