为高流量环境优化MySQL复制的关键配置设置涉及对各种复制和服务器参数进行仔细调整,以平衡性能,可靠性和数据一致性。
使用主动/被动配置:
在高流量的方案中,建议使用主动/被动复制体系结构,其中一个主要的MySQL Server(Master)处理所有写入操作和多个被动副本(Slaves)手柄读取操作。这可以有效地拆分工作负载,从而使复制品在主人处理写作时可以提供仅阅读流量。此设置避免了主动/活动配置的复杂性和冲突问题。但是,此设置中常见的异步复制可以引入主和副本之间的某些延迟,因此应用程序逻辑应考虑到读取后的一致性要求。
复制模式:
MySQL复制支持异步和半同步复制模式。异步复制是默认值,可提供高性能,但具有潜在的复制滞后。半同步复制通过使主等待直到至少一个副本确认收到交易之前,可以提高数据的一致性。这降低了故障转移情况下数据丢失的风险,但增加了延迟。对于高流量,应调整半同步模式的超时设置(默认为10秒),以确保一致性和性能之间的正确权衡。有时,使用混合模式,而关键复制品使用半同步,而其他模式则使用异步来平衡可用性和性能。
二进制记录配置:
通过设置“ log-bin”并分配唯一的``server-id''来启用主对主的二进制记录。选择`binlog_format = row`以记录单个行更改而不是语句,以确保准确性和一致性,尤其是在复杂的工作负载中。明智地配置二进制日志保留政策,以平衡恢复能力和存储需求。另外,对于全局交易标识符,启用`gtid_mode = on`和`enforce_gtid_consistency = on“简化复制管理和故障转移,增强自动化。
性能的复制拓扑:
为了在高流量方案中缩放复制,建议使用层次复制拓扑(也称为链接或继电器复制)。主复制到中间服务器(继电器从属),然后将其复制到其他副本。这通过将网络和复制流量委派给中间复制品来减少主的负载。该拓扑减轻了网络瓶颈并改善了整体复制吞吐量。但是,必须在继电器服务器上启用`log_slave_updates`,它带有性能开销,并且需要仔细的监视以防止级联复制滞后。
奴隶上的并行复制:
在复制品上启用并行复制以提高复制性能。 MySQL 5.6+支持多线程SQL执行。可配置的选项(例如`slave_parallel_workers`允许多个复制SQL线程)并行应用交易,从而减少具有独立交易的工作负载的复制滞后。需要仔细调整以基于CPU和工作负载特性设置最佳线程计数而不会引起争议。
网络和连接优化:
优化用于复制流量的网络配置:
- 使用专用的网络接口进行复制。
- 在复制流中启用压缩以减少带宽的使用。
- 正确配置防火墙规则以允许安全复制流量。
- 使用SSL加密(启用``-SSL`选项)进行安全数据传输,尽管它添加了一些CPU开销。
- 连接池可以从频繁的连接设置中减少开销。
存储和I/O优化:
在二进制日志上使用快速存储(SSD首选),因为二进制记录直接影响复制。在副本上,考虑单独的存储设备以备继电器日志,以避免I/O的争论。优化写入的I/O调度程序设置和文件系统参数,因为复制日志涉及与周期性Fsyncs的顺序写入。磁盘延迟直接影响复制滞后和整体性能。
超时和重试设置:
调整复制超时设置,例如`slave_net_timeout`,以确保复制连接不会在高流量或高延迟网络中过早下降。此外,调整`master_retry_count`和相关的重试参数,以在瞬态网络失败过程中获得更好的弹性。
监视和警报:
实施监视复制滞后,网络吞吐量,磁盘I/O和CPU利用率。工具可以提醒复制延迟阈值和其他可能表明性能退化的异常。在高流量环境中,主动监测至关重要,以维持复制健康。
故障转移和备份策略:
除了使用复制以获得高可用性外,还必须定期备份复制品。经常测试故障转移程序。使用GTID来简化故障转移恢复,轻松识别最后执行的事务并确保复制品赶上而不会丢失数据。在链式的复制拓扑中,确保继电器奴隶和叶片复制品在故障转移之前完全同步。
其他设置:
- 禁用不必要的记录和监视复制品以减少开销。
- 在主上使用`sync_binlog = 1`以保持耐用性,并具有意识会影响磁盘性能。
- 调整`max_allowed_packet`来处理复制大型交易而不会出错。
关键配置参数的摘要:
- 在主人上:
- “ server-id”(唯一)
- `log-bin = mysql-bin`
- `binlog_format = row`
- `gtid_mode = on`
- `enforce_gtid_consistency = on`
- `sync_binlog = 1`(用于耐用性)
- 复制品:
- `server-id'(与主的唯一不同)
- “ relay_log”
- `log_slave_updates`(如果用作中间继电器)
- `slave_parallel_workers`(> 1用于并行复制)
- `slave-net-timeout`针对网络条件调整了
- 复制模式:
- 启用关键副本的半同步复制(`rpl_semi_sync_master_enabled = on`,`rpl_semi_semi_sync_slave_enabled = on`)
- 网络:
-SSL启用进行复制
- 如果吞吐量受约束,则启用压缩
- 贮存:
-SSD用于二进制和继电器日志
- 如果可能的话,分开用于中继日志的磁盘
- 拓扑:
- 使用链式或分层复制来分配负载。