why
服務重啟,或者與集群斷網重連時,需要和集群當前的主分片的數據保持一致。
how
上圖中,RecoverTarget 代表加入集群前想要同步數據的分片,RecoverSource代表當前集群中的正常分片。
同步過程本質上來說,就是通過拷貝索引文件&重放事務日志來完成的,具體的步驟如上圖,我用一個實際的例子來說明。
下圖是分片的文件目錄樹,左邊的RecoverTarget,右邊是RecoverSource
1.對比索引文件差異。target要把自己當前的索引文件快照發給source,然后source進行差異對比,從而確定要同步哪些文件(右邊的藍色部分)。
2.文件同步。resouce把差異文件發送給target,target收到后,把文件寫入lucene中。
3.清理文件。這里要解決的問題是把清理掉原來的索引文件,把recovery.*這些臨時文件還原到索引中去,從而實現索引文件一致(藍色部分)。
4.同步tlog。在這里source負責把tlog(紅色部分)的事務讀出來,分組發給target,target收到后,會依次進行重放。
5.收尾。設置結束狀態,發起定時任務。