Binlog MySQL Replication是一个“伤害之袋”。有什么好的选择吗?
-
07-07-2019 - |
解决方案
您的主服务器并行执行,您的从服务器串行执行。如果你的主人可以在1小时内处理1.5小时的插入/更新/执行,你的奴隶就会落后。
如果您无法找到提高从属设备写入性能的方法(更多内存,更快的磁盘,删除不必要的索引),那么您的应用程序架构就会受到限制。最终,您将无法实时执行更改,因为主服务器可以并行执行更改。
许多大型网站都会对其数据库进行分片:考虑将主服务器/从服务器拆分为多个主服务器+从服务器集群。然后在这些集群中拆分客户群。当奴隶开始落后时,是时候添加另一个集群了。
它并不便宜,但除非您能找到一种方法使并行执行binlog复制执行语句,否则您可能找不到更好的方法。
更新(2017):MySQL现在支持并行从属工作者线程。仍然有许多变量会导致从属设备落后,但是从设备不再需要按顺序写入。选择保留并行从属线程的提交顺序是一个重要的选项,可以查看从属设备在任何时间点的确切状态是否至关重要。
其他提示
你试过了吗? 1)SET innodb_flush_log_at_trx_commit = 0 2)SET sync_binlog = 0
如果您遇到服务器故障,两者都有助于加快您的Slave的风险。
向奴隶添加内存可能会有所帮助。我们从32到128兆,并且滞后或多或少消失了。但它既不便宜也不适合所有情况。
购买第三台服务器可能没那么多,但你很可能只会得到另一个落后的奴隶。
不隶属于 StackOverflow