要在不引起性能问题的情况下将更多奴隶添加到MySQL复制设置中,请考虑采用多层复制体系结构,而不是将所有奴隶直接连接到主要来源。当许多奴隶直接连接到单个来源时,它会增加该来源的负载,因为每个从维护连接以及需要将二进制日志数据发送到每个源的源,这可能成为网络和性能瓶颈。取而代之的是,通过将主源复制到一个或几个中间复制品来层次配置复制,然后将其复制到其余的从奴隶中。此方法减少了与主的直接连接数量,并在跨服务器之间更均匀地分布复制负载。
必须将中间复制品配置为记录二进制更新本身(使用`log_slave_updates`启用),以便它们可以作为下游副本的来源。该设置有效地创建了复制链或树,可以显着提高性能和可伸缩性。
此外,复制模式在性能和数据一致性中起着重要作用。 MySQL支持异步和半同步复制模式。异步复制使主服务器可以进行交易而无需等待奴隶,从而改善了写入吞吐量,但可能导致复制滞后。半同步复制可确保至少一个奴隶在主投入之前承认交易,从而以较小的延迟成本增强数据一致性。根据应用程序的一致性和延迟要求调整这些设置。
为了进一步优化,请调整从奴隶上的复制线。从MySQL 5.6开始,支持多线程复制,允许多个SQL线程并行应用中继日志事件。这可以减少复制滞后,尤其是当工作负载涉及许多可以通过多个线程独立处理的数据库或表格时。
磁盘I/O配置也至关重要:将继电器日志和数据库文件放置在单独的物理驱动器上,以最大程度地减少I/O的参数。这可以帮助奴隶更有效地跟上复制流。
在大型环境中,考虑通过将不同的数据库或表委派给不同副本来平衡负载并防止对任何单个复制品的争议来考虑分裂责任。
添加新从属时,正确提供它很重要:
- 分配一个唯一的`server_id``以避免冲突了。
- 用快照或主数据备份初始化从属,以确保其从一致点开始复制。
- 使用源连接详细信息和复制设置配置从属。
- 在初始化过程中使用`` - skip-slave-start“)之类的选项,以防止复制过早启动。
- 一旦设置完成并监视任何滞后或错误,请启动复制。
可以使用“ MySqlDump”,Percona Xtrabackup或MySQL Clone插件等工具来备份并恢复新奴隶上的数据。 Xtrabackup实用程序可以创建热备份而无需锁定源数据库,从而最大程度地减少停机时间。
为了同步和初始负载平衡,诸如PT-table-sync之类的工具可以帮助确保恢复后主和从属之间的数据一致性。
总而言之,在没有绩效降低的情况下添加更多奴隶的关键策略包括:
- 与中间复制品一起使用层次复制拓扑。
- 在中间副本上启用`log_slave_updates`。
- 根据一致性和延迟需求,在异步和半同步复制模式之间进行选择。
- 在奴隶上采用多线程复制。
- 通过物理分离继电器日志和数据文件来优化I/O。
- 通过数据库或表格分离分配复制工作负载。
- 仔细提供具有唯一服务器ID和一致快照的新奴隶。
- 使用适当的备份和同步工具进行初始设置。
- 不断监视复制滞后和性能指标。
随着奴隶的数量的增长,这种方法有助于维持可扩展和性能的复制体系结构,避免了主要来源上的瓶颈并确保有效的复制吞吐量。
可以在官方的MySQL文档中找到设置和管理此设置的详细实践程序,以及专门从事高可用性和复制体系结构的经验丰富的MySQL服务提供商。