爲了保證分佈式存儲系統的高可靠和高可用,數據在系統中一般存儲多個副本。當某個存儲節點出故障時,系統能夠自動將服務切換到其他的副本,從而實現自動容錯。
分佈式存儲系統通過複製協議將數據同步到多個存儲節點,並確保多個副本之間的數據一致性。同一份數據有多個副本,僅有一個爲主副本 Primary,其他的副本爲備份副本 Backup,數據從主副本複製到備份副本。
複製協議分爲兩種:強同步複製及異步複製,兩者區別如字面意思,即用戶的寫請求是否需要同步到備份副本纔算成功。假如備份副本不止一個,複製協議還會要求寫請求至少需要同步到幾個備份副本。
- 實現強同步協議時,主副本可以將操作日誌併發發給所有備份副本並且等待回覆,只要至少1個備份副本返回成功就可以回覆客戶端操作成功。請同步的好處在於如果主副本出現故障,分佈式存儲系統可以自動將服務切換到最新的備份的副本而不用擔心數據丟失的情況。
- 異步模式下,主副本不需要等待備份副本的迴應,只需要本地修改成功就可以告知客戶端修改告知客戶端寫操作成功。好處在於系統可用性好,但是一致性較差,如果主副本發生不可恢復的故障,可能丟失最後一部分更新操作。
基於主副本的複製協議(Primary-based protocol)要求在任何時刻只能有一個副本爲主副本,由它來確定寫操作之間的順序。如果主副本出現故障,需要選舉一個備份副本成爲新的主副本,這步操作稱之爲選舉,經典的選舉協議爲 Paxos 協議。