管理ceph的pool 快照,回滾

2021-08-02 09:10:04 字數 2754 閱讀 6532

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

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

毫無疑問ceph osd dump輸出的資訊最詳盡,包括pool id、副本數量、crush規則集、pg和pgp數量等。

可以調整剛建立的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 'mytest' removed

上述刪除命令,pool名字輸入兩次,並且帶上–yes-i-really-really-mean-it引數,感覺多此一舉的說。

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或它的子類 後才會觸發事務的回滾。在測試專案...