librados相關介紹

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);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章