使用Raft-RocksDB-Tablestore作為儲存後端
JindoFS在EMR-3.27.0及之後版本中支援使用Raft-RocksDB-OTS作為Jindo中繼資料服務(Namespace Service)的儲存。1個EMR JindoFS叢集建立3個Master節點群組成1個Raft執行個體,執行個體的每個Peer節點使用本地RocksDB儲存中繼資料資訊。
前提條件
-
建立Tablestore執行個體,推薦使用高效能執行個體,詳情請參見開通服務和建立執行個體。
說明需要開啟事務功能。
-
建立3 Master的EMR叢集,詳情請參見建立叢集。開啟高可用,部署方式選擇 3 Master。
背景資訊
RocksDB通過Raft協議實現3個節點之間的複製。叢集可以綁定1個Tablestore(OTS)執行個體,作為Jindo的中繼資料服務的額外儲存介質,本地的中繼資料資訊會即時非同步地同步到使用者的Tablestore執行個體上。
中繼資料服務-多機Raft-RocksDB-Tablestore+HA如下圖所示。
配置本地raft後端
-
建立EMR叢集後,暫停SmartData所有服務。
-
在頂部功能表列處,根據實際情況選擇地區和資源群組。
-
單擊上方的集群管理頁簽。
-
在集群管理頁面,單擊相應叢集所在行的详情。
-
在左側導覽列,單擊。
-
單擊右上方的。
-
根據使用需求,添加需要的namespace。
-
進入SmartData服務的bigboot頁簽。
-
在左側導覽列單擊。
-
單擊配置頁簽。
-
在服务配置地區,單擊bigboot頁簽。
-
-
在SmartData服務的bigboot頁簽,設定以下參數。
參數
描述
樣本
namespace.backend.type
設定namespace後端儲存類型,支援:
-
rocksdb
-
ots
-
raft
預設為rocksdb。
raft
namespace.backend.raft.initial-conf
部署raft執行個體的3個Master地址(固定值)。
emr-header-1:8103:0,emr-header-2:8103:0,emr-header-3:8103:0
jfs.namespace.server.rpc-address
Client端訪問raft執行個體的3個Master地址(固定值)
emr-header-1:8101,emr-header-2:8101,emr-header-3:8101
-
-
可選:配置遠端OTS非同步儲存。
在SmartData服務的bigboot頁簽,設定以下參數。
參數
參數說明
樣本
namespace.ots.instance
Tablestore執行個體名稱。
emr-jfs
namespace.ots.accessKey
Tablestore執行個體的AccessKey ID。
kkkkkk
namespace.ots.accessSecret
Tablestore執行個體的AccessKey Secret。
XXXXXX
namespace.ots.endpoint
Tablestore執行個體的Endpoint地址,通常EMR叢集,推薦使用VPC地址。
http://emr-jfs.cn-hangzhou.vpc.tablestore.aliyuncs.com
namespace.backend.raft.async.ots.enabled
是否開啟OTS非同步上傳,包括:
-
true
-
false
當設定為true時,需要在SmartData服務完成初始化前,開啟OTS非同步上傳功能。
說明如果SmartData服務已完成初始化,則不能再開啟該功能。因為OTS的資料已經落後於本地RocksDB的資料。
true
-
-
儲存配置。
-
單擊右上方的保存。
-
在确认修改對話方塊中,輸入執行原因,開啟自動更新配置。
-
單擊确定。
-
-
單擊右上方的。
從Tablestore恢複中繼資料資訊
如果您在原創組群開啟了遠端Tablestore非同步儲存,則Tablestore上會有1份完整的JindoFS中繼資料的副本。您可以在停止或釋放原創組群後,在新建立的叢集上恢複原先的中繼資料,從而繼續訪問之前儲存的檔案。
-
可選:準備工作。
-
可選:統計原創組群的中繼資料資訊(檔案和檔案夾數量)。
[hadoop@emr-header-1 ~]$ hadoop fs -count jfs://test/ 1596 1482809 25 jfs://test/ (檔案夾個數) (檔案個數) -
停止原創組群的作業,等待30~120秒左右,等待原創組群的資料已經完全同步到Tablestore。執行以下命令查看狀態。如果LEADER節點顯示
_synced=1,則表示Tablestore為最新資料,同步完成。jindo jfs -metaStatus -detail命令返回樣本如下,其中
state: LEADER表示當前 Raft 節點角色為 LEADER,日誌索引已推進到 624625,各副本同步正常。[RaftPeerImpl] peer_id: xxx state: LEADER readonly: 0 term: 2 conf_index: 1 peers: xxx changing_conf: NO stage: STAGE_NONE election_timer: timeout(5000ms) STOPPED vote_timer: timeout(5000ms) STOPPED stepdown_timer: timeout(5000ms) SCHEDULING(in 2335ms) snapshot_timer: timeout(3600000ms) SCHEDULING(in 150305ms) storage: [1, 624625] disk_index: 624625 known_applied_index: 624625 last_log_id: (index=624625,term=2) first_index_pinned: 624625 state_machine: Idle last_committed_index: 624625 last_snapshot_index: 0 last_snapshot_term: 0 snapshot_status: IDLE replicator_25769803789@xxx next_index=624626 flying_append_entries_size=0 idle hc=2301 ac=624261 ic=0 replicator_32985348833259@xxx next_index=624626 flying_append_entries_size=0 idle hc=2301 ac=623564 ic=0 OtsUploader: _lastStopIndex=624624, _synced=1 -
停止或釋放原創組群,確保沒有其它叢集正在訪問當前的Tablestore執行個體。
-
-
建立新叢集。
建立與Tablestore執行個體相同Region的EMR叢集,暫停SmartData所有服務。詳情請參見配置本地raft後端中的步驟1。
-
初始化配置。
在SmartData服務的bigboot頁簽,設定以下參數。
參數
描述
樣本
namespace.backend.raft.async.ots.enabled
是否開啟OTS非同步上傳,包括:
-
true
-
false
false
namespace.backend.raft.recovery.mode
是否開啟從OTS恢複中繼資料,包括:
-
true
-
false
true
-
-
儲存配置。
-
單擊右上方的保存。
-
在确认修改對話方塊中,輸入執行原因,開啟自動更新配置。
-
單擊确定。
-
-
單擊右上方的。
-
新叢集的SmartData服務啟動後,自動從OTS恢複中繼資料到本地Raft-RocksDB上,可以通過以下命令查看恢複進度。
jindo jfs -metaStatus -detail執行該命令後,確認輸出中
state為 LEADER,且[Recovery From OTS Status]中state為 FINISH,表示恢複完成。樣本輸出:[RaftPeerImpl] peer_id: xxx:8103:0 state: LEADER readonly: 0 term: 2 conf_index: 1 peers: xxx changing_conf: NO stage: STAGE_NONE election_timer: timeout(5000ms) STOPPED vote_timer: timeout(5000ms) STOPPED stepdown_timer: timeout(5000ms) SCHEDULING(in 3382ms) snapshot_timer: timeout(600000ms) SCHEDULING(in 474855ms) storage: [1, 153] disk_index: 153 known_applied_index: 153 last_log_id: (index=153,term=2) first_index_pinned: 1 state_machine: Idle last_committed_index: 153 last_snapshot_index: 1 last_snapshot_term: 2 snapshot_status: IDLE replicator_1116691496965@xxx: next_index=154 flying_append_entries_size=0 idle hc=262 ac=154 ic=0 replicator_3311419785217@xxx: next_index=154 flying_append_entries_size=0 idle hc=262 ac=154 ic=0 [Recovery From OTS Status] state: FINISH [Recovery From OTS Status] state: FINISH total rows: 1484409 table `jfs_block_test` 2 rows. table `jfs_namespace_cache_ns` 1 rows. table `jfs_namespace_test` 1484406 rows. -
可選:執行以下操作,可以比較一下檔案數量與原創組群是否一致。
此時的叢集為復原模式,也是唯讀模式。
# 對比檔案數量一致 [hadoop@emr-header-1 ~]$ hadoop fs -count jfs://test/ 1596 1482809 25 jfs://test/ # 檔案可正常讀取(cat、get命令) [hadoop@emr-header-1 ~]$ hadoop fs -cat jfs://test/testfile this is a test file # 查看目錄 [hadoop@emr-header-1 ~]$ hadoop fs -ls jfs://test/ Found 3 items drwxrwxr-x - root root 0 2020-03-25 14:54 jfs://test/emr-header-1.cluster-50087 -rw-r----- 1 hadoop hadoop 5 2020-03-25 14:50 jfs://test/haha-12096RANDOM.txt -rw-r----- 1 hadoop hadoop 20 2020-03-25 15:07 jfs://test/testfile # 唯讀狀態,不可修改檔案 [hadoop@emr-header-1 ~]$ hadoop fs -rm jfs://test/testfile java.io.IOException: ErrorCode : 25021 , ErrorMsg: Namespace is under recovery mode, and is read-only. -
修改配置,將叢集設定為正常模式,開啟OTS非同步上傳功能。
在SmartData服務的bigboot頁簽,設定以下參數。
參數
描述
樣本
namespace.backend.raft.async.ots.enabled
是否開啟OTS非同步上傳,包括:
-
true
-
false
true
namespace.backend.raft.recovery.mode
是否開啟從OTS恢複中繼資料,包括:
-
true
-
false
false
-
-
重啟叢集。
-
單擊上方的集群管理頁簽。
-
在集群管理頁面,單擊相應叢集所在行的。
-