使用Raft-RocksDB-Tablestore作為儲存後端

更新時間:
Copy as MD

JindoFSEMR-3.27.0及之後版本中支援使用Raft-RocksDB-OTS作為Jindo中繼資料服務(Namespace Service)的儲存。1EMR JindoFS叢集建立3Master節點群組成1Raft執行個體,執行個體的每個Peer節點使用本地RocksDB儲存中繼資料資訊。

前提條件

  • 建立Tablestore執行個體,推薦使用高效能執行個體,詳情請參見開通服務和建立執行個體

    說明

    需要開啟事務功能。

  • 建立3 MasterEMR叢集,詳情請參見建立叢集。開啟高可用部署方式選擇 3 Master

背景資訊

RocksDB通過Raft協議實現3個節點之間的複製。叢集可以綁定1Tablestore(OTS)執行個體,作為Jindo的中繼資料服務的額外儲存介質,本地的中繼資料資訊會即時非同步地同步到使用者的Tablestore執行個體上。

中繼資料服務-多機Raft-RocksDB-Tablestore+HA如下圖所示。Raft + RocksDB + Tablestore

配置本地raft後端

  1. 建立EMR叢集後,暫停SmartData所有服務。

    1. 登入阿里雲E-MapReduce控制台

    2. 在頂部功能表列處,根據實際情況選擇地區和資源群組

    3. 單擊上方的集群管理頁簽。

    4. 集群管理頁面,單擊相應叢集所在行的详情

    5. 在左側導覽列,單擊集群服务 > SmartData

    6. 單擊右上方的操作 > 停止 All Components

  2. 根據使用需求,添加需要的namespace。

  3. 進入SmartData服務的bigboot頁簽。

    1. 在左側導覽列單擊集群服务 > SmartData

    2. 單擊配置頁簽。

    3. 服务配置地區,單擊bigboot頁簽。

  4. SmartData服務的bigboot頁簽,設定以下參數。

    參數

    描述

    樣本

    namespace.backend.type

    設定namespace後端儲存類型,支援:

    • rocksdb

    • ots

    • raft

    預設為rocksdb。

    raft

    namespace.backend.raft.initial-conf

    部署raft執行個體的3Master地址(固定值)。

    emr-header-1:8103:0,emr-header-2:8103:0,emr-header-3:8103:0

    jfs.namespace.server.rpc-address

    Client端訪問raft執行個體的3Master地址(固定值)

    emr-header-1:8101,emr-header-2:8101,emr-header-3:8101

    說明

    如果不需要使用OTS遠端儲存,直接執行步驟6步驟7;如果需要使用OTS遠端儲存,請執行步驟5~步驟7

  5. 可選:配置遠端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

  6. 儲存配置。

    1. 單擊右上方的保存

    2. 确认修改對話方塊中,輸入執行原因,開啟自動更新配置

    3. 單擊确定

  7. 單擊右上方的操作 > 啟動All Components

Tablestore恢複中繼資料資訊

如果您在原創組群開啟了遠端Tablestore非同步儲存,則Tablestore上會有1份完整的JindoFS中繼資料的副本。您可以在停止或釋放原創組群後,在新建立的叢集上恢複原先的中繼資料,從而繼續訪問之前儲存的檔案。

  1. 可選:準備工作。

    1. 可選:統計原創組群的中繼資料資訊(檔案和檔案夾數量)。

      [hadoop@emr-header-1 ~]$ hadoop fs -count jfs://test/
              1596      1482809                 25 jfs://test/
          (檔案夾個數) (檔案個數)
    2. 停止原創組群的作業,等待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
    3. 停止或釋放原創組群,確保沒有其它叢集正在訪問當前的Tablestore執行個體。

  2. 建立新叢集。

    建立與Tablestore執行個體相同RegionEMR叢集,暫停SmartData所有服務。詳情請參見配置本地raft後端中的步驟1

  3. 初始化配置。

    SmartData服務的bigboot頁簽,設定以下參數。

    參數

    描述

    樣本

    namespace.backend.raft.async.ots.enabled

    是否開啟OTS非同步上傳,包括:

    • true

    • false

    false

    namespace.backend.raft.recovery.mode

    是否開啟從OTS恢複中繼資料,包括:

    • true

    • false

    true

  4. 儲存配置。

    1. 單擊右上方的保存

    2. 确认修改對話方塊中,輸入執行原因,開啟自動更新配置

    3. 單擊确定

  5. 單擊右上方的操作 > 啟動 All Components

  6. 新叢集的SmartData服務啟動後,自動從OTS恢複中繼資料到本地Raft-RocksDB上,可以通過以下命令查看恢複進度。

    jindo jfs -metaStatus -detail

    執行該命令後,確認輸出中 stateLEADER,且 [Recovery From OTS Status]stateFINISH,表示恢複完成。樣本輸出:

    [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.
  7. 可選:執行以下操作,可以比較一下檔案數量與原創組群是否一致。

    此時的叢集為復原模式,也是唯讀模式。

    # 對比檔案數量一致
    [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.
  8. 修改配置,將叢集設定為正常模式,開啟OTS非同步上傳功能。

    SmartData服務的bigboot頁簽,設定以下參數。

    參數

    描述

    樣本

    namespace.backend.raft.async.ots.enabled

    是否開啟OTS非同步上傳,包括:

    • true

    • false

    true

    namespace.backend.raft.recovery.mode

    是否開啟從OTS恢複中繼資料,包括:

    • true

    • false

    false

  9. 重啟叢集。

    1. 單擊上方的集群管理頁簽。

    2. 集群管理頁面,單擊相應叢集所在行的更多 > 重启