Project Voldemort 於 Debian Linux 架設

Project Voldemore 是一套分散式 key-value 的儲存系統(distributed key-value storage system).

Project Voldemort 結構

官方的 Project Voldemort Design / 結構 介紹, 下述簡單紀錄 Project Voldemort Design 的相關筆記.(請搭配原文參考, 只是想架設玩玩, 可以跳過這一區塊.)

System Architecture
  • 看圖時可以搭配下面的 Hash Ring 參考: Hash Ring 的圖是 R = 3 的狀況: 順時針向右旋轉, 所以是 [A,C,B] (遇到 A 重覆跳過), [B,D,C], [D,B,A].
Data partitioning and replication
  • S: server 數量
  • p: 掛掉的可能性
  • key => K on R servers
  • R server key => a = K % S, a, a + 1 ... a + r
Data Format & Queries
  • 系統的 Key 都是 唯一(unique)的.
Data Model & Serialization
  • 資料儲存可以考慮 json / string / java-serialization / protobuf / identify (推薦 json)
Consistency & Versioning

在寫入 / 讀取 會有 replicate 狀況時,
如何保持資料一致性, 這邊有三種解法:

  1. Two-Phase Commit:
    • 優點: locking protocol, 將機器經過兩 rounds 交叉排列, 是完美的一致性解法.
    • 缺點: 沒辦法容忍錯誤 / 機器掛掉, 非常慢.
  2. Paxos-style consensus:
    • 這個協定是來確保值的一致性, 這個的錯誤容忍度較高.
  3. Read-repair:
    • 前面兩個 approach 是預防不一致性, 這個 approach 是保持資料一致性 和 即時偵測衝突狀況, 並解決這個問題.
    • 這要靠 分類 + 複雜的錯誤容忍度, 需加上應用程式的邏輯來解決這個衝突.
    • Versioning in a distributed system
    • 我們有 versioning system 就是要防止同時寫入, 但是資料不同的狀況, 會透過偵測衝突然後讓 client 變一致性的工具.

基本環境 (Ant Java)

在架設之前, Ant Java 的觀念需要稍微知道一點, 下述轉載自: Ant 入門(1)- 什麼是 Ant?

官方網站

Ant 是以 Java 為基礎的構建工具,理論上,它有些類似Make,但沒有Make的缺點,並具有純Java撰寫的可攜性優點.

簡單的歸納一下Ant可以幫您自動完成的任務:

  • 編譯Java原始碼
  • 建立jar、war、zip檔案
  • 自動測試與生成報告
  • 從CVS等管理系統取得原始碼

Project Voldemort 環境架設

  • Project Voldemort 環境架設參考: Quick start 此篇.
安裝步驟 - Ant & Java 環境
  • apt-get install ant
  • apt-get install sun-java6-jdk
  • mv /usr/bin/java /usr/bin/java-gij
  • ln -s /usr/lib/jvm/java-6-sun-1.6.0.12/bin/java /usr/bin/java
  • 若不安裝 sun-java6-jdk, 並使用 sun 的 java, 執行 ant 時, 會出現下述錯誤.

     ant Compliance level '1.4' is incompatible with target level '1.5'. A compliance level '1.5' or better is required

  • 註: Debian 預設 java 環境是 gij / gcj (GNU libgcj)
安裝步驟 - Project Voldemort 環境
  1. svn checkout http://project-voldemort.googlecode.com/svn/trunk/ project-voldemort # 或下載 project-voldemort-0.4a.tgz 皆可
  2. cd project-voldemort
  3. ant # 若有任何錯誤, 可以 ant --execdebug 看詳細的訊息.
  4. bin/voldemort-server.sh config/single_node_cluster > /tmp/voldemort.log & # 啟動
  5. bin/voldemort-shell.sh test tcp://localhost:6666 # 執行 Shell Client 做簡單測試
測試
  1. > put "hello" "world" # 建立 key 是 "hello", value 是 "world"
  2. > get "hello" # 取得 key "hello" 的資料

    version(0:1): "world" # 得到 world. version() 代表: cluster.xml 設定的 機器id、partitions ex: version(機器id : 哪個partitions)

  3. > delete "hello" # 刪除 key "hello" 的資料
  4. > get "hello" # 取得 key "hello" 的資料

    null # 無此資料

  5. > exit
網頁監控
  • http://MACHINE_IP:8081/admin # 啟動後, 可於此處做管理.
  • http://MACHINE_IP:8081/query # web.xml 是有此介面, 但是試不出如何使用, source code: src/java/voldemort/server/http/gui/QueryServlet.java
  • 註: 有 store / key / key_type(string) / value / action 的參數可以用
資料庫儲存位置
  • project-voldemort/config/single_node_cluster/data/bdb/00000000.jdb # *.jdb

Project Voldemort 操作命令

Project Voldemort 只有簡單的幾個命令:

  • put key value -- Associate the given value with the key.
  • get key -- Retrieve the value associated with the key.
  • delete key -- Remove all values associated with the key.
  • locate key -- Determine which servers host the give key.
  • help -- Print this message.
  • exit -- Exit from this shell.

設定 store.xml

  • name: table name
  • replication-factor: 資料被儲存的總次數, 一台 replication-factor 是n, 代表可以容忍 n-1 node failures 資料不會遺失.
  • preferred-factor: 優先讀取
  • required-factor: 最少需要幾台讀取
  • 更多詳細可見: Project Voldemort - configuration
  • 設定多台的範例: project-voldemort-config.tgz (註: 此設定僅供參考, 此設定於其中機器死掉時, 會有資料遺失, 還在測試是哪邊設定有誤)

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料