天天看點

Tair資料遷移三步走遷移的三個階段

Tair資料遷移三步走遷移的三個階段

image.png

遷移的三個階段

在多機房資料遷移中,整個過程分為三個階段:曆史資料遷移階段、redolog遷移階段、實時複制階段。

1 曆史資料遷移

曆史資料的遷移使用一個隊列完成,這個隊列由多個線程消費。遷移子產品儲存一個本dataserver的主桶有序序列,存儲引擎順序按桶掃描所有資料(對ldb引擎來講,是掃描memtable、immutable memtable和所有的SSTable),并将掃描到的資料放到隊列裡。主線程會同步等待每個桶的資料同步完成,然後在從機房上打上标簽,每次同步前都會判斷這個标簽,避免重新開機後曆史資料重遷。

2 redolog遷移

由于在曆史資料同步時,client又會有新的寫入,新寫入的key可能已經被掃描過,是以如果不記錄這些操作,這部分資料可能會被丢失。

對曆史資料遷移來講,桶有三種狀态:已遷移、正在遷移、未遷移 。

redolog隻記錄“正在遷移”的桶的新寫入請求。對于已遷移的桶的新寫入請求,把它放到實時遷移隊列,對于未遷移的桶的新寫入請求,不做特殊處理,因為等到遷移這些桶時,資料已經落到ldb上。

Tair資料遷移三步走遷移的三個階段

當一個桶的ldb資料遷移完成時,立即開始遷移新産生的log。遷移log時,也可能會有新的寫入,當剩餘log很大時,新的寫入會追加到log;當剩餘log小于一定門檻值後,會鎖定log,新的寫入會被阻塞,直到log遷移完畢後,再将被阻塞的請求放到實時複制隊列裡。

redolog的遷移使用多個隊列,根據請求key的hash值放到不同的隊列裡,每個隊列隻有一個消費線程,這樣來保證相同key的時序性。

3 實時複制

實時複制也使用多個隊列,根據請求key的hash值放到不同的隊列裡,每個隊列隻有一個消費線程,來保證相同key的時序性。

如上所述,當一個桶的曆史資料、redolog遷移完畢後,新的請求就會放到實時隊列裡。

個人介紹:

高廣超:多年一線網際網路研發與架構設計經驗,擅長設計與落地高可用、高性能網際網路架構。

本文首發在

高廣超的簡書部落格

轉載請注明!

Tair資料遷移三步走遷移的三個階段