mysql/mariadb从最大过时的slave读取首选项

zf9nrax1  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(316)

我正在使用mysql/mariadb和innodb存储引擎版本10.x。
我想设置一个主从配置的集群。可以使用--innodb read only或--read only从从属服务器读取数据。
然而,除了上述,当且仅当最大从机延迟小于x秒时,客户端需要从从机读取数据。
由于网络拥塞、低磁盘吞吐量、长时间运行的操作等原因,从属服务器可能会落后于主服务器。对于从服务器进行的读取,具有max allowed staleness选项的读取首选项应允许应用程序指定最大复制延迟或“staleness”。当辅助设备的估计过期时间超过时,客户机将停止使用它执行从设备的读取操作,并开始从主设备读取。
我想知道mysql/innodb中是否有一个选项?

p8h8hvxi

p8h8hvxi1#

mariadb maxscale有多种处理复制延迟的方法。
最简单的方法是使用 max_slave_replication_lag 参数。这正是您描述的工作方式:如果一个从机落后于主机太多秒,则使用其他从机,并且作为最后手段,使用主机。这是在maxscale中处理复制延迟最常用的方法。
另一个选择是使用 causal_reads 利用 MASTER_GTID_WAIT 以及mariadb 10.2和更新版本中的其他功能。这允许读取一致性,而无需在主机上添加额外的负载。这是以延迟为代价的:如果服务器延迟几秒钟,那么读取可能需要更长的时间。当数据一致性很重要但请求延迟没有那么重要时,使用此选项。
第三种选择是使用ccrfilter在发生写操作后强制对主控进行读取。与其他方法相比,这是一种更简单的方法 causal_reads 但它提供了数据一致性,但代价是主机上的负载增加。

o2gm4chl

o2gm4chl2#

有许多代理产品可能有这样的代码。
如果您自动切换到主服务器,那么它可能会不知所措,从而导致更严重的系统问题。
如果你试图切换到另一个奴隶,这是太容易进入扑翼的情况。
galera有一种处理“临界读取”的方法,如果您想进入集群设置而不是主+从。
如果问题的一部分是主设备和从设备之间的距离,如果切换到主设备,那么客户机在哪里?如果它靠近奴隶,那么到达主人的额外时间会不会抵消一些好处呢?
避免长时间运行的查询,增强从机以避免慢磁盘,加快对磁盘影响很大的查询,研究网络改进。
总而言之,我不喜欢尝试将查询移动到master的想法;我将致力于解决根本问题。

rqqzpn5f

rqqzpn5f3#

没有将查询切换到主查询的自动选项。这由应用程序逻辑处理。
您可以运行查询 SHOW SLAVE STATUS 返回的字段之一是 Seconds_Behind_Master . 您必须编写应用程序代码来检查这一点,如果延迟大于阈值,则改为查询主机。
您可能会发现某种类型的代理可以为您执行此逻辑。看到了吗https://mydbops.wordpress.com/2018/02/19/proxysql-series-mysql-replication-read-write-split-up/
将延迟x秒的复制副本视为不可用并不总是最佳选择。有些查询是完全可以不管滞后。几年前我写了一篇关于这个的演讲,其中包括一些示例查询。使用mysql和php进行读/写拆分(percona webinar 2013)

相关问题