一、異地雙活架構概述
異地雙活架構是指在兩個地理位置相隔較遠的機房分別部署一套相同的應用系統,通過數據同步技術保證兩套系統之間的數據一致性。在這種架構下,當一套系統發生故障時,可以快速切換到另一套系統,實現故障轉移,提高系統的可用性和性能。
二、數據同步關鍵技術
1. 同步策略
數據同步策略包括全量同步和增量同步。全量同步是指將整個數據集從一套系統同步到另一套系統,適用于數據量較小或者對數據一致性要求較高的場景;增量同步是指只同步發生變化的數據,適用于數據量較大或者對同步速度要求較高的場景。
2. 如何獲取全量+增量數據
通常,mysql不會保存所有的歷史binlog。原因在于,對于一條記錄,可能我們會更新多次,這依然是一條記錄,但是針對每一次更新操作,都會產生一條binlog記錄,這樣就會存在大量的binlog,很快會將磁盤占滿。因此DBA通常會通過一些配置項,來定時清理binlog,只保留最近一段時間內的binlog。官方的mysql提供了expire_logs_days配置項,可以設置保存binlog的天數。因為binlog可能不會一直保留,所以直接同步binlog,可能只能獲取到部分數據。因此,通常的策略是,由DBA先dump一份源庫的完整數據快照,增量部分,再通過binlog訂閱解析進行同步。
3. 數據一致性保障
數據一致性是異地雙活架構中的核心問題。為了保障數據一致性,可以采用以下技術手段:
(1)分布式鎖:在數據更新操作時,通過分布式鎖確保同一時刻只有一個系統可以執行更新操作,避免數據沖突。
(2)時間戳:為每條數據設置時間戳,當數據發生沖突時,可以根據時間戳判斷數據的先后順序,保證數據的一致性。
(3)版本號:為每條數據設置版本號,當數據發生沖突時,可以根據版本號判斷數據的最新狀態,實現數據的一致性。