node-rados安裝與使用 - nodejs與Ceph通訊

最近開始使用nodejs與公司的Ceph串接資料,中間需要透過一個叫做node-rados的掛件工具,不過一開始就在安裝時踩了不少坑,這裡做一下備忘,也提醒之後要使用的人。

  • Ceph 叢集式檔案伺服器
  • Rados Ceph存取框架

雖說nodejs與Ceph,可以透過node-rados這個工具掛件,可以很簡便的通訊,但是還是得先確認兩件事。

注意事項

  1. 目前librados-dev僅直接支援Linux,Windows要安裝非常麻煩(有好心人士作了Windows版本),而且問題很多,我還是建議直接用Linux
  2. 編譯的nodejs,我試過很多版本都不行,目前我使用node v0.12.9,開發的話用nvm去切換版本吧。(不然把服務作在一個docker裡面也是一個辦法)

整個流程大致為這樣

  1. 安裝node-gyp
  2. 安裝編譯node-rados
  3. 準備Ceph定義檔

安裝node-gyp

以下教程依據Ubuntu 14,首先安裝node-gyp,有很多相互依賴的套件,請依照以下順作。

1
2
3
4
5
apt-get install python-software-properties
apt-get update
apt-get install build-essential libncurses-dev autoconf automake libtool
apt-get install make
npm install -g node-gyp

安裝node-rados

記得node版本v0.12.9,當初在這卡了很久..

1
2
apt-get install librados-dev
npm install rados

準備Ceph定義檔

ceph.conf Ceph服務器設定檔,主機位置與key檔位址

1
2
mon host = 192.168.1.100
keyring = ceph.client.admin.keyring

開始使用

上述準備好了之後就可以開始直接利用nodejs與Ceph串接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var rados = require('./build/Release/rados'); //編譯後rados函式庫位置
//開啟一個ceph服務,傳入你的ceph名稱,帳號,最後是你的設定檔位置
var cluster = new rados.Rados( "ceph", "client.admin", "./ceph.conf");
var err = cluster.connect();
if (err) {
// 連線失敗
console.log("Error " + err);
throw err;
}
//印出目前使用的Ceph的fsid
console.log( "fsid : " + cluster.get_fsid() );
//取回目前Ceph的pool列表
console.log( "ls pools : " + cluster.pool_list() );
//建立一個通訊流,pool name是rbd
var ioctx = new rados.Ioctx(cluster, "rbd");
//同步寫入Buffer資料,資料ID為myfile
ioctx.write_full("myfile", new Buffer("01234567ABCDEF"));
//取回myfile資料長度
var len = ioctx.stat("myfile").psize;
//同步取回myfile資料
var buf = ioctx.read("myfile", len);
//關閉服務
cluster.shutdown();

以上基本用法,詳細可以看官方範例