零售业数据库选型与迁移ToC系统实践 大规模场景应用
870
2023-06-13
MySQL主从如何保证高可用
什么时候是主备切换的最佳时机?
主从延迟越小越好。
如何查看备库的同步延迟?
-- 在slave上执行以下命令show slave status\G
上图返回结果中包含一个seconds_behind_master字段,用于表示当前备库延迟了多少秒。
seconds_behind_master的计算逻辑
每个事务的binlog里面都有一个时间字段,用于记录主库上的写入时间备库取出当前正在执行的事务的时间字段的值,计算它与当前系统时间的差值,得到seconds_behind_master备库在连接到主库时,会通过执行select unix_timestamp()函数获取主库的系统时间,如果发现主库和自己的时间不一致,备库在计算seconds_behind_master会自动扣掉这个差值
什么情况下会发生主备切换?
主动运维操作主库意外宕机
主备延迟的原因?
备库机器配置较低备库压力大(比如在备库上执行一些占用资源的运营报表分析)大事务备库的并行复制能力
主备切换策略由哪几种?
可靠性优先策略可用性优先策略
什么是可靠性优先策略?
可靠性优先策略优先保证数据的可靠性,通常由专门HA系统实现。
可靠性优先策略下的主备切换逻辑
判断Slave B现在的seconds_behind_master,如果小于某个值(比如5s)继续下一步,否则重试这一步把Master A修改为只读状态判断Slave B的seconds_behind_master的值,直到这个值变为0为之把Slave B改为可读写状态把业务请求切到备库B,此时Slave B就正式晋升为主库
可靠性优先策略假设主从延迟很大,无法快速切换,主节点又不可用,这将会导致服务长时间的不可用。
可用性优先策略
可用性优先策略是不再等待主从同步完成,如果主节点一旦宕机,立马进行切换,但是此时可能会导致数据一致性问题。
尤其是当binlog模式是statement或者mixed模式下的时候,很容易造成数据不一致。如果binlog模式是ROW模式,由于记录的是某个行记录的全字段,在插入数据的时候可能会因为主键冲突,使得同步线程报错并停止。
在实际使用中,我更建议使用可靠性优先策略,毕竟对于数据服务来说,数据可靠性重要程度要高于可用性。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。