如果复制延迟比较严重,会对系统有不好的影响,如:
1. 数据不一致
从库的数据状态会落后主库,查询从库如果读取到过期数据,会造成数据不一致的情况。
2. 高可用性降低
如果主库宕机,需要故障转移到从库提供服务,但此时从库的数据状态不是最新的,可能会有比较长的服务中断时间。
3. 主从切换困难
主从之间数据差距大,进行切换需要的时间更长,可能需要重新建立复制,同步期间整个系统无法对外服务。
4. 增加主库压力
主库需要保持较长时间的binary log以供从库追赶及重建复制关系,增加了存储以及备份的负载。
5. 影响其他服务
其他依赖于从库提供实时数据的服务会受到影响,例如报表、数据分析等会基于过期的数据展现,减少准确性。
所以,严重的复制延迟最终会降低系统的高可用性,增加故障转移复杂度,也会对主库及其他相关服务造成额外的负面影响。因此,要把复制延迟控制在较小的范围。
主要成因:
1、网络延迟:
主库与从库之间的网络如果存在延迟或中断,会直接导致复制数据的传输速度下降,从而加大复制延迟。
2、服务器性能:
如果从库的服务器性能比主库差很多,那么处理并应用主库传来的binary log的速度会很慢,也会延长复制时间。
3、事务过大:
主库上如果有大量的大事务执行,会占用大量IO并加重从库的负载,从而造成从库迟迟不能追上主库。
4、批量操作:
如批量insert或load data这类批量操作也会增加复制延迟。
应对方法包括:
- 升级网络链路,减少网络延迟。
- 使用性能较好的服务器作为从库,并适当增加从库数量分摊负载。
- 控制大事务的执行频率和次数,拆分大事务为小事务执行。
- 减少批量操作,不要一次性执行过多的批量操作语句。
- 适当缓存策略,一部分数据更新而不立即复制。
- 辅助使用中间层缓存系统,减轻主从复制的压力。
通过上述策略,可以有效地控制和减小主从复制的延迟。