pool是ceph儲存資料時的邏輯分割槽,它起到namespace的作用。其他分布式儲存系統,比如mogilefs、couchbase、swift都有pool的概念,只是叫法不同。每個pool包含一定數量的pg,pg裡的物件被對映到不同的osd上,因此pool是分布到整個集群的。
pool有兩種方法增強資料的可用性,一種是副本(replicas),另一種是ec(erasure coding)。從firefly版本起,ec功能引入。在ec裡,資料被打散成碎片,加密,然後進行分布式儲存。ceph由於其分布式能力,處理ec非常成功。pool在建立時可以設定這兩種方法之一,但不能同時設定兩者。
pool預設的副本數量是3,我們可以自己控制副本的數量。ceph的複製能力非常靈活,可以在任何時候更改這個引數。
在資料寫往pool時,遵循crush的規則集,也就是說,寫往哪個位置以及副本數量,受規則集影響。這個規則集是pool的重要功能。比如我們可以通過規則集,定義乙個pool使用ssd儲存,另乙個pool使用sata儲存,見前文描述。
pool也支援snapshot功能。可以執行ceph osd pool mksnap命令建立pool的快照,並且在必要的時候恢復它。還可以設定pool的擁有者屬性,從而進行訪問控制。
建立ceph pool的命令如下,它的引數包括pool名字、pg和pgp的數量。
$ ceph osd pool create mytest 128
128pool 'mytest' created
檢視pool有幾種方式,比如:
$ rados lspools毫無疑問ceph osd dump輸出的資訊最詳盡,包括pool id、副本數量、crush規則集、pg和pgp數量等。data
metadata
rbdmytest
$ ceph osd lspools
0 data,1 metadata,2 rbd,3 mytest,
$ ceph osd dump |grep pool
pool 0
'data' replicated size
3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 43 flags hashpspool crash_replay_interval 45 stripe_width 0
pool 1
'metadata' replicated size
3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 41 flags hashpspool stripe_width 0
pool 2
'rbd' replicated size
3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 45 flags hashpspool stripe_width 0
pool 3
'mytest' replicated size
3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 58 flags hashpspool stripe_width 0
可以調整剛建立的pool的副本數量:
$ ceph osd pool set mytest size
2set pool 3
size
to2
如下命令演示ceph的snapshot功能。我們往pool裡寫入乙個物件,然後獲取pool的快照,接著刪除物件,最後從快照裡恢復資料。
# 寫入乙個檔案
$ rados -p mytest put testfile /etc/hosts
# 檢視這個檔案
$ rados -p mytest ls
testfile
# 建立pool的快照
$ rados mksnap snapshot001 -p mytest
created pool mytest snap snapshot001
# 檢視pool的快照
$ rados lssnap -p mytest
1 snapshot001 2015.11.30 09:50:
381 snaps
# 刪除檔案
$ rados -p mytest rm testfile
# 從快照裡回滾檔案
$ rados rollback -p mytest testfile snapshot001
rolled back pool mytest to snapshot snapshot001
# 確認結果
$ rados -p mytest ls
testfile
刪除pool會同步刪除所有快照。在刪除pool後,需要刪除pool的crush規則集,假如你手工建立過它們。同樣也需刪除這個pool的授權使用者。
$ ceph osd pool delete mytest mytest --yes-i-really-really-mean-it上述刪除命令,pool名字輸入兩次,並且帶上–yes-i-really-really-mean-it引數,感覺多此一舉的說。pool 'mytest' removed
CEPH快速搭建四 ceph的pool池
pool是ceph儲存資料時的邏輯分割槽,它起到namespace的作用。其他分布式儲存系統,比如mogilefs couchbase swift都有pool的概念,只是叫法不同。每個pool包含一定數量的pg,pg裡的物件被對映到不同的osd上,因此pool是分布到整個集群的。除了隔離資料,我們也...
ORACLE回滾段管理(上)
回滾段管理一直是oracle資料庫管理的乙個難題,本文通過例項介紹oracle回滾段的概念,用法和規劃及問題的解決。回滾段概述 回滾段用於存放資料修改之前的值 包括資料修改之前的位置和值 回滾段的頭部包含正在使用的該回滾段事務的資訊。乙個事務只能使用乙個回滾段來存放它的回滾資訊,而乙個回滾段可以存放...
Spring的事務管理與回滾
最近在做專案的時候,才發現對spring的事務是那麼不了解,因此花了一些時間總結了一下自己對spring的事務的理解。spring ejb的宣告式事務 預設情況下都是在 丟擲unchecked exception並且這異常是runtimeexception或它的子類 後才會觸發事務的回滾。在測試專案...