JuiceFS 在 Elasticsearch/ClickHouse 溫冷數據存儲中的實踐( 四 )


04- 實操:ES + JuiceFSStep 1:準備多種類型節點,分配不同角色 。每一個 ES 節點可以分配不同的角色 , 比如存熱數據、溫數據、冷數據等,用戶需要準備不同機型的節點來匹配不同角色的需求 。
Step 2:掛載 JuiceFS 文件系統 。一般用戶將 JuiceFS 用于溫、冷數據的存儲,用戶需要在 ES 溫數據節點或冷數據的節點上把 JuiceFS 文件系統掛載到本地 。用戶可以通過符號鏈接或其它方式把掛載點配置到 ES 中去,讓 ES 認為它的數據存儲在本地目錄里,但這個目錄背后其實是一個 JuiceFS 文件系統 。
Step 3:創建生命周期策略 。這個需要每個用戶自己去定制,用戶既可以通過 ES API 去創建,也可以通過 Kibana 去創建 , Kibana 提供了一些相對便捷的方式去創建和管理生命周期策略 。
Step 4:為索引設置生命周期策略 。創建完生命周期策略之后,用戶需要把這個策略應用到索引上,也就是要為索引去設置剛剛創建好的策略 。用戶可以通過索引模板的方式,可以在 Kibana 里創建索引模板,也可以通過 index.lifycycle.name,顯式通過 API 配置 。
這里有幾個小提示:
Tip 1:Warm 或 Cold 節點的副本數(replica)可以設置為 1 。所有數據本質上都是放在 JuiceFS 上,它的底層是對象存儲,因而數據的可靠性已經足夠高了,所以在 ES 這邊可以適當降低副本數 , 節省存儲空間 。

JuiceFS 在 Elasticsearch/ClickHouse 溫冷數據存儲中的實踐

文章插圖
Tip 2:開啟 Force merge 可能會導致節點 CPU 持續占用,酌情關閉 。從熱數據轉移到溫數據這個階段時,ES 會將所有熱數據索引對應的底層 segment 做合并 。如果開啟 Force merge 這個功能 , ES 會先合并完這些 segment 以后,再把它存儲到溫數據的底層系統 。然而合并 segment 是一個非常消耗 CPU 的過程,如果溫數據的數據節點同時也需要承載一些查詢請求 , 可以酌情關閉這個功能能,也就是原封不動地把數據保留下來,直接寫到底層存儲中 。
Tip 3:Warm 或 Cold 階段的索引可以設置為只讀 。在給溫數據和冷數據階段建立索引時 , 我們基本上可以認為這些數據是只讀的,這些階段的索引不會被修改 。設置為只讀可以適當降低溫冷數據節點上的資源,比如內存可以釋放一些 , 從而節省一些在溫節點或者冷節點上的硬件資源 。
05- 實操:ClickHouse + JuiceFSStep 1:在所有 ClickHouse 節點上掛載 JuiceFS 文件系統 。這個路徑可以是任意路徑,因為 ClickHouse 會有一個配置文件去指向掛載點 。
Step 2:修改 ClickHouse 配置,新增 JuiceFS 盤 。在 ClickHouse 中把剛剛掛載好的 JuiceFS 文件系統掛載點添加進來 , 讓 ClickHouse 可以識別這個新磁盤 。
Step 3:新增存儲策略,設定下沉數據規則 。這個存儲策略會根據用戶的規則去不定期的、自動地將數據從默認磁盤上下沉到指定的,比如 JuiceFS 中 。
Step 4:為特定表設置存儲策略及 TTL 。存儲策略制定好之后 , 需要把這個策略應用到某一個表上 。前期測試階段和驗證階段,可以把用相對大一點的表去做測試和驗證,如果用戶希望基于時間維度來實現數據下沉,就同時也需要在表上設置 TTL 。整個下沉過程是一個自動的機制 , 可以通過 ClickHouse 的 system 表查看當前正在進行數據遷移的 part 以及遷移進度 。
Step 5:手動移動 part 進行驗證 ??梢酝ㄟ^手動執行 MOVE PARTITION 命令的方式去驗證當前的配置或存儲策略是否生效 。
下圖是一個具體示例,在 ClickHouse 中有一個叫做 storage_configuration 的配置項,其中包含 disks 配置,這里會把 JuiceFS 作為一個盤加進來,我們將它命名為“jfs”,但其實可以用任意名字,掛載點是 /jfs目錄 。
<storage_configuration> <disks>     <jfs>         <path>/jfs</path>     </jfs> </disks> <policies>     <hot_and_cold>         <volumes>             <hot>                 <disk>default</disk>                 <max_data_part_size_bytes>1073741824</max_data_part_size_bytes>             </hot>             <cold>                 <disk>jfs</disk>             </cold>         </volumes>         <move_factor>0.1</move_factor>     </hot_and_cold> </policies></storage_configuration>

推薦閱讀