ceph 管理
上次介紹了Ceph叢集架構並且搭建了ceph叢集,本節介紹ceph使用者認證流程和掛載、cephFS、ceph RBD以及ceph mds高可用
1. ceph 授權流程和使用者許可權管理
1.1. ceph 認證機制
Ceph 使用 cephx 協議對客戶端進行身份認證。cephx 用於對 ceph 儲存的資料進行認證訪問和授權,用於對訪問 ceph 的請求進行認證和授 權檢測,與 mon 通訊的請求都要經過 ceph 認證通過,但是也可以在 mon 節點關閉 cephx 認證,但是關閉認證之後任何訪問都將被允許,因此無法保證資料的安全性。
1.1.1. 授權流程
首先客戶端向 ceph-mon 服務請求資料,mon 節點會返回用於身份認證的資料結構,其中包含獲取 ceph 服務時用到的 session key,session key 通過客戶端祕鑰進行加密,祕鑰是在客戶端提前配置好的,/etc/ceph/ceph.client.admin.keyring
,客戶端使用key解密後得到session key, 然後使用 session key 向 ceph-mon 請求所需要的服務,ceph-mon 收到請求後會向客戶端提供一個 tiket,用於向實際處理資料的 OSD 等服務驗證客戶端身份, ceph-mon 和 ceph-osd 服務共享同一個 secret,因此 ceph-osd 會信任所有 ceph-mon 發放的 tiket。
每個 ceph-mon 節點都可以對客戶端進行身份認證並分發祕鑰,因此多個 ceph-mon 節點就不存在單點故障和認證效能瓶頸。同時請注意,tiket 存在有效期,認證流程圖如下:
無論 ceph 客戶端是哪種型別,例如塊裝置、物件儲存、檔案系統,ceph 都會在儲存池中將所有資料儲存為物件:
- ceph 使用者需要擁有儲存池訪問許可權,才能讀取和寫入資料
- ceph 使用者必須擁有執行許可權才能使用 ceph 的管理命令
1.2 ceph 使用者管理
使用者是指個人(ceph 管理者)或系統參與者(MON/OSD/MDS)。通過建立使用者,可以控制使用者或哪個參與者能夠訪問 ceph 儲存叢集、以及可訪問的儲存池 及儲存池中的資料。ceph 支援多種型別的使用者,但可管理的使用者都屬於 client 型別區分使用者型別的原因在於,MON/OSD/MDS 等系統元件都使用 cephx 協議,但是它們不算是客戶端。
使用者管理功能可讓 Ceph 叢集管理員能夠直接在 Ceph 叢集中建立、更新和刪除使用者。 在 Ceph 叢集中建立或刪除使用者時,可能需要將金鑰分發到客戶端,以便將金鑰新增到金鑰環檔案中/etc/ceph/ceph.client.admin.keyring,此檔案中可以包含一個或者多個使用者認證資訊,凡是擁有此檔案的節點,將具備訪問 ceph 的許可權,而且可以使用其中任何一個賬戶的許可權,此檔案類似於 linux 系統的中的/etc/passwd 檔案。
# 列出使用者
ubuntu@ceph-deploy:~$ sudo ceph auth list
installed auth entries:
osd.0
key: AQD2GxphV+RyDBAAQFRomuzg4uDfIloEq5BI1g==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.1
key: AQC6HBph1knDMhAA35GE09CWb6OLmS5JqmJQOQ==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.10
key: AQBUHRphi4mpBBAAoWWLdTr4g6o6ACRS5N1OQw==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.11
key: AQBfHRphtKOUDRAA29zlbCF0ucKFP7lAo+zrIQ==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.12
key: AQBsHRphvK+HORAAT5bs2AlrqrMEw7gtu21bMQ==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.13
key: AQB4HRphOHNuEhAAa98YTpyZFo/mrS3BmNHnTg==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.14
key: AQCDHRphWeMVGxAA+NagThVA2EhR/f8w5a+3SA==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.15
key: AQCOHRphFZOUJxAArQGoaoRw3B8D1aJ6ixv+9g==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.2
key: AQDFHBphCMUdNRAAZnDeDQE5QqTkBSiE2aXYeA==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.21
key: AQAMZCBhQAFIHhAAM5NaqCIldLooGGV0EI3j3A==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.3
key: AQAnryFhN432FBAAeUMWfj0O7jraGwRfMXMoJQ==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.4
key: AQANHRphwInjJBAA7vOTTU2kfLVthu0tuRTjRw==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.5
key: AQAYHRph3xokMRAAyqYTH0DBO8RPbhEH/mn7vQ==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.6
key: AQAjHRphKMkMMRAAOPxDEQK/zQ+HDO31ONl95A==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.7
key: AQAuHRphiH+cOhAAAdQNL/bausHnAWyokLISEg==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.8
key: AQA9HRph8Xp0ExAAVNo/SvF9GNZWZT69+eDgeQ==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.9
key: AQBIHRphEYHPNhAAkOM4JfKztb+RpVaJ2gyplQ==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
client.admin
key: AQD+BBphi27lEhAAMrU7KnwfJfn8SvOTVubqZQ==
caps: [mds] allow *
caps: [mgr] allow *
caps: [mon] allow *
caps: [osd] allow *
client.bootstrap-mds
key: AQD+BBphn4TlEhAAZIRY7MzA5EmBBn6VIB0NWQ==
caps: [mon] allow profile bootstrap-mds
client.bootstrap-mgr
key: AQD+BBphFJPlEhAAXIb6KfAtBAS6SDU6TW9pCA==
caps: [mon] allow profile bootstrap-mgr
client.bootstrap-osd
key: AQD+BBph8p/lEhAAlZzVZrUoKFMsHqzZV/eT+g==
caps: [mon] allow profile bootstrap-osd
client.bootstrap-rbd
key: AQD+BBphwK3lEhAAkx5vuPcOg25bLKS+14HoFA==
caps: [mon] allow profile bootstrap-rbd
client.bootstrap-rbd-mirror
key: AQD+BBphXrvlEhAAtPPtNSikm8u8zPmamAUhqQ==
caps: [mon] allow profile bootstrap-rbd-mirror
client.bootstrap-rgw
key: AQD+BBph7cflEhAA9LZFIKACQh7CeK6E/EeB+Q==
caps: [mon] allow profile bootstrap-rgw
mgr.ceph-mgr1
key: AQCmFBphsiG/NRAAKgyv3gbmwv30PDMgmMPegw==
caps: [mds] allow *
caps: [mon] allow profile mgr
caps: [osd] allow *
mgr.ceph-mgr2
key: AQBQJBphSEBXNhAAH+NZhGJipY8IRw4YOIeOww==
caps: [mds] allow *
caps: [mon] allow profile mgr
caps: [osd] allow *
# 列出指定使用者資訊
ubuntu@ceph-deploy:~$ sudo ceph auth get client.admin
exported keyring for client.admin
[client.admin]
key = AQD+BBphi27lEhAAMrU7KnwfJfn8SvOTVubqZQ==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
注意: TYPE.ID 表示法
針對使用者採用TYPE.ID表示法,例如osd.0指定是osd類並且ID為0的使用者(節點),client.admin 是 client 型別的使用者,其 ID 為 admin。另請注意,每個項包含一個 key=xxx 項,以及一個或多個 caps 項。
可以結合使用-o 檔名選項和 ceph auth list 將輸出儲存到某個檔案
$ ceph auth list -o client.admin.key
1.2.1. ceph授權
ceph 基於使能/能力(Capabilities,簡稱 caps )來描述使用者,可針對 MON/OSD 或 MDS 使用的授權範圍或級別。
通用的語法格式:daemon-type 'allow caps' [...]
能力一覽表:
許可權 | 說明 |
---|---|
r | 向使用者授予讀取許可權。訪問監視器(mon)以檢索 CRUSH 執行圖時需具有此能力。 |
w | 向使用者授予針對物件的寫入許可權。 |
x | 授予使用者呼叫類方法(包括讀取和寫入)的能力,以及在監視器中執行 auth 操作的能力。 |
* | 授予使用者對特定守護程式/儲存池的讀取、寫入和執行許可權,以及執行管理命令的能力 |
class-read | 授予使用者呼叫類讀取方法的能力,屬於是 x 能力的子集。 |
class-write | 授予使用者呼叫類寫入方法的能力,屬於是 x 能力的子集。 |
profile osd | 授予使用者以某個 OSD 身份連線到其他 OSD 或監視器的許可權。授予 OSD 許可權,使 OSD 能夠處理複製檢測訊號流量和狀態報告。 |
profile mds | 授予使用者以某個 MDS 身份連線到其他 MDS 或監視器的許可權。 |
profile bootstrap-osd | 授予使用者引導 OSD 的許可權(初始化 OSD 並將 OSD 加入 ceph 叢集),授 權給部署工具,使其在引導 OSD 時有權新增金鑰。 |
profile bootstrap-mds | 授予使用者引導後設資料伺服器的許可權,授權部署工具許可權,使其在引導 後設資料伺服器時有權新增金鑰。 |
MON 能力:
包括 r/w/x 和 allow profile cap(ceph 的執行圖),示例:
mon 'allow rwx'
mon 'allow profile osd'
OSD 能力:
包括 r、w、x、class-read、class-write(類讀取))和 profile osd(類寫入),另外 OSD 能力還允許進行儲存池和名稱空間設定。
osd 'allow capability' [pool=poolname] [namespace=namespace-name]
MDS 能力:
只需要 allow 或空都表示允許。
mds 'allow'
1.2.2. 管理操作
新增一個使用者會建立使用者名稱 (TYPE.ID)、機密金鑰,以及包含在命令中用於建立該使用者的所 有能力,使用者可使用其金鑰向 Ceph 儲存叢集進行身份驗證。使用者的能力授予該使用者在 Ceph monitor (mon)、Ceph OSD (osd) 或 Ceph 後設資料伺服器 (mds) 上進行讀取、寫入或執行的 能力,可以使用以下幾個命令來新增使用者:
ceph auth add
此命令是新增使用者的規範方法。它會建立使用者、生成金鑰,並新增所有指定的能力。
# 先建立一個儲存池,現有叢集一共16個osd,根據官方建議,每個osd一般建議100~200個PG,而我們的osd磁碟控制元件較小,定為60個PG每個osd,總的可設定的PG 16 x 60 / 3 = 320個可設定的PG,每個儲存池的PG暫定為32個總共可設定10個pool
# 1、建立儲存池
ubuntu@ceph-deploy:~$ sudo ceph osd pool create mypool1 32 32
pool 'mypool1' created
ubuntu@ceph-deploy:~$ sudo ceph osd lspools
1 device_health_metrics
5 mypool1
# 給客戶端alice新增認證key
ubuntu@ceph-deploy:~$ sudo ceph auth add client.alice mon 'allow r' osd 'allow rwx pool=mypool1'
added key for client.alice
ubuntu@ceph-deploy:~$ sudo ceph auth get client.alice
exported keyring for client.alice
[client.alice]
key = AQAwBCJhy/iIOBAAgPVXbcx1DP8yTssy90JB9g==
caps mon = "allow r"
caps osd = "allow rwx pool=mypool1"
ceph auth get-or-create
ceph auth get-or-create 此命令是建立使用者較為常見的方式之一,它會返回包含使用者名稱(在方括號中)和金鑰的金鑰文,如果該使用者已存在,此命令只以金鑰檔案格式返回使用者名稱和金鑰, 還可以使用 -o 指定檔名選項將輸出儲存到某個檔案。
# 建立一個新使用者
ubuntu@ceph-deploy:~$ sudo ceph auth get-or-create client.tom mon 'allow r' osd 'allow rwx pool=mypool1'
[client.tom]
key = AQAzBSJhCK/wIBAAxdwEVBMIy53xxRLOHjPVYg==
# 驗證使用者
ubuntu@ceph-deploy:~$ sudo ceph auth get client.tom
exported keyring for client.tom
[client.tom]
key = AQAzBSJhCK/wIBAAxdwEVBMIy53xxRLOHjPVYg==
caps mon = "allow r"
caps osd = "allow rwx pool=mypool1"
# 再次建立
ubuntu@ceph-deploy:~$ sudo ceph auth get-or-create client.tom mon 'allow r' osd 'allow rwx pool=mypool1'
[client.tom]
key = AQAzBSJhCK/wIBAAxdwEVBMIy53xxRLOHjPVYg==
ceph auth get-or-create-key
此命令是建立使用者並僅返回使用者金鑰,對於只需要金鑰的客戶端(例如 libvirt),此命令非 常有用。如果該使用者已存在,此命令只返回金鑰。您可以使用 -o 檔名選項將輸出儲存到 某個檔案。 建立客戶端使用者時,可以建立不具有能力的使用者。不具有能力的使用者可以進行身份驗證,但 不能執行其他操作,此類客戶端無法從監視器檢索叢集地圖,但是,如果希望稍後再新增能 力,可以使用 ceph auth caps 命令建立一個不具有能力的使用者。
典型的使用者至少對 Ceph monitor 具有讀取功能,並對 Ceph OSD 具有讀取和寫入功能。此外,使用者的 OSD 許可權通常限制為只能訪問特定的儲存池。
ubuntu@ceph-deploy:~$ sudo ceph auth get-or-create-key client.tom mon 'allow r' osd 'allow rwx pool=mypool1'
AQAzBSJhCK/wIBAAxdwEVBMIy53xxRLOHjPVYg==
# 使用者有 key 就顯示沒有就建立
ceph auth print-key
只獲取單個指定使用者的 key 資訊
ubuntu@ceph-deploy:~$ sudo ceph auth print-key client.alice
AQAwBCJhy/iIOBAAgPVXbcx1DP8yTssy90JB9g==
修改使用者能力
使用 ceph auth caps 命令可以指定使用者以及更改該使用者的能力,設定新能力會完全覆蓋當前 的能力,因此要加上之前的使用者已經擁有的能和新的能力,如果看當前能力,可以執行 ceph auth get USERTYPE.USERID,如果要新增能力,使用以下格式時還需要指定現有能力:
# ceph auth caps USERTYPE.USERID daemon 'allow [r|w|x|*|...] \
[pool=pool-name] [namespace=namespace-name]' [daemon 'allow [r|w|x|*|...] \
[pool=pool-name] [namespace=namespace-name]']
示例
# 檢視使用者當前許可權
ubuntu@ceph-deploy:~$ sudo ceph auth get client.tom
exported keyring for client.tom
[client.tom]
key = AQAzBSJhCK/wIBAAxdwEVBMIy53xxRLOHjPVYg==
caps mon = "allow r"
caps osd = "allow rwx pool=mypool1"
# 修改使用者許可權
ubuntu@ceph-deploy:~$ sudo ceph auth caps client.tom mon 'allow r' osd 'allow rw pool=mypool1'
updated caps for client.tom
# 驗證
ubuntu@ceph-deploy:~$ sudo ceph auth get client.tom
exported keyring for client.tom
[client.tom]
key = AQAzBSJhCK/wIBAAxdwEVBMIy53xxRLOHjPVYg==
caps mon = "allow r"
caps osd = "allow rw pool=mypool1"
刪除使用者
# 要刪除使用者使用 ceph auth del TYPE.ID,其中 TYPE 是 client、osd、mon 或 mds 之一,ID 是使用者名稱或守護程式的 ID。
ubuntu@ceph-deploy:~$ sudo ceph auth del client.tom
updated
ubuntu@ceph-deploy:~$ sudo ceph auth get client.tom
Error ENOENT: failed to find client.tom in keyring
ubuntu@ceph-deploy:~$ sudo ceph auth get client.alice
exported keyring for client.alice
[client.alice]
key = AQAwBCJhy/iIOBAAgPVXbcx1DP8yTssy90JB9g==
caps mon = "allow r"
caps osd = "allow rwx pool=mypool1"
1.3. 祕鑰環管理
ceph 的祕鑰環是一個儲存了 secrets、keys、certificates 並且能夠讓客戶端通認證訪問 ceph 的 keyring file(集合檔案),一個 keyring file 可以儲存一個或者多個認證資訊,每一個 key 都有一個實體名稱加許可權,型別為:
{client、mon、mds、osd}.name
當客戶端訪問 ceph 叢集時,ceph 會使用以下四個金鑰環檔案預設定金鑰環設定:
/etc/ceph/<$cluster name>.<user $type>.<user $id>.keyring # 儲存單個使用者的 keyring
/etc/ceph/cluster.keyring # 儲存多個使用者的 keyring
/etc/ceph/keyring # 未定義叢集名稱的多個使用者的 keyring
/etc/ceph/keyring.bin # 編譯後的二進位制檔案
1.3.1. 通過祕鑰環檔案備份與恢復使用者
使用 ceph auth add 等命令新增的使用者還需要額外使用 ceph-authtool 命令為其建立使用者祕鑰環檔案。建立 keyring 檔案命令格式:
ceph-authtool --create-keyring FILE
1.3.1.1 匯出使用者認證資訊至 keyring 檔案
# 建立金鑰環檔案
ubuntu@ceph-deploy:~$ ceph-authtool --create-keyring ceph.client.alice.keyring
creating ceph.client.alice.keyring
ubuntu@ceph-deploy:~$ ls
ceph-cluster ceph.client.alice.keyring
ubuntu@ceph-deploy:~$ cat ceph.client.alice.keyring
ubuntu@ceph-deploy:~$ file ceph.client.alice.keyring
ceph.client.alice.keyring: empty
# 匯出 keyring 到指定檔案
ubuntu@ceph-deploy:~$ sudo ceph auth get client.alice -o ceph.client.alice.keyring
exported keyring for client.alice
ubuntu@ceph-deploy:~$ cat ceph.client.alice.keyring
[client.alice]
key = AQAwBCJhy/iIOBAAgPVXbcx1DP8yTssy90JB9g==
caps mon = "allow r"
caps osd = "allow rwx pool=mypool1"
在建立包含單個使用者的金鑰環時,通常建議使用 ceph 叢集名稱、使用者型別和使用者名稱及 keyring 來命名,並將其儲存在
/etc/ceph
目錄中。例如為 client.alice 使用者建立 ceph.client.alice.keyring。
1.3.1.2 從 keyring 檔案恢復使用者認證資訊
可以使用 ceph auth import -i 指定 keyring 檔案並匯入到 ceph,其實就是起到使用者備份和恢復的目的:
# 驗證使用者
ubuntu@ceph-deploy:/etc/ceph$ sudo ceph auth get client.alice
exported keyring for client.alice
[client.alice]
key = AQAwBCJhy/iIOBAAgPVXbcx1DP8yTssy90JB9g==
caps mon = "allow r"
caps osd = "allow rwx pool=mypool1"
# 刪除使用者
ubuntu@ceph-deploy:/etc/ceph$ sudo ceph auth del client.alice
updated
# 驗證
ubuntu@ceph-deploy:/etc/ceph$ sudo ceph auth get client.alice
Error ENOENT: failed to find client.alice in keyring
ubuntu@ceph-deploy:/etc/ceph$ cd ~/
ubuntu@ceph-deploy:~$ ls
ceph-cluster ceph.client.alice.keyring
# 恢復賬戶
ubuntu@ceph-deploy:~$ sudo ceph auth import -i ceph.client.alice.keyring
imported keyring
# 驗證使用者
ubuntu@ceph-deploy:~$ sudo ceph auth get client.alice
exported keyring for client.alice
[client.alice]
key = AQAwBCJhy/iIOBAAgPVXbcx1DP8yTssy90JB9g==
caps mon = "allow r"
caps osd = "allow rwx pool=mypool1"
1.3.2 祕鑰環檔案多使用者
一個 keyring 檔案中可以包含多個不同使用者的認證檔案。
將多使用者匯出至祕鑰環:
# 建立一個空的 keyring
ubuntu@ceph-deploy:~$ ceph-authtool --create-keyring ceph.client.user1.keyring
creating ceph.client.user1.keyring
# 把指定的 admin 使用者的 keyring 檔案內容匯入到 user1 使用者的 keyring 檔案
ubuntu@ceph-deploy:~$ sudo ceph-authtool --import-keyring /etc/ceph/ceph.client.admin.keyring ceph.client.user1.keyring
importing contents of /etc/ceph/ceph.client.admin.keyring into ceph.client.user1.keyring
# 驗證
ubuntu@ceph-deploy:~$ sudo ceph-authtool -l ceph.client.user1.keyring
[client.admin]
key = AQD+BBphi27lEhAAMrU7KnwfJfn8SvOTVubqZQ==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
# 匯入另一個使用者的金鑰環
ubuntu@ceph-deploy:~$ sudo ceph-authtool --import-keyring ceph.client.alice.keyring ceph.client.user1.keyring
importing contents of ceph.client.alice.keyring into ceph.client.user1.keyring
# 驗證
ubuntu@ceph-deploy:~$ sudo ceph-authtool -l ceph.client.user1.keyring
[client.admin]
key = AQD+BBphi27lEhAAMrU7KnwfJfn8SvOTVubqZQ==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
[client.alice]
key = AQAwBCJhy/iIOBAAgPVXbcx1DP8yTssy90JB9g==
caps mon = "allow r"
caps osd = "allow rwx pool=mypool1"
2. 普通使用者掛載rbd和cephfs
2.1 Ceph RBD 使用
RBD 架構圖
Ceph 可以同時提供物件儲存 RADOSGW、塊儲存 RBD、檔案系統儲存 Ceph FS,RBD 即 RADOS Block Device 的簡稱,RBD 塊儲存是常用的儲存型別之一,RBD 塊裝置類似磁碟可以被掛載, RBD 塊裝置具有快照、多副本、克隆和一致性等特性,資料以條帶化的方式儲存在 Ceph 集 群的多個 OSD 中。
條帶化技術就是一種自動的將 I/O 的負載均衡到多個物理磁碟上的技術,條帶化技術就是將一塊連續的資料分成很多小部分並把他們分別儲存到不同磁碟上去。這就能使多個程式同時訪問資料的多個不同部分而不會造成磁碟衝突,而且在需要對這種資料進行順序訪問的時候可以獲得最大程度上的 I/O 並行能力,從而獲得非常好的效能。
# 1、建立儲存池
ubuntu@ceph-deploy:~$ sudo ceph osd pool create rbd-pool-1 32 32
pool 'rbd-pool-1' created
ubuntu@ceph-deploy:~$ sudo ceph osd pool ls
device_health_metrics
mypool1
rbd-pool-1
# 2、對儲存池啟用 rbd
ubuntu@ceph-deploy:~$ sudo ceph osd pool application enable rbd-pool-1 rbd
enabled application 'rbd' on pool 'rbd-pool-1'
# 3、初始化 rbd
ubuntu@ceph-deploy:~$ sudo rbd pool init -p rbd-pool-1
建立 img 映像
# rbd 儲存池並不能直接用於塊裝置,而是需要事先在其中按需建立映像(image),並把映像檔案作為塊裝置使用。rbd 命令可用於建立、檢視及刪除塊裝置相在的映像(image), 以及克隆映像、建立快照、將映像回滾到快照和檢視快照等管理操作。例如,下面的命令能夠在指定的 RBD 即 rbd-1 建立一個名為 rbd-img-1 的映像
ubuntu@ceph-deploy:~$ sudo rbd create rbd-img-1 --size 3G --pool rbd-pool-1 --image-format 2 --image-feature layering
ubuntu@ceph-deploy:~$ sudo rbd create rbd-img-2 --size 5G --pool rbd-pool-1 --image-format 2 --image-feature layering
# 驗證
ubuntu@ceph-deploy:~$ sudo rbd ls --pool rbd-pool-1
rbd-img-1
rbd-img-2
# 列出詳細資訊
ubuntu@ceph-deploy:~$ sudo rbd ls --pool rbd-pool-1 -l
NAME SIZE PARENT FMT PROT LOCK
rbd-img-1 3 GiB 2
rbd-img-2 5 GiB 2
檢視映象的詳細資訊
ubuntu@ceph-deploy:~$ sudo rbd --image rbd-img-1 --pool rbd-pool-1 info
rbd image 'rbd-img-1':
size 3 GiB in 768 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: d41dee2cd129
block_name_prefix: rbd_data.d41dee2cd129
format: 2
features: layering
op_features:
flags:
create_timestamp: Sun Aug 22 08:53:33 2021
access_timestamp: Sun Aug 22 08:53:33 2021
modify_timestamp: Sun Aug 22 08:53:33 2021
ubuntu@ceph-deploy:~$ sudo rbd --image rbd-img-2 --pool rbd-pool-1 info
rbd image 'rbd-img-2':
size 5 GiB in 1280 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: d420cab622d4
block_name_prefix: rbd_data.d420cab622d4
format: 2
features: layering
op_features:
flags:
create_timestamp: Sun Aug 22 08:53:48 2021
access_timestamp: Sun Aug 22 08:53:48 2021
modify_timestamp: Sun Aug 22 08:53:48 2021
以 json 格式顯示映象資訊
ubuntu@ceph-deploy:~$ sudo rbd ls --pool rbd-pool-1 -l --format json --pretty-format
[
{
"image": "rbd-img-1",
"id": "d41dee2cd129",
"size": 3221225472,
"format": 2
},
{
"image": "rbd-img-2",
"id": "d420cab622d4",
"size": 5368709120,
"format": 2
}
]
映象的其他特性
-
layering: 支援映象分層快照特性,用於快照及寫時複製,可以對 image 建立快照並保護,然 後從快照克隆出新的 image 出來,父子 image 之間採用 COW 技術,共享物件資料。預設新增的特性
-
striping: 支援條帶化 v2,類似 raid 0,只不過在 ceph 環境中的資料被分散到不同的物件中, 可改善順序讀寫場景較多情況下的效能。
-
exclusive-lock: 支援獨佔鎖,限制一個映象只能被一個客戶端使用。
-
object-map: 支援物件對映(依賴 exclusive-lock),加速資料匯入匯出及已用空間統計等,此特 性開啟的時候,會記錄 image 所有物件的一個點陣圖,用以標記物件是否真的存在,在一些場 景下可以加速 io。
-
fast-diff: 快速計算映象與快照資料差異對比(依賴 object-map)。 deep-flatten: 支援快照扁平化操作,用於快照管理時解決快照依賴關係等。
-
journaling: 修改資料是否記錄日誌,該特性可以通過記錄日誌並通過日誌恢復資料(依賴獨 佔鎖),開啟此特性會增加系統磁碟 IO 使用。
jewel 預設開啟的特性包括: layering/exlcusive lock/object map/fast diff/deep flatten
映象特性的啟用
# 啟用指定儲存池中的指定映象的特性
ubuntu@ceph-deploy:~$ sudo rbd feature enable exclusive-lock --pool rbd-pool-1 --image rbd-img-1
ubuntu@ceph-deploy:~$ sudo rbd feature enable object-map --pool rbd-pool-1 --image rbd-img-1
ubuntu@ceph-deploy:~$ sudo rbd feature enable fast-diff --pool rbd-pool-1 --image rbd-img-1
# 驗證映象特性
ubuntu@ceph-deploy:~$ sudo rbd info --image rbd-img-1 --pool rbd-pool-1
rbd image 'rbd-img-1':
size 3 GiB in 768 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: d41dee2cd129
block_name_prefix: rbd_data.d41dee2cd129
format: 2
features: layering, exclusive-lock, object-map, fast-diff
op_features:
flags: object map invalid, fast diff invalid
create_timestamp: Sun Aug 22 08:53:33 2021
access_timestamp: Sun Aug 22 08:53:33 2021
modify_timestamp: Sun Aug 22 08:53:33 2021
映象特性的禁用
ubuntu@ceph-deploy:~$ sudo rbd feature disable fast-diff --pool rbd-pool-1 --image rbd-img-1
ubuntu@ceph-deploy:~$ sudo rbd feature disable exclusive-lock --pool rbd-pool-1 --image rbd-img-1
ubuntu@ceph-deploy:~$ sudo rbd info --image rbd-img-1 --pool rbd-pool-1
rbd image 'rbd-img-1':
size 3 GiB in 768 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: d41dee2cd129
block_name_prefix: rbd_data.d41dee2cd129
format: 2
features: layering
op_features:
flags:
create_timestamp: Sun Aug 22 08:53:33 2021
access_timestamp: Sun Aug 22 08:53:33 2021
modify_timestamp: Sun Aug 22 08:53:33 2021
2.2 配置客戶端使用 RBD
在客戶端掛載 RBD,並使用普通使用者掛載 RBD 並驗證使用。
客戶端需要安裝ceph-common
# 1、新增源
ubuntu@client:~$ wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
ubuntu@client:~$ apt-add-repository 'deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-octopus/ bionic main'
# 2、安裝 ceph-common
ubuntu@client:~$ sudo apt install -y ceph-common
# 3、在客戶端對映 rbd 映像
ubuntu@client:~$ sudo rbd map --pool rbd-pool-1 --image rbd-img-1
/dev/rbd0
ubuntu@client:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 29G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 20G 0 lvm /
sr0 11:0 1 945M 0 rom
rbd0 252:0 0 3G 0 disk
# 4、使用普通使用者掛載測試
ubuntu@ceph-deploy:~$ sudo ceph auth get client.alice
exported keyring for client.alice
[client.alice]
key = AQAwBCJhy/iIOBAAgPVXbcx1DP8yTssy90JB9g==
caps mon = "allow r"
caps osd = "allow rwx pool=mypool1"
# 更改使用者許可權
ubuntu@ceph-deploy:~$ sudo ceph auth caps client.alice mon 'allow r' osd 'allow rwx pool=rbd-pool-1'
updated caps for client.alice
ubuntu@ceph-deploy:~$ sudo ceph auth get client.alice
exported keyring for client.alice
[client.alice]
key = AQAwBCJhy/iIOBAAgPVXbcx1DP8yTssy90JB9g==
caps mon = "allow r"
caps osd = "allow rwx pool=rbd-pool-1"
# 5、建立金鑰環並拷貝到客戶端
ubuntu@ceph-deploy:~$ sudo ceph-authtool --create-keyring ceph.client.alice.keyring
creating ceph.client.alice.keyring
ubuntu@ceph-deploy:~$ sudo ceph auth get client.alice -o ceph.client.alice.keyring
exported keyring for client.alice
ubuntu@ceph-deploy:~$ sudo cat ceph.client.alice.keyring
[client.alice]
key = AQAwBCJhy/iIOBAAgPVXbcx1DP8yTssy90JB9g==
caps mon = "allow r"
caps osd = "allow rwx pool=rbd-pool-1"
# 拷貝金鑰環
ubuntu@ceph-deploy:~$ scp ceph.client.alice.keyring ubuntu@ceph-client:/etc/ceph
# 6、檢視叢集,預設使用的是admin,需要使用 --user 指定使用者
ubuntu@ceph-client:~$ sudo ceph --user alice -s
cluster:
id: b7c42944-dd49-464e-a06a-f3a466b79eb4
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 8h)
mgr: ceph-mgr1(active, since 32h), standbys: ceph-mgr2
osd: 16 osds: 16 up (since 7h), 16 in (since 7h)
data:
pools: 3 pools, 65 pgs
objects: 10 objects, 51 B
usage: 16 GiB used, 143 GiB / 160 GiB avail
pgs: 65 active+clean
# 7、使用普通使用者對映rbd
ubuntu@ceph-client:~$ sudo rbd device map --pool rbd-pool-1 --image rbd-img-1 --user alice
/dev/rbd0
ubuntu@ceph-client:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 29G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 20G 0 lvm /
sr0 11:0 1 945M 0 rom
rbd0 252:0 0 3G 0 disk
# 8、格式化並使用
ubuntu@ceph-client:~$ sudo mkfs.ext4 /dev/rbd0
mke2fs 1.44.1 (24-Mar-2018)
Discarding device blocks: done
Creating filesystem with 786432 4k blocks and 196608 inodes
Filesystem UUID: bfcf3ca0-56ae-4cc1-a059-7579c98a4cd8
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
# 建立掛載點
ubuntu@ceph-client:~$ sudo mkdir -p /data
ubuntu@ceph-client:~$ sudo mount /dev/rbd0 /data/
ubuntu@ceph-client:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 954M 0 954M 0% /dev
tmpfs 198M 11M 187M 6% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 20G 5.4G 14G 30% /
tmpfs 986M 0 986M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 986M 0 986M 0% /sys/fs/cgroup
/dev/sda2 976M 150M 759M 17% /boot
tmpfs 198M 0 198M 0% /run/user/1000
/dev/rbd0 2.9G 9.0M 2.8G 1% /data
# 通過nginx設定
ubuntu@ceph-client:~$ sudo apt install -y nginx
ubuntu@ceph-client:~$ cd /data
ubuntu@ceph-client:/data$ sudo mkdir -p www/html
ubuntu@ceph-client:/data$ ls
lost+found www
ubuntu@ceph-client:/data$ cd www/html/
# 一個比較好看的index首頁
ubuntu@ceph-client:/data/www/html$ sudo vim index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<link rel="icon" href="img/avatar.jpg" type="image/x-icon">
<link rel="dns-prefetch" href="/music">
<link rel="dns-prefetch" href="https://azwnini.github.io">
<link rel="dns-prefetch" href="/lab">
<link rel="dns-prefetch" href="/code">
<link rel="prerender" href="/music/index.html">
<link rel="shortcut icon" href="/avatar.jpg">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta content="always" name="referrer">
<meta http-equiv="x-dns-prefetch-control" content="on" />
<title>Arch_Villain的個人主頁</title>
<canvas class="fireworks" style="position: fixed;left: 0;top: 0;z-index: 1; pointer-events: none;" ></canvas>
<script type="text/javascript" src="js/anime.min.js"></script>
<script type="text/javascript" src="js/fireworks.js"></script>
<style type="text/css">
body{font-family: arial, sans-serif;background-color: #ddd;transition:1s;}
.title{position: fixed;bottom: 0;left: 0;text-align: center;width: 100%;color:#454545;}
.nav{overflow:hidden;position: fixed;bottom: 0;left: 0;height: 420px;width: 100%;}
.navs{width: 800px;height: 840px;margin:0 auto;transform-origin:50% 50%;transition: 1s;transform:rotate(0deg);z-index: 0;}
.rotate{animation: rotate1 20s linear infinite;}
.navs li{position: absolute;left: 50%;top: 20px;margin-left: -50px;width: 100px;height: 100px;line-height:100px;transform-origin:50% 400px;text-align: center;
border-radius:5px;transition:border-radius .3s,box-shadow 1s;
box-shadow:0 0px 10px 0 rgba(0, 0, 0, 0.12);
}
.navs li:hover{border-radius:50%;z-index: 1;}
.navs li a:hover{transform:scale(1.1);}
.navs li a{text-decoration: none;color:#fff;font-family:Microsoft YaHei;font-size: 20px;display:inline-block;width: 100%;height: 100%;}
ul,li{margin: 0;padding: 0;list-style:none;}
@keyframes rotate1{
0%{
transform:rotate(0deg);
}
50%{
transform:rotate(180deg);
}
100%{
transform:rotate(360deg);
}
}
/*.resumes{text-align: center;margin-top: 50px;position: relative;z-index: 1;line-height:40px;}
.resumes a{padding:5px 10px;background-color: #fff;text-decoration: none;color:#454545;font-family: microsoft YaHei;}*/
.octicon{vertical-align:middle;vertical-align:text-bottom;padding-right: 5px;width: 22px;height: 22px;}
</style>
</head>
<body>
<div class="nav" id="nav">
<ul class="navs" id="navs"</ul>
</div>
<h1 class="title">Arch_Villain的個人主頁</h1>
<br>
<br>
<br>
<center><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=430 height=86 src="//music.163.com/outchain/player?type=2&id=536622304&auto=1&height=66"></iframe></center>
<!--<div style="
font-family: 微軟雅黑;
font-weight: bold;
color: #fff;
font-size: 60px;
text-align: center;
width:100%;
position: fixed;
bottom:500px">Hello World!</div> -->
<!--div class="resumes">
<a target="_blank" href="http://lmaomaoz.com/resume-md/">web版簡歷</a>
<a target="_blank" href="https://github.com/CheshireJCat/resume-md">github版簡歷</a>
<a target="_blank" href="http://lmaomaoz.com/resume-md/sources/cheshireCat.pdf">pdf版簡歷下載</a>
<br>
<a target="_blank" href="https://github.com/CheshireJCat"><svg aria-hidden="true" class="octicon" version="1.1" viewBox="0 0 16 16"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path></svg>github</a>
<a href="mail:727559597@qq.com"><svg class="octicon" viewBox="0 0 200 200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g class="transform-group"><g transform="scale(0.1953125, 0.1953125)"><path d="M512 63.791885c-247.538793 0-448.208115 200.669322-448.208115 448.208115s200.669322 448.208115 448.208115 448.208115 448.208115-200.669322 448.208115-448.208115S759.538793 63.791885 512 63.791885zM774.58958 323.779198 512.332575 544.363082l-262.240633-220.583884L774.58958 323.779198zM248.078075 342.614172l175.202301 148.376329L248.078075 700.015118 248.078075 342.614172zM268.360004 700.220802l167.104879-197.293435 76.81141 63.081711 76.95058-65.046459 167.096692 199.258183L268.360004 700.220802zM775.921925 700.015118 600.727811 490.9905l175.194114-148.376329L775.921925 700.015118z" fill="#272636"></path></g></g></svg>727559597@qq.com</a>
<br>
<a href="http://lmaomaoz.com/music/" target="_blank">html5 音樂播放器</a>
<a href="http://lmaomaoz.com/lab/css3/animatevideo/" target="_blank">純css3視訊</a>
<a href="http://lmaomaoz.com/lab/canvas/mmd2/index.html" target="_blank">threejs-MMD-loader</a>
</div-->
<script type="text/javascript">
(function(){
function gc(){
return '#'+('00000'+(Math.random()*0x1000000<<0).toString(16)).substr(-6);
}
var data = [['首頁','/home','#afaee8'],['音樂','music','#272626'],['部落格','/','#0eb3af'],['番劇推薦','content/404.html','#40c4ff'],['code','content/404.html','#ee6e73'],['相簿','picture','#bfafa0']];
var max = 12;
if(data.length<max){data = data.concat(data);}
var mode = '<li style="background:{{background}};transform:rotate({{rotate}}deg)" data-index={{index}}><a href="{{href}}">{{word}}</a></li>',
count = data.length,
angle = 360/count,
navs = document.getElementById('navs');
navs.innerHTML = data.concat().map(function(x,i) {
return mode.replace(/{{href}}/g,x[1])
.replace(/{{word}}/g,x[0])
.replace(/{{background}}/g,x[2])
.replace(/{{rotate}}/g,angle*i)
.replace(/{{index}}/g,i);
}).join('');
var t = new Date();
var nowData = 0;
var nowAngle = 0;
function scrollFun(event){
var t2 = new Date();
if(t2-t<600){
return false;
}else{
t = t2;
}
var e = event||window.event;
var delta = arguments.length>0?(e.wheelDelta||-e.detail):1;
var d = delta>0?1:-1;
//var nowAngle = navs.style.transform.match(/rotate\((-?\d+)deg\)/);
//nowAngle = nowAngle==null?0:nowAngle[1]*1;
//nowAngle += angle*d;
nowData += -d;
nowData = nowData>max-1?nowData%max:nowData<0?nowData+max:nowData;
nowAngle += angle*d;
navs.style.transform = 'rotate('+nowAngle+'deg)';
document.getElementsByTagName('body')[0].style.background = data[nowData][2];
}
var it = setInterval(scrollFun,2000);
navs.onmouseenter = function(){
//navs.classList.remove('rotate');
clearInterval(it);
};
navs.onmouseleave = function(){
//navs.classList.add('rotate');
it = setInterval(scrollFun,2000);
};
if(document.addEventListener){
document.addEventListener('DOMMouseScroll',scrollFun,false);
}//W3C
window.onmousewheel=document.onmousewheel=scrollFun;//IE/Opera/Chrome
})();
</script>
</body>
</html>
修改 nginx 配置
ubuntu@ceph-client:/data/www/html$ sudo vim /etc/nginx/sites-enabled/default
# 重啟nginx服務
ubuntu@ceph-client:/data/www/html$ sudo /usr/sbin/nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ubuntu@ceph-client:/data/www/html$ sudo systemctl restart nginx
訪問結果
掛載 rbd 之後系統核心會自動載入 libceph.ko 模組
2.3 Ceph FS 使用
ceph FS 即 ceph filesystem,可以實現檔案系統共享功能,客戶端通過 ceph 協議掛載並使用 ceph 叢集作為資料儲存伺服器。
Ceph FS 需要執行 Meta Data Services(MDS)服務,其守護程式為 ceph-mds,ceph-mds 程式管 理與 cephFS 上儲存的檔案相關的後設資料,並協調對 ceph 儲存叢集的訪問。
cephfs 的後設資料使用的動態子樹分割槽,把後設資料劃分名稱空間對應到不同的 mds,寫入後設資料 的時候將後設資料按照名稱儲存到不同主 mds 上,有點類似於 nginx 中的快取目錄分層一樣.
2.3.1 部署MDS服務
如果要使用 cephFS,需要部署 ceph-mds 服務。這裡將ceph-mds與ceph-mgr部署到一起
ubuntu@ceph-mgr1:~$ sudo apt -y install ceph-mds
ubuntu@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mgr1
root@ceph-mgr1:~# netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 172.31.0.11:3300 0.0.0.0:* LISTEN 1127/ceph-mon
tcp 0 0 172.31.0.11:6789 0.0.0.0:* LISTEN 1127/ceph-mon
tcp 0 0 172.31.0.11:6800 0.0.0.0:* LISTEN 16734/ceph-mds
tcp 0 0 172.31.0.11:6801 0.0.0.0:* LISTEN 16734/ceph-mds
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 1025/systemd-resolv
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1539/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1659/master
tcp6 0 0 :::22 :::* LISTEN 1539/sshd
tcp6 0 0 :::25 :::* LISTEN 1659/master
建立 CephFS metadata 和 data 儲存池
使用 CephFS 之前需要事先於叢集中建立一個檔案系統,併為其分別指定後設資料和資料相關 的儲存池。下面建立一個名為 cephfs 的檔案系統用於測試,它使用 cephfs-metadata 為元數 據儲存池,使用 cephfs-data 為資料儲存池:
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool create cephfs-metadata-pool-1 32 32
pool 'cephfs-metadata-pool-1' created
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool create cephfs-data-pool-1 64 64
pool 'cephfs-data-pool-1' created
建立 cephFS 並驗證
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph fs new cephfs-test-1 cephfs-metadata-pool-1 cephfs-data-pool-1
new fs with metadata pool 7 and data pool 8
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph fs ls
name: cephfs-test-1, metadata pool: cephfs-metadata-pool-1, data pools: [cephfs-data-pool-1 ]
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph fs status cephfs-test-1
cephfs-test-1 - 0 clients
=============
POOL TYPE USED AVAIL
cephfs-metadata-pool-1 metadata 0 45.0G
cephfs-data-pool-1 data 0 45.0G
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph mds stat
cephfs-test-1:1 {0=ceph-mon1=up:active}
建立客戶端賬戶並驗證cephfs
# 建立賬戶
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph auth add client.cephfs-test mon 'allow r' mds 'allow rw' osd 'allow rwx pool=cephfs-data-pool-1'
added key for client.cephfs-test
# 建立金鑰環
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool --create-keyring ceph.client.cephfs-test.keyring
creating ceph.client.cephfs-test.keyring
# 驗證賬戶
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.cephfs-test
exported keyring for client.cephfs-test
[client.cephfs-test]
key = AQBwJiJhJ/N3EBAAMJXwn2zOABiZCj+HDSvqEA==
caps mds = "allow rw"
caps mon = "allow r"
caps osd = "allow rwx pool=cephfs-data-pool-1"
# 寫入金鑰環資訊
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.cephfs-test -o ceph.client.cephfs-test.keyring
exported keyring for client.cephfs-test
# 移動金鑰環到/etc/ceph
ubuntu@ceph-deploy:~/ceph-cluster$ sudo mv ceph.client.cephfs-test.keyring /etc/ceph/
# 拷貝金鑰
root@ceph-deploy:~# sudo ceph auth print-key client.cephfs-test > cephfs-test.key
# 檢視叢集
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph -s --user cephfs-test
cluster:
id: b7c42944-dd49-464e-a06a-f3a466b79eb4
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 9h)
mgr: ceph-mgr1(active, since 33h), standbys: ceph-mgr2
mds: cephfs-test-1:1 {0=ceph-mon1=up:active}
osd: 16 osds: 16 up (since 8h), 16 in (since 8h)
data:
pools: 5 pools, 161 pgs
objects: 58 objects, 75 MiB
usage: 17 GiB used, 143 GiB / 160 GiB avail
pgs: 161 active+clean
# 掛載ceph檔案系統
root@ceph-deploy:~# mount -t ceph -o name=cephfs-test,secretfile=cephfs-test.key 172.31.0.11:6789/ /data2
source mount path was not specified
unable to parse mount source: -22
# 注意別少加冒號吆
root@ceph-deploy:~# mount -t ceph -o name=cephfs-test,secretfile=cephfs-test.key 172.31.0.11:6789:/ /data2
root@ceph-deploy:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 954M 0 954M 0% /dev
tmpfs 198M 11M 187M 6% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 20G 5.5G 14G 30% /
tmpfs 986M 0 986M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 986M 0 986M 0% /sys/fs/cgroup
/dev/sda2 976M 150M 759M 17% /boot
tmpfs 198M 0 198M 0% /run/user/1000
172.31.0.11:6789:/ 46G 0 46G 0% /data2
root@ceph-deploy:~# mkdir -p /data2/www/html/
root@ceph-deploy:~# vim /data2/www/html/index.html
# 將之前的首頁弄過來
root@ceph-deploy:~# vim /etc/nginx/sites-enabled/default
# 修改nginx配置
root /data2/www/html;
# 重啟nginx服務
訪問頁面成功
3. mds高可用
3.1. 新增MDS伺服器
# 當前 ceph mds 叢集狀態
root@ceph-deploy:~# ceph mds stat
cephfs-test-1:1 {0=ceph-mon1=up:active}
# 新增 ceph-mon2、ceph-mon3 作為ceph mds 伺服器
ubuntu@ceph-mon2:~$ sudo apt install ceph-mds -y
ubuntu@ceph-mon3:~$ sudo apt install ceph-mds -y
# 新增 mds 伺服器
ubuntu@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mon2
ubuntu@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mon3
# 檢視狀態,1臺啟用,2臺備份
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph mds stat
cephfs-test-1:1 {0=ceph-mon1=up:active} 2 up:standby
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph fs status
cephfs-test-1 - 1 clients
=============
RANK STATE MDS ACTIVITY DNS INOS
0 active ceph-mon1 Reqs: 0 /s 15 16
POOL TYPE USED AVAIL
cephfs-metadata-pool-1 metadata 2099k 45.0G
cephfs-data-pool-1 data 192k 45.0G
STANDBY MDS
ceph-mon2
ceph-mon3
MDS version: ceph version 15.2.14 (cd3bb7e87a2f62c1b862ff3fd8b1eec13391a5be) octopus (stable)
3.2. 檢視當前檔案系統
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph fs ls
name: cephfs-test-1, metadata pool: cephfs-metadata-pool-1, data pools: [cephfs-data-pool-1 ]
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph fs get cephfs-test-1
Filesystem 'cephfs-test-1' (1)
fs_name cephfs-test-1
epoch 34
flags 12
created 2021-08-22T10:20:06.781676+0000
modified 2021-08-24T13:12:39.190491+0000
tableserver 0
root 0
session_timeout 60
session_autoclose 300
max_file_size 1099511627776
min_compat_client 0 (unknown)
last_failure 0
last_failure_osd_epoch 289
compat compat={},rocompat={},incompat={1=base v0.20,2=client writeable ranges,3=default file layouts on dirs,4=dir inode in separate object,5=mds uses versioned encoding,6=dirfrag is stored in omap,8=no anchor table,9=file layout v2,10=snaprealm v2}
max_mds 1
in 0
up {0=64707}
failed
damaged
stopped
data_pools [8]
metadata_pool 7
inline_data disabled
balancer
standby_count_wanted 1
[mds.ceph-mon1{0:64707} state up:active seq 4 addr [v2:172.31.0.11:6800/1064976942,v1:172.31.0.11:6801/1064976942]]
3.3. 設定多主active
# 現在三臺mds機器,可以設定多主存活
# 設定同時活躍的主 mds 最 大值為 2。
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph fs set cephfs-test-1 max_mds 2
# 驗證
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph mds stat
cephfs-test-1:2 {0=ceph-mon1=up:active,1=ceph-mon3=up:active} 1 up:standby
# 兩個存活,一個備份
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph fs status
cephfs-test-1 - 1 clients
=============
RANK STATE MDS ACTIVITY DNS INOS
0 active ceph-mon1 Reqs: 0 /s 15 16
1 active ceph-mon3 Reqs: 0 /s 10 13
POOL TYPE USED AVAIL
cephfs-metadata-pool-1 metadata 3251k 45.0G
cephfs-data-pool-1 data 192k 45.0G
STANDBY MDS
ceph-mon2
MDS version: ceph version 15.2.14 (cd3bb7e87a2f62c1b862ff3fd8b1eec13391a5be) octopus (stable)
# 可以繼續新增一臺mds作為兩主兩從的架構
ubuntu@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mgr1
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ubuntu/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /usr/bin/ceph-deploy mds create ceph-mgr1
[ceph_deploy.cli][INFO ] ceph-deploy options:
[ceph_deploy.cli][INFO ] username : None
[ceph_deploy.cli][INFO ] verbose : False
[ceph_deploy.cli][INFO ] overwrite_conf : False
[ceph_deploy.cli][INFO ] subcommand : create
[ceph_deploy.cli][INFO ] quiet : False
[ceph_deploy.cli][INFO ] cd_conf : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7f3b6c08ec30>
[ceph_deploy.cli][INFO ] cluster : ceph
[ceph_deploy.cli][INFO ] func : <function mds at 0x7f3b6c06b3d0>
[ceph_deploy.cli][INFO ] ceph_conf : None
[ceph_deploy.cli][INFO ] mds : [('ceph-mgr1', 'ceph-mgr1')]
[ceph_deploy.cli][INFO ] default_release : False
[ceph_deploy.mds][DEBUG ] Deploying mds, cluster ceph hosts ceph-mgr1:ceph-mgr1
[ceph-mgr1][DEBUG ] connection detected need for sudo
[ceph-mgr1][DEBUG ] connected to host: ceph-mgr1
[ceph-mgr1][DEBUG ] detect platform information from remote host
[ceph-mgr1][DEBUG ] detect machine type
[ceph_deploy.mds][INFO ] Distro info: Ubuntu 18.04 bionic
[ceph_deploy.mds][DEBUG ] remote host will use systemd
[ceph_deploy.mds][DEBUG ] deploying mds bootstrap to ceph-mgr1
[ceph-mgr1][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.mds][ERROR ] RuntimeError: config file /etc/ceph/ceph.conf exists with different content; use --overwrite-conf to overwrite
[ceph_deploy][ERROR ] GenericError: Failed to create 1 MDSs
# 上面如果報錯,執行如下命令覆蓋配置:
ubuntu@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf mds create ceph-mgr1
# 我們新增了ceph-mgr1作為mds,看下檔案系統狀態
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph fs status
cephfs-test-1 - 1 clients
=============
RANK STATE MDS ACTIVITY DNS INOS
0 active ceph-mon1 Reqs: 0 /s 15 16
1 active ceph-mon3 Reqs: 0 /s 10 13
POOL TYPE USED AVAIL
cephfs-metadata-pool-1 metadata 3251k 45.0G
cephfs-data-pool-1 data 192k 45.0G
STANDBY MDS
ceph-mon2
ceph-mgr1
MDS version: ceph version 15.2.14 (cd3bb7e87a2f62c1b862ff3fd8b1eec13391a5be) octopus (stable)
3.4. 設定多mds active加standby
- 高可用優化
目前的狀態是 ceph-mon1 和 ceph-mon3 分別是 active 狀態,ceph-mon2 和 ceph-mgr1 分別處 於 standby 狀態,現在可以將 ceph-mgr1 設定為 ceph-mon1 的 standby,將 ceph-mon3 設定 為 ceph-mon2 的 standby,以實現每個主都有一個固定備份角色的結構,則修改配置檔案如 下:
# 對應關係
ceph-mgr1 => ceph-mon1
ceph-mon3 => ceph-mon2
# 修改 ceph.conf 配置檔案
ubuntu@ceph-deploy:~/ceph-cluster$ cat ceph.conf
[global]
fsid = b7c42944-dd49-464e-a06a-f3a466b79eb4
public_network = 172.31.0.0/24
cluster_network = 192.168.10.0/24
mon_initial_members = ceph-mon1
mon_host = 172.31.0.11
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
[mon]
mon allow pool delete = true
[mds.ceph-mgr1]
mds_standby_for_name = ceph-mon1
mds_standby_replay = true
[mds.ceph-mon3]
mds_standby_for_name = ceph-mon2
mds_standby_replay = true
- 分發配置檔案到mds伺服器並重啟服務
ubuntu@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf config push ceph-{mon1,mon2,mon3,mgr1}
ubuntu@ceph-deploy:~/ceph-cluster$ for node in ceph-{mon1,mon2,mon3,mgr1}; do
ssh $node "sudo systemctl restart ceph-mds@${node}"
done
- ceph叢集 mds 高可用狀態
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph fs status
cephfs-test-1 - 1 clients
=============
RANK STATE MDS ACTIVITY DNS INOS
0 active ceph-mon2 Reqs: 0 /s 18 16
1 active ceph-mon1 Reqs: 0 /s 10 13
POOL TYPE USED AVAIL
cephfs-metadata-pool-1 metadata 3251k 45.0G
cephfs-data-pool-1 data 192k 45.0G
STANDBY MDS
ceph-mon3
ceph-mgr1
MDS version: ceph version 15.2.14 (cd3bb7e87a2f62c1b862ff3fd8b1eec13391a5be) octopus (stable)
# 高可用對應關係如下:
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph fs get cephfs-test-1
4. Ceph Dashboard
Ceph dashboard 是通過一個 web 介面,對已經執行的 ceph 叢集進行狀態檢視及功能配置等 功能,早期 ceph 使用的是第三方的 dashboard 元件,如:
- Calamari
Calamari 對外提供了十分漂亮的 Web 管理和監控介面,以及一套改進的 REST API 介面(不 同於 Ceph 自身的 REST API),在一定程度上簡化了 Ceph 的管理。最初 Calamari 是作為 Inktank 公司的 Ceph 企業級商業產品來銷售,紅帽 2015 年收購 Inktank 後為了更好地推動 Ceph 的 發展,對外宣佈 Calamari 開源。官網地址:https://github.com/ceph/calamari
優點:
管理功能好
介面友好
可以利用它來部署 Ceph 和監控 Ceph
缺點:
非官方
依賴 OpenStack 某些包
- VSM
Virtual Storage Manager (VSM)是 Intel 公司研發並且開源的一款 Ceph 叢集管理和監控軟體, 簡化了一些 Ceph 叢集部署的一些步驟,可以簡單的通過 WEB 頁面來操作。官網地址:https://github.com/intel/virtual-storage-manager
優點:
- 易部署
- 輕量級
- 靈活(可以自定義開發功能)
缺點:
- 監控選項少
- 缺乏 Ceph 管理功能
- Inkscope
Inkscope 是一個 Ceph 的管理和監控系統,依賴於 Ceph 提供的 API,使用 MongoDB 來 儲存實時的監控資料和歷史資訊。官網地址:https://github.com/inkscope/inkscope
優點:
- 易部署
- 輕量級
- 靈活(可以自定義開發功能)
缺點:
- 監控選項少
- 缺乏 Ceph 管理功能
- Ceph-Dash
Ceph-Dash 是用 Python 開發的一個 Ceph 的監控皮膚,用來監控 Ceph 的執行狀態。同時 提供 REST API 來訪問狀態資料。官網地址:http://cephdash.crapworks.de/
優點:
- 易部署
- 輕量級
- 靈活(可以自定義開發功能)
缺點:
- 功能相對簡單
4.1. 啟動 dashboard 外掛
Ceph mgr 是一個多外掛(模組化)的元件,其元件可以單獨的啟用或關閉,星新版本需要安裝 dashboard 安保,而且必須安裝在 mgr 節點,否則報錯如下:
ubuntu@ceph-mgr1:~$ sudo apt-cache madison ceph-mgr-dashboard
ceph-mgr-dashboard | 15.2.14-1bionic | https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-octopus bionic/main amd64 Packages
ubuntu@ceph-mgr1:~$ sudo apt install -y ceph-mgr-dashboard
Reading package lists... Done
Building dependency tree
Reading state information... Done
ceph-mgr-dashboard is already the newest version (15.2.14-1bionic).
ceph-mgr-dashboard set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 7 not upgraded.
# 啟用模組
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph mgr module enable dashboard
4.2. 啟用 dashboard 模組
Ceph dashboard 在 mgr 節點進行開啟設定,並且可以配置開啟或者關閉 SSL
# 關閉 SSL
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph config set mgr mgr/dashboard/ssl false
# 指定 dashboard 監聽地址和埠
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph config set mgr mgr/dashboard/ceph-mgr1/server_addr 172.31.0.14
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph config set mgr mgr/dashboard/ceph-mgr1/server_port 9009
ubuntu@ceph-mgr1:~$ sudo systemctl restart ceph-mgr@ceph-mgr1.service
ubuntu@ceph-mgr1:~$ sudo systemctl status ceph-mgr@ceph-mgr1.service
● ceph-mgr@ceph-mgr1.service - Ceph cluster manager daemon
Loaded: loaded (/lib/systemd/system/ceph-mgr@.service; indirect; vendor preset: enabled)
Active: active (running) since Tue 2021-08-24 15:01:07 UTC; 9s ago
Main PID: 4044 (ceph-mgr)
Tasks: 33 (limit: 2287)
CGroup: /system.slice/system-ceph\x2dmgr.slice/ceph-mgr@ceph-mgr1.service
└─4044 /usr/bin/ceph-mgr -f --cluster ceph --id ceph-mgr1 --setuser ceph --setgroup ceph
Aug 24 15:01:07 ceph-mgr1 systemd[1]: Started Ceph cluster manager daemon.
ubuntu@ceph-mgr1:~$ sudo netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:33807 0.0.0.0:* LISTEN 1444/containerd
tcp 0 0 172.31.0.14:6800 0.0.0.0:* LISTEN 3750/ceph-mds
tcp 0 0 172.31.0.14:9009 0.0.0.0:* LISTEN 4044/ceph-mgr
tcp 0 0 172.31.0.14:6801 0.0.0.0:* LISTEN 3750/ceph-mds
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 1115/systemd-resolv
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1864/sshd
tcp6 0 0 :::22 :::* LISTEN 1864/sshd
4.3. 設定 dashboard 賬戶及密碼
ubuntu@ceph-deploy:~/ceph-cluster$ touch pass.txt
ubuntu@ceph-deploy:~/ceph-cluster$ echo "123456" > pass.txt
ubuntu@ceph-deploy:~/ceph-cluster$ sudo ceph dashboard set-login-credentials admin -i pass.txt
******************************************************************
*** WARNING: this command is deprecated. ***
*** Please use the ac-user-* related commands to manage users. ***
******************************************************************
Username and password updated
- 訪問 Dashboard http://172.31.0.14:9009
本節暫時結束