我有一个场景,MySQL将部署在两个独立的区域数据中心。数据中心1-活动(占用流量(数据中心2-被动。将在两个数据中心的MySQL之间设置数据复制。当发生故障切换时,主动和被动数据中心将翻转。
如何在Datacenter 2变为活动状态以接受新请求之前查明数据复制已完成。有没有一种方法可以通过编程方式检查复制队列的深度?我想确保从数据中心1起飞的复制队列中的所有数据都先插入数据中心2,然后才能将其标记为活动并接受新请求。
我知道这种设计会在故障转移期间降低应用程序的可用性,但这没关系。应用程序更喜欢一致性而不是可用性,因此需要确保数据库的所有先前更新(来自其他DC的飞行中(都已完成,然后才能应用新的更新。
谢谢!
检查的方法之一是运行SHOW SLAVE STATUS
。这将返回相当多的信息,如正在复制的内容、主日志和从属日志位置以及复制状态。但只是为了确定它是否是最新的,是检查大师身后的秒数。如果滞后主值的秒数为0,则复制是最新的,高于零的是滞后秒数。
尽管我注意到一件事,仅仅因为它说落后5秒并不一定意味着还有5秒,这取决于延迟的原因。
当您从MySQL客户端在命令行/终端上运行SHOW SLAVE STATUS时,最好使用G
而不是;
,因为它的格式更适合您阅读详细信息。
例如。SHOW SLAVE STATUSG
而不是SHOW SLAVE STATUS;
仔细检查Slave_IO_Running
和Slave_SQL_Running
的值是否都是"是"也是一个好主意,如果其中任何一个都是"否",则master后面的秒数可以显示0,但这意味着复制没有运行,数据库也不是最新的。