1. librados介紹
ceph存儲集羣提供的基本存儲服務,使ceph能夠在一個聯合文件系統中獨一無二的實現對象存儲(object storage)、塊存儲(block storage)以及文件存儲(file storage)。然而,你並不一定需要通過RESTful API、block API或者POSIX文件系統接口才能訪問ceph存儲集羣。依賴於RADOS,你可以直接通過librados API來訪問ceph存儲集羣。
librados API可以訪問ceph存儲集羣的兩類守護進程:
- Ceph Monitor: 維持cluster map的一份主拷貝
- Ceph OSD Daemon: 在存儲節點上存儲對象數據
2. 安裝librados開發環境
通過librados創建的Ceph Client可以直接和OSD來進行交互來存取數據。要想和OSD進行交互,client app必須要調用librados並且連接到Ceph Monitor。一旦連接成功,librados就可以從Ceph Monitor處獲得Cluster Map。當client app想要讀寫數據的時候,其需要創建一個IO context並且綁定到一個pool上。pool是和rule相關聯的,其定義瞭如何將數據存入集羣。通過IO Context,client向librados提供object名稱,librados採用該名稱及獲取到的cluster map就能夠計算出需要將數據存放到哪個PG和OSD。
ceph storage cluster handle封裝了客戶端的配置:包括
- user ID(針對rados_create())或user name(針對rados_create2())
- cephx身份認證的key
- monitor ID和IP地址
- 日誌級別
- 調試級別
這樣要使用librados的步驟就是:1) 創建cluster handler 2)使用cluster handler連接到存儲集羣。 要想連接到集羣,app必須提供monitor IP,username和身份認證的key(假如啓用了cephx的話)
rados提供了多種方式來設置這些值。對於monitor及身份認證的key的設置,一種簡單的方法就是將它們寫在配置文件中。配置文件中包含至少一個monitor IP及keyring文件路徑。例如:
[global]
mon host = 192.168.1.1
keyring = /etc/ceph/ceph.client.admin.keyring
一旦你成功創建handle,你就可以讀取該配置文件來配置handle。你也可以通過向你的app client傳遞參數,然後對應的函數來解析命令行參數例如:(rados_conf_parse_argv()),或者解析ceph環境變量(例如:rados_conf_parse_env())的方式來配置handle。一旦handle連接成功,你就可以採用該handle來操作整個ceph集羣了:
- 獲得集羣數據信息
- 使用pool相關操作(exists,create,list,delete等)
- 獲取或設置配置
創建一個IO context
一旦app client已經有了cluster handle並且連接上了ceph存儲集羣,你就可以創建一個IO Context,然後開始讀寫數據。IO Context將連接綁定到一個特定的pool。用戶必須有適當的CAPS
權限來訪問該pool。IO Context功能包括:
- 讀寫數據和extended屬性
- 遍歷出對象和extended屬性
- pools快照,列出快照
rados同時支持同步/異步訪問集羣。一旦創建了IO Context之後,只需要通過object/xatrr名稱即可進行讀寫操作。封裝在librados中的CRUSH算法使用crush map選擇合適的OSD進行操作。 OSD Daemons負責複製數據的副本。
關閉sessions
一旦app client完成了相關操作,用戶需要關閉連接和handle。針對asynchronous IO,用戶也應確保該異步操作已經完成。
rados_ioctx_destroy(io);
rados_shutdown(cluster);