我使用Mysql/MariaDB和Innodb存储引擎版本10.x。
我想设置一个具有主从配置的集群。可以选择使用--无害只读或只读-只读从从中读取数据。
但是,除了上面的内容外,客户端还需要从从服务器读取数据当且仅当最大从延迟小于x秒。
由于网络拥塞、磁盘吞吐量低、运行时间长等原因,从服务器可能会落后于主服务器。具有最大允许延迟选项的读取首选项应该允许应用程序为从中读取的数据指定最大复制延迟或“延迟”。当第二次用户的估计损耗超过时,客户端将停止使用它进行从从中读取操作,并开始从主读取。
我想知道MySql/InnoDB中是否有选项?
发布于 2018-07-06 15:58:13
没有自动选项可以将查询切换到主服务器。这是由应用程序逻辑处理的。
您可以运行查询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年)
发布于 2018-07-07 14:39:39
总之,我不喜欢尝试将查询转移到Master;我将致力于处理根本的问题。
发布于 2019-12-13 12:33:08
MariaDB MaxScale有多种处理复制滞后的方法。
最简单的方法是限制最大允许的复制滞后与max_slave_replication_lag参数。这就像你描述的那样:如果一个奴隶比主人落后太多秒,那么其他奴隶,作为最后的手段,主人就会被使用。这是MaxScale中最常见的处理复制滞后的方法。
另一种选择是使用causal_reads特性,它利用了MASTER_GTID_WAIT和MariaDB 10.2及更新版本中的其他功能。这允许读取一致性,而不需要在主服务器上添加额外的负载。这是以延迟为代价的:如果服务器落后几秒钟,读取可能会花费更长的时间。当数据一致性非常重要但请求延迟不那么重要时,使用此选项。
第三种选择是在发生写操作后使用CCRFilter强制对主服务器进行读取。与causal_reads相比,这是一种更简单的方法,但它提供数据一致性的代价是增加了主服务器上的负载。
https://stackoverflow.com/questions/51213099
复制相似问题