3. Cephx認證
為了識別用戶并防止中間人攻擊,Ceph 提供了 cephx 身份驗證系統(tǒng)來對用戶和守護進程進行身份驗證。
cephx 協(xié)議不解決傳輸中的數(shù)據(jù)加密(例如 SSL/TLS)或靜態(tài)加密。
Cephx 使用共享密鑰進行身份驗證,這意味著客戶端和監(jiān)視器集群都擁有客戶端密鑰的副本。身份驗證協(xié)議使得雙方都能夠向?qū)Ψ阶C明他們擁有密鑰的副本,而無需實際透露它。這提供了相互認證,這意味著集群確信用戶擁有密鑰,并且用戶確信集群擁有密鑰的副本。
Ceph 的一個關(guān)鍵可擴展特性是避免使用集中式接口到 Ceph 對象存儲,這意味著 Ceph 客戶端必須能夠直接與 OSD 交互。為了保護數(shù)據(jù),Ceph 提供了 cephx 身份驗證系統(tǒng),該系統(tǒng)對操作 Ceph 客戶端的用戶進行身份驗證。 cephx 協(xié)議的運行方式類似于 Kerberos。
用戶/參與者調(diào)用 Ceph 客戶端來聯(lián)系監(jiān)視器。與 Kerberos 不同的是,每個監(jiān)視器都可以對用戶進行身份驗證并分發(fā)密鑰,因此在使用 cephx 時不會出現(xiàn)單點故障或瓶頸。監(jiān)視器返回類似于 Kerberos 票證的身份驗證數(shù)據(jù)結(jié)構(gòu),其中包含用于獲取 Ceph 服務(wù)的會話密鑰。這個會話密鑰本身是用用戶的永久秘密密鑰加密的,所以只有用戶才能從 Ceph Monitor(s) 請求服務(wù)。然后客戶端使用會話密鑰從監(jiān)視器請求其所需的服務(wù),監(jiān)視器為客戶端提供一張票證,該票證將向?qū)嶋H處理數(shù)據(jù)的 OSD 驗證客戶端。 Ceph 監(jiān)視器和 OSD 共享一個秘密,因此客戶端可以將監(jiān)視器提供的票證與集群中的任何 OSD 或元數(shù)據(jù)服務(wù)器一起使用。與 Kerberos 一樣,cephx 票證會過期,因此攻擊者無法使用已過期的票證或偷偷獲取的會話密鑰。這種形式的身份驗證將防止有權(quán)訪問通信介質(zhì)的攻擊者以另一個用戶的身份創(chuàng)建虛假消息或更改另一個用戶的合法消息,只要用戶的密鑰在其到期之前不被泄露。
?
3.1 授權(quán)流程
每個 mon 節(jié)點都可以對客戶端進行身份認證并分發(fā)秘鑰,因此多個 mon 節(jié)點就不存在單點 故障和認證性能瓶頸 mon 節(jié)點會返回用于身份認證的數(shù)據(jù)結(jié)構(gòu),其中包含獲取 ceph 服務(wù)時用到的 session key, session key 通 過 客 戶 端 秘 鑰 進 行 加 密 , 秘 鑰 是 在 客 戶 端 提 前 配 置 好 的 , /etc/ceph/ceph.client.admin.keyring 客戶端使用 session key 向 mon 請求所需要的服務(wù),mon 向客戶端提供一個 tiket,用于向 實際處理數(shù)據(jù)的 OSD 等服務(wù)驗證客戶端身份,MON 和 OSD 共享同一個 secret,因此 OSD 會信任所有 MON 發(fā)放的 tiket tiket 存在有效期。
?
3.2 訪問流程
要使用 cephx,管理員必須先設(shè)置用戶。在下圖中,client.admin 用戶從命令行調(diào)用 ceph auth get-or-create-key 來生成用戶名和密鑰。 Ceph 的 auth 子系統(tǒng)生成用戶名和密鑰,將副本與監(jiān)視器一起存儲,并將用戶的秘密傳輸回 client.admin 用戶。這意味著客戶端和監(jiān)視器共享一個密鑰。
client.admin 用戶必須以安全的方式向用戶提供用戶 ID 和密鑰。

為了向監(jiān)視器進行身份驗證,客戶端將用戶名傳遞給監(jiān)視器,監(jiān)視器生成會話密鑰并使用與用戶名關(guān)聯(lián)的密鑰對其進行加密。然后,監(jiān)視器將加密的票發(fā)送回客戶端。然后客戶端使用共享密鑰解密有效負載以檢索會話密鑰。會話密鑰標識當(dāng)前會話的用戶。然后,客戶端代表由會話密鑰簽名的用戶請求票證。監(jiān)視器生成一張票,用用戶的密鑰對其進行加密,然后將其發(fā)送回客戶端??蛻舳私饷芷弊C并使用它來簽署對整個集群的 OSD 和元數(shù)據(jù)服務(wù)器的請求。

cephx 協(xié)議驗證客戶端機器和 Ceph 服務(wù)器之間正在進行的通信。在初始身份驗證之后,客戶端和服務(wù)器之間發(fā)送的每條消息都使用票證進行簽名,監(jiān)視器、OSD 和元數(shù)據(jù)服務(wù)器可以使用它們的共享秘密進行驗證。

此身份驗證提供的保護位于 Ceph 客戶端和 Ceph 服務(wù)器主機之間。身份驗證不會擴展到 Ceph 客戶端之外。如果用戶從遠程主機訪問 Ceph 客戶端,則 Ceph 身份驗證不會應(yīng)用于用戶主機和客戶端主機之間的連接。
有關(guān)配置詳細信息,請參閱 Cephx 配置指南。有關(guān)用戶管理的詳細信息,請參閱用戶管理。
?
3.3 Cephx配置
1. 創(chuàng)建一個client.admin密鑰,并為您的client保存密鑰的副本
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth get-or-create client.admin mon 'allow *' mds 'allow *' mgr 'allow *' osd 'allow *' -o /etc/ceph/ceph.client.admin.keyring
注: 此命令會覆蓋任何存在的 /etc/ceph/client.admin.keyring 文件,如果部署工具已經(jīng)完成此步驟,千萬別再執(zhí)行此命令。多加小心!
2. 創(chuàng)建monitor集群所需的密鑰環(huán)、并給它們生成密鑰。
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
3. 把Monitor密鑰環(huán)復(fù)制到ceph.mon.keyring文件,再把此文件復(fù)制到各monitor的mon data目錄下。比如要把它復(fù)制給名為ceph集群的mon.a,用此命令:
cephadm@ceph-deploy:~/ceph-cluster$ sudo cp /tmp/ceph.mon.keyring /var/lib/ceph/mon/ceph-a/keyring
4. 為每個MGR生成密鑰,{$id}是MGR編號:
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth get-or-create mgr.{$id} mon 'allow profile mgr' mds 'allow *' osd 'allow *' -o /var/lib/ceph/mgr/ceph-{$id}/keyring
5. 為每個OSD生成密鑰,{$id}是OSD編號:
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth get-or-create osd.{$id} mon 'allow rwx' osd 'allow *' -o /var/lib/ceph/osd/ceph-{$id}/keyring
6. 為每個MDS生成密鑰,{$id}是MDS的標識字母:
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth get-or-create mds.{$id} mon 'allow rwx' osd 'allow *' mds 'allow *' mgr 'allow profile mds' -o /var/lib/ceph/mds/ceph-{$id}/keyring
7. 把以下配置加入Ceph配置文件的[global]段下以啟用cephx認證:
cephadm@ceph-deploy:~/ceph-cluster$ sudo auth cluster required = cephx
cephadm@ceph-deploy:~/ceph-cluster$ sudo auth service required = cephx
cephadm@ceph-deploy:~/ceph-cluster$ sudo auth client required = cephx
8. 啟動或重啟Ceph集群
?
3.4 Ceph 的用戶管理
用戶是指個人(ceph 管理者)或系統(tǒng)參與者(MON/OSD/MDS)。
通過創(chuàng)建用戶,可以控制用戶或哪個參與者能夠訪問 ceph 存儲集群、以及可訪問的存儲池
及存儲池中的數(shù)據(jù)。

ceph 支持多種類型的用戶,但可管理的用戶都屬于 client 類型
區(qū)分用戶類型的原因在于,MON/OSD/MDS 等系統(tǒng)組件特使用 cephx 協(xié)議,但是它們?yōu)榉强?br>
戶端。
通過點號來分割用戶類型和用戶名,格式為 TYPE.ID,例如 client.admin。
cephadm@ceph-deploy:~/ceph-cluster$ cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQBPJB1hZHLVNxAAIhqbu3v2WhCx+qHnIeWmlQ==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
查看用戶清單與權(quán)限示例
root@ceph-node1:~# ceph auth ls
osd.0
key: AQDRLB1hG+qjLxAAD6bKt1JczVWDr+2EdLnzMw==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.1
key: AQDgLB1hcmQiDxAACxqF3xkbpH99acyN0SkfGA==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.2
key: AQD0LB1hvr31MhAAjI+t/wpD2F7dfCmmK4ad5A==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.3
key: AQACLR1ht4IlHxAAt/7oQ+sEYCIIAsSiT5ZViA==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
osd.5
key: AQAgLR1h8HNUJxAADNZJUFS/kTWH3JKWnv1rAA==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
client.admin
key: AQBPJB1hZHLVNxAAIhqbu3v2WhCx+qHnIeWmlQ==
caps: [mds] allow *
caps: [mgr] allow *
caps: [mon] allow *
caps: [osd] allow *
client.bootstrap-mds
key: AQBPJB1hPczVNxAAZaXZPI8r+JVS/QNlMB4qNA==
caps: [mon] allow profile bootstrap-mds
client.bootstrap-mgr
key: AQBPJB1hPwHWNxAAxmjhSxNbyHMiOuRWGKvz9w==
caps: [mon] allow profile bootstrap-mgr
client.bootstrap-osd
key: AQBPJB1h8y3WNxAAT2Bsj68aaixBqEwzDHREXA==
caps: [mon] allow profile bootstrap-osd
client.bootstrap-rbd
key: AQBPJB1hIVrWNxAAHl823bH7IMbrwH8CEoEXeA==
caps: [mon] allow profile bootstrap-rbd
client.bootstrap-rbd-mirror
key: AQBPJB1hO4nWNxAAQJ22cxDUjUnD74yZjBdkHw==
caps: [mon] allow profile bootstrap-rbd-mirror
client.bootstrap-rgw
key: AQBPJB1h9LXWNxAA37tJ+CbanpqZbuozYSNyzw==
caps: [mon] allow profile bootstrap-rgw
mgr.ceph-node1
key: AQB8Jh1hrCL5JRAAQ8z12m5fybY+m5crWB9B0w==
caps: [mds] allow *
caps: [mon] allow profile mgr
caps: [osd] allow *
mgr.ceph-node2
key: AQAcMx1hZNR/ExAAYxzUcQKfA50nWAt0o+O2JQ==
caps: [mds] allow *
caps: [mon] allow profile mgr
caps: [osd] allow *
installed auth entries:
授權(quán)類型
allow:在守護進程進行訪問設(shè)置之前就已經(jīng)具有特定權(quán)限,常見于管理員和守護進程用戶。
r:授予用戶讀的權(quán)限,讀取集群各個組件(MON/OSD/MDS/CRUSH/PG)的狀態(tài),但是不能修改。
w:授予用戶寫對象的權(quán)限,與 r 配合使用,修改集群的各個組件的狀態(tài),可以執(zhí)行組件的各個動作指令。
x:授予用戶調(diào)用類方法的能力,僅僅和 ceph auth 操作相關(guān)。
class-read:授予用戶調(diào)用類讀取方法的能力,是 x 的子集。
class-write:授予用戶調(diào)用類寫入方法的能力,是 x 的子集。
*:授予用戶 rwx 權(quán)限。
profile osd:授權(quán)用戶以 OSD 身份連接到其它 OSD 或 MON,使得 OSD 能夠處理副本心跳和狀態(tài)匯報。
profile mds:授權(quán)用戶以 MDS 身份連接其它 MDS 或 MON。
profile bootstrap-osd:授權(quán)用戶引導(dǎo) OSD 守護進程的能力,通常授予部署工具(e.g. ceph-deploy),讓它們在引導(dǎo) OSD 時就有增加密鑰的權(quán)限了。
profile bootstrap-mds:授權(quán)用戶引導(dǎo) MDS 守護進程的能力。同上。
用戶管理常規(guī)操作
Ceph 用戶管理指令 auth:
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth --help
...
auth add <entity> [<caps>...] add auth info for <entity> from input file, or random key if no input is given, and/or any
caps specified in the command
auth caps <entity> <caps>... update caps for <name> from caps specified in the command
auth export [<entity>] write keyring for requested entity, or master keyring if none given
auth get <entity> write keyring file with requested key
auth get-key <entity> display requested key
auth get-or-create <entity> [<caps>...] add auth info for <entity> from input file, or random key if no input given, and/or any caps
specified in the command
auth get-or-create-key <entity> [<caps>...] get, or add, key for <name> from system/caps pairs specified in the command. If key already
exists, any given caps must match the existing caps for that key.
auth import auth import: read keyring file from -i <file>
auth ls list authentication state
auth print-key <entity> display requested key
auth print_key <entity> display requested key
auth rm <entity> remove all caps for <name>
Monitor能力:
包括r/w/x和profile {name}
mon 'allow {access-spec} [network {network/prefix}]'
mon 'profile {name}'
例如:mon 'allow rwx' mon 'allow profile osd'
OSD能力:
包括r、w、x、class-read、class-write(類讀取))和profileosd(類寫入),另外OSD能力還允許進行存儲池和名稱空間設(shè)置。
osd 'allowc apability' [pool=poolname] [namespace=namespace-name]
MGR能力:
mgr 'allow rwx'
MDS能力:
只需要allow或空都表示允許。
mds 'allow'
獲取指定用戶的權(quán)限信息:
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.admin
[client.admin]
key = AQBPJB1hZHLVNxAAIhqbu3v2WhCx+qHnIeWmlQ==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
exported keyring for client.admin
可以結(jié)合使用-o 文件名選項和ceph auth list將輸出保存到某個文件。
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth ls -o ceph.key
installed auth entries:
新建用戶:
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth add client.pop mon 'allow r' osd 'allow rwx pool=popool'
added key for client.pop
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.pop
[client.pop]
key = AQCHBylhqe18MBAAiWjVeYoNoQozvSt0g/xTgQ==
caps mon = "allow r"
caps osd = "allow rwx pool=popool"
exported keyring for client.pop
get-or-create:
ceph auth get-or-create
此命令是創(chuàng)建用戶較為常見的方式之一,它會返回包含用戶名(在方括號中)和密鑰的密鑰文,如果該用戶已存在,此命令只以密鑰文件格式返回用戶名和密鑰,還可以使用 -o 指定文件名選項將輸出保存到某個文件。
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth get-or-create client.pop1 mon 'allow r' osd 'allow rwx pool=popool'
[client.pop1]
key = AQD7BylhZgNpGxAAOD0iSKYjcIWFPA/03AN33w==
get-or-create-key:
ceph auth get-or-create-key
此命令是創(chuàng)建用戶并僅返回用戶密鑰,對于只需要密鑰的客戶端(例如 libvirt),此命令非 常有用。如果該用戶已存在,此命令只返回密鑰。您可以使用 -o 文件名選項將輸出保存到 某個文件。 創(chuàng)建客戶端用戶時,可以創(chuàng)建不具有能力的用戶。不具有能力的用戶可以進行身份驗證,但 不能執(zhí)行其他操作,此類客戶端無法從監(jiān)視器檢索集群地圖,但是,如果希望稍后再添加能 力,可以使用 ceph auth caps 命令創(chuàng)建一個不具有能力的用戶。 典型的用戶至少對 Ceph monitor 具有讀取功能,并對 Ceph OSD 具有讀取和寫入功能。此 外,用戶的 OSD 權(quán)限通常限制為只能訪問特定的存儲池。
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth get-or-create-key client.pop1 mon 'allow r' osd 'allow rwx pool=popool'
AQD7BylhZgNpGxAAOD0iSKYjcIWFPA/03AN33w==
print-key:
ceph auth print-key
只獲取單個指定用戶的key信息
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth print-key client.pop1
AQD7BylhZgNpGxAAOD0iSKYjcIWFPA/03AN33w==
caps:
使用 ceph auth caps 命令可以指定用戶以及更改該用戶的能力,設(shè)置新能力會完全覆蓋當(dāng)前的能力,因此要加上之前的用戶已經(jīng)擁有的能和新的能力,如果看當(dāng)前能力,可以運行 ceph auth get USERTYPE.USERID,如果要添加能力,使用以下格式時還需要指定現(xiàn)有能力:
root # 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]']
查看當(dāng)前用戶權(quán)限:
cephadm@ceph-deploy:~/ceph-cluster$ ceph auth get client.pop1
[client.pop1]
key = AQD7BylhZgNpGxAAOD0iSKYjcIWFPA/03AN33w==
caps mon = "allow r"
caps osd = "allow rwx pool=popool"
exported keyring for client.pop1
更新用戶權(quán)限:
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth caps client.pop1 mon 'allow r' osd 'allow rw pool=popool'
updated caps for client.pop1
del:
ceph auth del
要刪除用戶使用ceph auth del TYPE.ID,其中TYPE是client、osd、mon或mds之一,ID是用戶名或守護進程的 ID。
cephadm@ceph-deploy:~/ceph-cluster$ ceph auth del client.pop1
updated
?
3.5 秘鑰環(huán)管理
ceph 的秘鑰環(huán)是一個保存了 secrets、keys、certificates 并且能夠讓客戶端通認證訪問 ceph
的 keyring file(集合文件),一個 keyring file 可以保存一個或者多個認證信息,每一個 key 都
有一個實體名稱加權(quán)限,類型為:
{client、mon、mds、osd}.name
當(dāng)客戶端訪問 ceph 集群時,ceph 會使用以下四個密鑰環(huán)文件預(yù)設(shè)置密鑰環(huán)設(shè)置:
/etc/ceph/<$cluster name>.<user $type>.<user $id>.keyring #保存單個用戶的 keyring
/etc/ceph/cluster.keyring #保存多個用戶的 keyring
/etc/ceph/keyring #未定義集群名稱的多個用戶的 keyring
/etc/ceph/keyring.bin #編譯后的二進制文
3.5.1 通過秘鑰環(huán)文件備份與恢復(fù)用戶
使用 ceph auth add 等命令添加的用戶還需要額外使用 ceph-authtool 命令為其創(chuàng)建用戶秘鑰
環(huán)文件。
創(chuàng)建 keyring 文件命令格式:
ceph-authtool --create-keyring FILE
導(dǎo)出用戶認證信息至 keyring 文件:
1. 創(chuàng)建用戶
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth get-or-create client.user mon 'allow r' osd 'allow * pool=popool'
[client.user]
key = AQDNDilhhQpbGxAAZHhZdt8W8TIII11/po8Unw==
cephadm@ceph-deploy:~/ceph-cluster$ ceph auth get client.user
[client.user]
key = AQDNDilhhQpbGxAAZHhZdt8W8TIII11/po8Unw==
caps mon = "allow r"
caps osd = "allow * pool=popool"
exported keyring for client.user
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool --create-keyring ceph.client.user.keyring
creating ceph.client.user.keyring
cephadm@ceph-deploy:~/ceph-cluster$ file ceph.client.user.keyring
ceph.client.user.keyring: empty
2. 導(dǎo)出keyring到指定文件
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.user -o ceph.client.user.keyring
exported keyring for client.user
cephadm@ceph-deploy:~/ceph-cluster$ cat ceph.client.user.keyring
[client.user]
key = AQDNDilhhQpbGxAAZHhZdt8W8TIII11/po8Unw==
caps mon = "allow r"
caps osd = "allow * pool=popool"
在創(chuàng)建包含單個用戶的密鑰環(huán)時,通常建議使用ceph集群名稱、用戶類型和用戶名及keyring來命名,并將其保存在/etc/ceph目錄中。例如為client.user用戶創(chuàng)建ceph.client.user1.keyring。
從keyring文件恢復(fù)用戶認證信息:
可以使用ceph auth import -i 指定keyring文件并導(dǎo)入到ceph:
cephadm@ceph-deploy:~/ceph-cluster$ cat ceph.client.user.keyring
[client.user]
key = AQDNDilhhQpbGxAAZHhZdt8W8TIII11/po8Unw==
caps mon = "allow r"
caps osd = "allow * pool=popool"
cephadm@ceph-deploy:~/ceph-cluster$ cat ceph.client.user.keyring
[client.user]
key = AQDNDilhhQpbGxAAZHhZdt8W8TIII11/po8Unw==
caps mon = "allow r"
caps osd = "allow * pool=popool"
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth del client.user
updated
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.user
Error ENOENT: failed to find client.user in keyring
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth import -i ceph.client.user.keyring
imported keyring
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.user
[client.user]
key = AQDNDilhhQpbGxAAZHhZdt8W8TIII11/po8Unw==
caps mon = "allow r"
caps osd = "allow * pool=popool"
exported keyring for client.user
密鑰環(huán)文件多用戶:一個keyring文件中可以包含多個不同用戶的認證文件。
將多用戶導(dǎo)出至密鑰環(huán):
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool --create-keyring ceph.client.popuser.keyring
creating ceph.client.popuser.keyring
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool ./ceph.client.popuser.keyring --import-keyring ./ceph.client.admin.keyring
importing contents of ./ceph.client.admin.keyring into ./ceph.client.popuser.keyring
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool -l ./ceph.client.popuser.keyring
[client.admin]
key = AQBPJB1hZHLVNxAAIhqbu3v2WhCx+qHnIeWmlQ==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool ./ceph.client.popuser.keyring --import-keyring ./ceph.client.user.keyring
importing contents of ./ceph.client.user.keyring into ./ceph.client.popuser.keyring
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool -l ./ceph.client.popuser.keyring
[client.admin]
key = AQBPJB1hZHLVNxAAIhqbu3v2WhCx+qHnIeWmlQ==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
[client.user]
key = AQDNDilhhQpbGxAAZHhZdt8W8TIII11/po8Unw==
caps mon = "allow r"
caps osd = "allow * pool=popool"
?
4. 塊設(shè)備RBD
RBD(RADOS Block Devices)即為塊存儲的一種,RBD 通過 librbd 庫與 OSD 進行交互,RBD 為 KVM 等虛擬化技術(shù)和云服務(wù)(如 OpenStack 和 CloudStack)提供高性能和無限可擴展 性的存儲后端,這些系統(tǒng)依賴于 libvirt 和 QEMU 實用程序與 RBD 進行集成,客戶端基于 librbd 庫即可將 RADOS 存儲集群用作塊設(shè)備,不過,用于 rbd 的存儲池需要事先啟用 rbd 功能并進行初始化。例如,下面的命令創(chuàng)建一個名為 poprbd1 的存儲池,并在啟用 rbd 功能 后對其進行初始化

4.1 創(chuàng)建RBD
創(chuàng)建一個名為poprbd1的存儲池,并在啟用rbd功能后對其進行初始化:
創(chuàng)建存儲池
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool create poprbd1 64 64
pool 'poprbd1' created
開啟rbd功能
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool application enable poprbd1 rbd
enabled application 'rbd' on pool 'poprbd1'
初始化
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd pool init -p poprbd1
?
4.2 創(chuàng)建img
rbd存儲池不能直接用于塊設(shè)備,需要事先在其中按需創(chuàng)建映像(image),并把映像文件作為塊設(shè)備使用,rbd命令可用于創(chuàng)建、查看及刪除塊設(shè)備上在的映像(image),以及克隆映像、創(chuàng)建快照、將映像回滾到快照和查看快照等管理操作。
創(chuàng)建名為popimg1和popimg2的映像:
創(chuàng)建img
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd create popimg1 --size 5G --pool poprbd1
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd create popimg2 --size 3G --pool poprbd1 --image-format 2 --image-feature layering
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd ls --pool poprbd1
popimg1
popimg2
# 后續(xù)步驟會使用popimg2 ,由于centos系統(tǒng)內(nèi)核較低無法掛載使用,因此只開啟部分特性。除了layering其他特性需要高版本內(nèi)核支持
查看信息
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd --image popimg1 --pool poprbd1 info
rbd image 'popimg1':
size 5 GiB in 1280 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 3742307b82eb
block_name_prefix: rbd_data.3742307b82eb
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Thu Aug 19 00:34:26 2021
access_timestamp: Thu Aug 19 00:34:26 2021
modify_timestamp: Thu Aug 19 00:34:26 2021
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd --image popimg2 --pool poprbd1 info
rbd image 'popimg2':
size 3 GiB in 768 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 3745f86a8d86
block_name_prefix: rbd_data.3745f86a8d86
format: 2
features: layering
op_features:
flags:
create_timestamp: Thu Aug 19 00:34:46 2021
access_timestamp: Thu Aug 19 00:34:46 2021
modify_timestamp: Thu Aug 19 00:34:46 2021
?
4.3 客戶端使用存儲
查看ceph存儲狀態(tài)
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph df
--- RAW STORAGE ---
CLASS SIZE AVAIL USED RAW USED %RAW USED
hdd 100 GiB 100 GiB 79 MiB 79 MiB 0.08
TOTAL 100 GiB 100 GiB 79 MiB 79 MiB 0.08
--- POOLS ---
POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
device_health_metrics 1 1 0 B 0 0 B 0 32 GiB
popool 2 32 0 B 0 0 B 0 32 GiB
poprbd1 3 64 405 B 7 48 KiB 0 32 GiB
安裝client端Python2
$ sudo apt install python2.7 -y
$ sudo ln -sv /usr/bin/python2.7 /usr/bin/python2
設(shè)置yum源和ceph源
$ sudo cat <<"EOF">/etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
EOF
$ wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | sudo apt-key add -
$ sudo apt-add-repository 'deb https://mirrors.aliyun.com/ceph/debian-pacific/ bionic main'
$ sudo apt update
給ceph-client創(chuàng)建個用戶掛載
從ceph-deploy安裝ceph并同步認證信息
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph-deploy install --no-adjust-repos --nogpgcheck root@192.168.1.120
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph-deploy admin root@192.168.1.120
cephadm@ceph-deploy:~/ceph-cluster$ sudo ssh root@ceph-client 'sudo apt install acl -y && sudo setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring'
客戶端映射
cephadm@ceph-deploy:~/ceph-cluster$ sudo ssh root@ceph-client
root@ceph-client:~# sudo rbd -p poprbd1 map popimg2
/dev/rbd0
root@ceph-client:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 120G 0 disk
└─sda1 8:1 0 120G 0 part /
sr0 11:0 1 1024M 0 rom
rbd0 252:0 0 3G 0 disk
root@ceph-client:~# sudo fdisk -l /dev/rbd0
Disk /dev/rbd0: 3 GiB, 3221225472 bytes, 6291456 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4194304 bytes / 4194304 bytes
格式化并掛載
root@ceph-client:~# sudo mkfs.ext4 -m0 /dev/rbd0
root@ceph-client:~# sudo mkdir /data
root@ceph-client:~# sudo mount /dev/rbd0 /data/
root@ceph-client:~# sudo cp /var/log/lastlog /data
root@ceph-client:~# sudo df -h
Filesystem Size Used Avail Use% Mounted on
udev 451M 0 451M 0% /dev
tmpfs 97M 9.3M 87M 10% /run
/dev/sda1 120G 5.6G 115G 5% /
tmpfs 482M 0 482M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 482M 0 482M 0% /sys/fs/cgroup
tmpfs 97M 0 97M 0% /run/user/0
/dev/rbd0 2.9G 9.1M 2.9G 1% /data
上傳文件測試
root@ceph-client:~# sudo dd if=/dev/zero of=/data/ceph-test-file bs=1MB count=100
100+0 records in
100+0 records out
100000000 bytes (100 MB, 95 MiB) copied, 0.0620529 s, 1.6 GB/s
root@ceph-client:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 451M 0 451M 0% /dev
tmpfs 97M 9.3M 87M 10% /run
/dev/sda1 120G 5.6G 115G 5% /
tmpfs 482M 0 482M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 482M 0 482M 0% /sys/fs/cgroup
tmpfs 97M 0 97M 0% /run/user/0
/dev/rbd0 2.9G 105M 2.8G 4% /data
root@ceph-client:~# ll -h /data/
total 96M
drwxr-xr-x 3 root root 4.0K Aug 19 01:05 ./
drwxr-xr-x 23 root root 4.0K Aug 19 01:04 ../
-rw-r--r-- 1 root root 96M Aug 19 01:05 ceph-test-file
-rw-r--r-- 1 root root 18M Aug 19 01:04 lastlog
drwx------ 2 root root 16K Aug 19 01:04 lost+found/
root@ceph-client:~# sudo ceph df
--- RAW STORAGE ---
CLASS SIZE AVAIL USED RAW USED %RAW USED
hdd 100 GiB 99 GiB 1.0 GiB 1.0 GiB 1.02
TOTAL 100 GiB 99 GiB 1.0 GiB 1.0 GiB 1.02
--- POOLS ---
POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
device_health_metrics 1 1 0 B 0 0 B 0 31 GiB
popool 2 32 0 B 0 0 B 0 31 GiB
poprbd1 3 64 161 MiB 56 483 MiB 0.50 31 GiB
?
4.4 客戶端使用普通帳號掛載并使用rbd
4.4.1 創(chuàng)建普通帳號并授權(quán)
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth add client.mart mon 'allow r' osd 'allow rwx pool=poprbd1'
added key for client.mart
# 驗證用戶信息
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.mart
[client.mart]
key = AQBxFSlh42klJxAABcLoxydyEj/QseZyec4FgQ==
caps mon = "allow r"
caps osd = "allow rwx pool=poprbd1"
exported keyring for client.mart
# 創(chuàng)建用keyring文件
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool --create-keyring ceph.client.mart.keyring
creating ceph.client.mart.keyring
# 導(dǎo)出用戶keyring
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.mart -o ceph.client.mart.keyring
exported keyring for client.mart
# 驗證指定用戶的 keyring 文件
cephadm@ceph-deploy:~/ceph-cluster$ sudo cat ceph.client.mart.keyring
[client.mart]
key = AQBxFSlh42klJxAABcLoxydyEj/QseZyec4FgQ==
caps mon = "allow r"
caps osd = "allow rwx pool=poprbd1"
4.4.2 同步普通用戶認證文件
cephadm@ceph-deploy:~/ceph-cluster$ sudo scp ceph.conf ceph.client.mart.keyring root@ceph-client:/etc/ceph/
root@ceph-client's password:
ceph.conf 100% 264 19.2KB/s 00:00
ceph.client.mart.keyring 100% 121 33.4KB/s 00:00
4.4.3 在客戶端驗證權(quán)限
root@ceph-client:~# cd /etc/ceph/
root@ceph-client:/etc/ceph# ls
ceph.client.admin.keyring ceph.client.mart.keyring ceph.conf rbdmap tmpmvGMT3
root@ceph-client:/etc/ceph# ceph --user mart -s
cluster:
id: 06d842e1-95c5-442d-b7fe-618050963147
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 105m)
mgr: ceph-node1(active, since 104m), standbys: ceph-node2
osd: 5 osds: 5 up (since 104m), 5 in (since 9d)
data:
pools: 3 pools, 97 pgs
objects: 56 objects, 173 MiB
usage: 586 MiB used, 99 GiB / 100 GiB avail
pgs: 97 active+clean
4.4.4 映射 rbd
root@ceph-client:/etc/ceph# rbd --user mart -p poprbd1 map popimg2
/dev/rbd0
rbd: --user is deprecated, use --id
root@ceph-client:/etc/ceph# fdisk -l /dev/rbd0
Disk /dev/rbd0: 3 GiB, 3221225472 bytes, 6291456 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4194304 bytes / 4194304 bytes
4.4.5 格式化并使用 rbd 鏡像
root@ceph-client:/etc/ceph# mkfs.ext4 /dev/rbd0
mke2fs 1.44.1 (24-Mar-2018)
/dev/rbd0 contains a ext4 file system
last mounted on /data on Thu Aug 19 01:04:46 2021
Proceed anyway? (y,N) y
Discarding device blocks: done
Creating filesystem with 786432 4k blocks and 196608 inodes
Filesystem UUID: 0c99e3b3-5b03-49a7-a3b6-b3ffb77fc2a9
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
root@ceph-client:/etc/ceph# mkdir /data
root@ceph-client:/etc/ceph# mount /dev/rbd0 /data/
root@ceph-client:/etc/ceph# cp /var/log/syslog /data/
root@ceph-client:/etc/ceph# ll /data/
total 6004
drwxr-xr-x 3 root root 4096 Aug 28 00:52 ./
drwxr-xr-x 23 root root 4096 Aug 19 01:04 ../
drwx------ 2 root root 16384 Aug 28 00:51 lost+found/
-rw-r----- 1 root root 6122402 Aug 28 00:52 syslog
root@ceph-client:/etc/ceph# df -Th
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 451M 0 451M 0% /dev
tmpfs tmpfs 97M 9.3M 87M 10% /run
/dev/sda1 xfs 120G 5.6G 115G 5% /
tmpfs tmpfs 482M 0 482M 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 482M 0 482M 0% /sys/fs/cgroup
tmpfs tmpfs 97M 0 97M 0% /run/user/0
/dev/rbd0 ext4 2.9G 15M 2.8G 1% /data
# 管理端驗證鏡像狀態(tài)
root@ceph-client:/etc/ceph# rbd ls -p poprbd1 -l
NAME SIZE PARENT FMT PROT LOCK
popimg1 5 GiB 2
popimg2 3 GiB 2
4.4.6 驗證 ceph 內(nèi)核模塊
掛載 rbd 之后系統(tǒng)內(nèi)核會自動加載 libceph.ko 模塊
root@ceph-client:/etc/ceph# lsmod |grep ceph
libceph 315392 1 rbd
libcrc32c 16384 3 xfs,raid456,libceph
root@ceph-client:/etc/ceph# modinfo libceph
filename: /lib/modules/4.15.0-130-generic/kernel/net/ceph/libceph.ko
license: GPL
description: Ceph core library
author: Patience Warnick <patience@newdream.net>
author: Yehuda Sadeh <yehuda@hq.newdream.net>
author: Sage Weil <sage@newdream.net>
srcversion: 89A5EF37D4AA2C7E073D35B
depends: libcrc32c
retpoline: Y
intree: Y
name: libceph
vermagic: 4.15.0-130-generic SMP mod_unload
signat: PKCS#7
signer:
sig_key:
sig_hashalgo: md4
4.4.7 拉伸rbd鏡像空間
可以擴展空間,不建議縮小空間
# rbd 鏡像空間拉伸命令
cephadm@ceph-deploy:~/ceph-cluster$ rbd help resize
usage: rbd resize [--pool <pool>] [--namespace <namespace>]
[--image <image>] --size <size> [--allow-shrink]
[--no-progress]
<image-spec>
# 命令操作
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd resize --pool poprbd1 --image popimg2 --size 8G
Resizing image: 100% complete...done.
cephadm@ceph-deploy:~/ceph-cluster$ rbd ls -p poprbd1 -l
NAME SIZE PARENT FMT PROT LOCK
popimg1 5 GiB 2
popimg2 8 GiB 2
4.4.8 客戶端驗證鏡像空間
root@ceph-client:/etc/ceph# fdisk -l /dev/rbd0
Disk /dev/rbd0: 8 GiB, 8589934592 bytes, 16777216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4194304 bytes / 4194304 bytes
4.4.9 設(shè)置開機自啟
root@ceph-client:~# cat /etc/rc.local
rbd --user mart -p poprbd1 map popimg2
mount /dev/rbd0 /data/
root@ceph-client:~# chmod +x /etc/rc.local
root@ceph-client:~# reboot
# 查看映射
root@ceph-client:~# rbd showmapped
id pool namespace image snap device
0 poprbd1 popimg2 - /dev/rbd0
# 驗證掛載
root@ceph-client:~# df -Th
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 451M 0 451M 0% /dev
tmpfs tmpfs 97M 9.3M 87M 10% /run
/dev/sda1 xfs 120G 5.6G 115G 5% /
tmpfs tmpfs 482M 0 482M 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 482M 0 482M 0% /sys/fs/cgroup
tmpfs tmpfs 97M 0 97M 0% /run/user/0
/dev/rbd0 ext4 2.9G 15M 2.8G 1% /data
4.4.10 卸載 rbd 鏡像
root@ceph-client:~# umount /data
root@ceph-client:~# rbd --user mart -p poprbd1 unmap popimg2
root@ceph-client:~# rbd showmapped
4.4.11 刪除 rbd 鏡像
鏡像刪除后數(shù)據(jù)也會被刪除而且是無法恢復(fù),因此在執(zhí)行刪除操作的時候要慎重。
cephadm@ceph-deploy:~/ceph-cluster$ rbd help rm
usage: rbd rm [--pool <pool>] [--namespace <namespace>] [--image <image>]
[--no-progress]
<image-spec>
# 刪除存儲池 poprbd1 中的 popimg2
cephadm@ceph-deploy:~/ceph-cluster$ rbd rm --pool poprbd1 --image popimg2
Removing image: 100% complete...done.
4.4.12 rbd 鏡像回收站機制
刪除的鏡像數(shù)據(jù)無法恢復(fù),但是還有另外一種方法可以先把鏡像移動到回收站,后期確認刪
除的時候再從回收站刪除即可.
cephadm@ceph-deploy:~/ceph-cluster$ rbd help trash
status Show the status of this image.
trash list (trash ls) List trash images.
trash move (trash mv) Move an image to the trash.
trash purge Remove all expired images from trash.
trash purge schedule add Add trash purge schedule.
trash purge schedule list (... ls)
List trash purge schedule.
trash purge schedule remove (... rm)
Remove trash purge schedule.
trash purge schedule status Show trash purge schedule status.
trash remove (trash rm) Remove an image from trash.
trash restore Restore an image from trash.
watch Watch events on image.
# 查看鏡像狀態(tài):
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd status --pool poprbd1 --image popimg1
Watchers: none
#將進行移動到回收站:
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd trash move --pool poprbd1 --image popimg1
# 查看回收站的鏡像:
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd trash list --pool poprbd1
3742307b82eb popimg1
#從回收站刪除鏡像
如果鏡像不再使用,可以直接使用 trash remove 將其從回收站刪除
#還原鏡像
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd trash restore --pool poprbd1 --image popimg1
--image-id 3742307b82eb
# 驗證鏡像
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd ls --pool poprbd1 -l
NAME SIZE PARENT FMT PROT LOCK
popimg1 5 GiB 2
?
4.5 鏡像快照
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd help snap
snap create (snap add) #創(chuàng)建快照
snap limit clear #清除鏡像的快照數(shù)量限制
snap limit set #設(shè)置一個鏡像的快照上限
snap list (snap ls) #列出快照
snap protect #保護快照被刪除
snap purge #刪除所有未保護的快照
snap remove (snap rm) #刪除一個快照
snap rename #重命名快照
snap rollback (snap revert) #還原快照
snap unprotect #允許一個快照被刪除(取消快照保護)
4.5.1 客戶端當(dāng)前數(shù)據(jù)
root@ceph-client:~# df -Th
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 451M 0 451M 0% /dev
tmpfs tmpfs 97M 9.3M 87M 10% /run
/dev/sda1 xfs 120G 5.6G 115G 5% /
tmpfs tmpfs 482M 0 482M 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 482M 0 482M 0% /sys/fs/cgroup
tmpfs tmpfs 97M 0 97M 0% /run/user/0
/dev/rbd0 ext4 2.9G 9.0M 2.8G 1% /data
root@ceph-client:~# cp /var/log/syslog /data/
root@ceph-client:~# cp /etc/passwd /data/
root@ceph-client:~# ll /data/
total 6012
drwxr-xr-x 3 root root 4096 Aug 28 01:25 ./
drwxr-xr-x 23 root root 4096 Aug 19 01:04 ../
drwx------ 2 root root 16384 Aug 28 01:24 lost+found/
-rw-r--r-- 1 root root 1630 Aug 28 01:25 passwd
-rw-r----- 1 root root 6125585 Aug 28 01:24 syslog
4.5.2 創(chuàng)建并驗證快照
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd help snap create
usage: rbd snap create [--pool <pool>] [--namespace <namespace>]
[--image <image>] [--snap <snap>] [--skip-quiesce]
[--ignore-quiesce-error] [--no-progress]
<snap-spec>
# 創(chuàng)建快照
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd snap create --pool poprbd1 --image popimg2 --snap img2-snap-2020828
Creating snap: 100% complete...done.
#驗證快照
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd snap list --pool poprbd1 --image popimg2 SNAPID NAME SIZE PROTECTED TIMESTAMP
4 img2-snap-2020828 3 GiB Sat Aug 28 01:27:18 2021
4.5.3 :刪除數(shù)據(jù)并還原快照
# 客戶端刪除數(shù)據(jù)
root@ceph-client:~# rm -fr /data/passwd
# 驗證數(shù)據(jù)
root@ceph-client:~# ll /data/
total 6008
drwxr-xr-x 3 root root 4096 Aug 28 01:28 ./
drwxr-xr-x 23 root root 4096 Aug 19 01:04 ../
drwx------ 2 root root 16384 Aug 28 01:24 lost+found/
-rw-r----- 1 root root 6125585 Aug 28 01:24 syslog
# 卸載 rbd
root@ceph-client:~# umount /data
root@ceph-client:~# rbd unmap /dev/rbd0
# 回滾命令
cephadm@ceph-deploy:~/ceph-cluster$ rbd help snap rollback
usage: rbd snap rollback [--pool <pool>] [--namespace <namespace>]
[--image <image>] [--snap <snap>] [--no-progress]
<snap-spec>
# 回滾快照
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd snap rollback --pool poprbd1 --image popimg2 --snap img2-snap-2020828
Rolling back to snapshot: 100% complete...done.
4.5.4 客戶端驗證數(shù)據(jù)
客戶端需要重新映射并掛載 rbd
root@ceph-client:~# umount /data
root@ceph-client:~# rbd unmap /dev/rbd0
root@ceph-client:~# rbd --user mart -p poprbd1 map popimg2
/dev/rbd0
root@ceph-client:~# mount /dev/rbd0 /data/
root@ceph-client:~# ll /data/
total 6012
drwxr-xr-x 3 root root 4096 Aug 28 01:25 ./
drwxr-xr-x 23 root root 4096 Aug 19 01:04 ../
drwx------ 2 root root 16384 Aug 28 01:24 lost+found/
-rw-r--r-- 1 root root 1630 Aug 28 01:25 passwd
-rw-r----- 1 root root 6125585 Aug 28 01:24 syslog
4.5.5 刪除快照
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd snap remove --pool poprbd1 --image popimg2 --snap img2-snap-2020828
Removing snap: 100% complete...done.
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd list --pool poprbd1 --image popimg2
rbd: unrecognised option '--image'
4.5.6 快照數(shù)量限制
# 設(shè)置與修改快照數(shù)量限制
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd snap limit set --pool poprbd1 --image popimg2 --limit 30
# 清除快照數(shù)量限制
cephadm@ceph-deploy:~/ceph-cluster$ sudo rbd snap limit clear --pool poprbd1 --image popimg2
5. CephFS 文件系統(tǒng)
ceph FS 即 ceph filesystem,可以實現(xiàn)文件系統(tǒng)共享功能,客戶端通過 ceph 協(xié)議掛載并使用
ceph 集群作為數(shù)據(jù)存儲服務(wù)器。
Ceph FS 需要運行 Meta Data Services(MDS)服務(wù),其守護進程為 ceph-mds,ceph-mds 進程管
理與 cephFS 上存儲的文件相關(guān)的元數(shù)據(jù),并協(xié)調(diào)對 ceph 存儲集群的訪問。
cephfs 的元數(shù)據(jù)使用的動態(tài)子樹分區(qū),把元數(shù)據(jù)劃分名稱空間對應(yīng)到不同的 mds,寫入元數(shù)據(jù)
的時候?qū)⒃獢?shù)據(jù)按照名稱保存到不同主 mds 上,有點類似于 nginx 中的緩存目錄分層一樣
?
5.1 部署mds服務(wù)
cephadm@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-node1
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadm/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /usr/bin/ceph-deploy mds create ceph-node1
[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 0x7fb223105be0>
[ceph_deploy.cli][INFO ] cluster : ceph
[ceph_deploy.cli][INFO ] func : <function mds at 0x7fb2230e23d0>
[ceph_deploy.cli][INFO ] ceph_conf : None
[ceph_deploy.cli][INFO ] mds : [('ceph-node1', 'ceph-node1')]
[ceph_deploy.cli][INFO ] default_release : False
[ceph_deploy.mds][DEBUG ] Deploying mds, cluster ceph hosts ceph-node1:ceph-node1
[ceph-node1][DEBUG ] connection detected need for sudo
[ceph-node1][DEBUG ] connected to host: ceph-node1
[ceph-node1][DEBUG ] detect platform information from remote host
[ceph-node1][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-node1
[ceph-node1][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph-node1][WARNIN] mds keyring does not exist yet, creating one
[ceph-node1][DEBUG ] create a keyring file
[ceph-node1][DEBUG ] create path if it doesn't exist
[ceph-node1][INFO ] Running command: sudo ceph --cluster ceph --name client.bootstrap-mds --keyring /var/lib/ceph/bootstrap-mds/ceph.keyring auth get-or-create mds.ceph-node1 osd allow rwx mds allow mon allow profile mds -o /var/lib/ceph/mds/ceph-ceph-node1/keyring
[ceph-node1][INFO ] Running command: sudo systemctl enable ceph-mds@ceph-node1
[ceph-node1][WARNIN] Created symlink /etc/systemd/system/ceph-mds.target.wants/ceph-mds@ceph-node1.service → /lib/systemd/system/ceph-mds@.service.
[ceph-node1][INFO ] Running command: sudo systemctl start ceph-mds@ceph-node1
[ceph-node1][INFO ] Running command: sudo systemctl enable ceph.target
?
5.2 創(chuàng)建CephFS metadata和data存儲池
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool create popcephfsmetadata 32 32
pool 'popcephfsmetadata' created
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool create popcephfsdata 64 64
pool 'popcephfsdata' created
cephadm@ceph-deploy:~/ceph-cluster$ ceph -s
cluster:
id: 06d842e1-95c5-442d-b7fe-618050963147
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 2h)
mgr: ceph-node1(active, since 2h), standbys: ceph-node2
osd: 5 osds: 5 up (since 2h), 5 in (since 9d)
data:
pools: 5 pools, 193 pgs
objects: 34 objects, 83 MiB
usage: 779 MiB used, 99 GiB / 100 GiB avail
pgs: 193 active+clean
?
5.3 創(chuàng)建文件系統(tǒng)并驗證
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool create popcephfsmetadata 32 32
pool 'popcephfsmetadata' created
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool create popcephfsdata 64 64
pool 'popcephfsdata' created
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph fs new popcephfs popcephfsmetadata popcephfsdata
new fs with metadata pool 4 and data pool 5
cephadm@ceph-deploy:~/ceph-cluster$ ceph fs status popcephfs
popcephfs - 0 clients
========
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active ceph-node1 Reqs: 0 /s 10 13 12 0
POOL TYPE USED AVAIL
popcephfsmetadata metadata 96.0k 31.2G
popcephfsdata data 0 31.2G
MDS version: ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)
?
5.4 查看mds狀態(tài)
cephadm@ceph-deploy:~/ceph-cluster$ ceph mds stat
ydcephfs:1 {0=ceph-node1=up:active}
?
5.5 創(chuàng)建普通帳號給客戶端使用
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth add client.popfs mon 'allow r' mds 'allow rw' osd 'allow rwx pool=popcephfsdata'
added key for client.popfs
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.popfs
[client.popfs]
key = AQBZJSlhYMmEFRAARwoUYb3GC3xtwlPRsDF+zw==
caps mds = "allow rw"
caps mon = "allow r"
caps osd = "allow rwx pool=popcephfsdata"
exported keyring for client.popfs
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool --create-keyring ceph.client.popfs.keyring
creating ceph.client.popfs.keyring
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.popfs -o ceph.client.popfs.keyring
exported keyring for client.popfs
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph auth print-key client.popfs > popfs.key
cephadm@ceph-deploy:~/ceph-cluster$ cat ceph.client.popfs.keyring
[client.popfs]
key = AQBZJSlhYMmEFRAARwoUYb3GC3xtwlPRsDF+zw==
caps mds = "allow rw"
caps mon = "allow r"
caps osd = "allow rwx pool=popcephfsdata"
?
5.6 同步用戶key和ceph.conf到客戶端
cephadm@ceph-deploy:~/ceph-cluster$ sudo scp popfs.key ceph.client.popfs.keyring ceph.conf root@ceph-client:/etc/ceph/
root@ceph-client's password:
popfs.key 100% 40 13.3KB/s 00:00
ceph.client.popfs.keyring 100% 151 82.6KB/s 00:00
ceph.conf 100% 264 216.2KB/s 00:00
?
5.7 客戶端驗證
root@ceph-client:~# ceph --id popfs -s
cluster:
id: 06d842e1-95c5-442d-b7fe-618050963147
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 2h)
mgr: ceph-node1(active, since 2h), standbys: ceph-node2
mds: 1/1 daemons up
osd: 5 osds: 5 up (since 2h), 5 in (since 9d)
data:
volumes: 1/1 healthy
pools: 5 pools, 193 pgs
objects: 56 objects, 83 MiB
usage: 780 MiB used, 99 GiB / 100 GiB avail
pgs: 193 active+clean
?
5.8 內(nèi)核空間掛載
root@ceph-client:~# mount -t ceph 172.16.1.100:6789,172.16.1.101:6789,172.16.1.102:6789:/ /datafs -o name=popfs,secretfile=/etc/ceph/popfs.key
root@ceph-client:~# df -Th
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 451M 0 451M 0% /dev
tmpfs tmpfs 97M 9.3M 87M 10% /run
/dev/sda1 xfs 120G 5.6G 115G 5% /
tmpfs tmpfs 482M 0 482M 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 482M 0 482M 0% /sys/fs/cgroup
tmpfs tmpfs 97M 0 97M 0% /run/user/0
/dev/rbd0 ext4 2.9G 15M 2.8G 1% /data
172.16.1.100:6789,172.16.1.101:6789,172.16.1.102:6789:/ ceph 32G 0 32G 0% /datafs
# 測試cephfs讀寫
root@ceph-client:~# cp /var/log/auth.log /datafs/
root@ceph-client:~# dd if=/dev/zero of=/datafs/testfile bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.245453 s, 427 MB/s
?
6. MDS高可用
?
6.1 服務(wù)器添加
cephadm@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-node2
cephadm@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-node3
?
6.2 mds集群狀態(tài)查詢
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph mds stat
ydcephfs:1 {0=ceph-node1=up:active} 2 up:standby
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph fs status
popcephfs - 1 clients
========
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active ceph-node1 Reqs: 0 /s 12 15 12 3
POOL TYPE USED AVAIL
popcephfsmetadata metadata 156k 30.9G
popcephfsdata data 300M 30.9G
STANDBY MDS
ceph-node2
ceph-node3
MDS version: ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)
?
6.3 查看當(dāng)前文件系統(tǒng)狀態(tài)
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph fs get popcephfs
Filesystem 'popcephfs' (1)
fs_name popcephfs
epoch 4
flags 12
created 2021-08-28T01:42:25.994733+0800
modified 2021-08-28T01:42:27.000780+0800
tableserver 0
root 0
session_timeout 60
session_autoclose 300
max_file_size 1099511627776
required_client_features {}
last_failure 0
last_failure_osd_epoch 0
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=24720}
failed
damaged
stopped
data_pools [5]
metadata_pool 4
inline_data disabled
balancer
standby_count_wanted 1
[mds.ceph-node1{0:24720} state up:active seq 50 addr [v2:172.16.1.100:6810/3437198129,v1:172.16.1.100:6811/3437198129]]
?
6.4 設(shè)置處于激活狀態(tài)mds的數(shù)量
目前三個mds服務(wù)器,但是有一個主二個備,可以優(yōu)化一下部署架構(gòu),設(shè)置為兩主一備。
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph fs set popcephfs max_mds 2
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph fs status
popcephfs - 1 clients
========
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active ceph-node1 Reqs: 0 /s 12 15 12 3
1 active ceph-node3 Reqs: 0 /s 10 13 11 0
POOL TYPE USED AVAIL
popcephfsmetadata metadata 228k 30.9G
popcephfsdata data 300M 30.9G
STANDBY MDS
ceph-node2
MDS version: ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)
?
6.5 高可用優(yōu)化
MDS高可用優(yōu)化: 目前的狀態(tài)是ceph-node1和ceph-node3分別是active狀態(tài),ceph-node2處于standby狀態(tài),現(xiàn)在可以將ceph-node2設(shè)置為ceph-node1的standby,如果有多的機器話再增加一臺mds服務(wù)將該服務(wù)器設(shè)置為ceph-node3的standby,以實現(xiàn)每個主都有一個固定備份角色的結(jié)構(gòu),則修改配置文件如下:
cephadm@ceph-deploy:~/ceph-cluster$ cat ceph.conf
[global]
fsid = 06d842e1-95c5-442d-b7fe-618050963147
public_network = 172.16.1.0/24
cluster_network = 192.168.1.0/24
mon_initial_members = ceph-node1
mon_host = 172.16.1.100
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
[mds.ceph-node1]
mds_standby_for_name = ceph-node2
mds_standby_replay = true
[mds.ceph-nodex]
mds_standby_for_name = ceph-node3
mds_standby_replay = true
?
6.6 先各個節(jié)點分發(fā)配置文件
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph-deploy --overwrite-conf config push ceph-node1
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph-deploy --overwrite-conf config push ceph-node2
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph-deploy --overwrite-conf config push ceph-node3
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph-deploy --overwrite-conf config push ceph-nodex
重啟服務(wù)
cephyd@ceph-deploy:~/ceph-cluster$ sudo ssh ceph-node1 'sudo systemctl restart ceph-mds@ceph-node1.service'
cephyd@ceph-deploy:~/ceph-cluster$ sudo ssh ceph-node2 'sudo systemctl restart ceph-mds@ceph-node2.service'
cephyd@ceph-deploy:~/ceph-cluster$ sudo ssh ceph-node3 'sudo systemctl restart ceph-mds@ceph-node3.service'
cephyd@ceph-deploy:~/ceph-cluster$ sudo ssh ceph-node4 'sudo systemctl restart ceph-mds@ceph-nodex.service'
?
6.7 查mds集群狀態(tài)
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph fs status
popcephfs - 1 clients
========
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active ceph-node1 Reqs: 0 /s 12 15 12 1
1 active ceph-node2 Reqs: 0 /s 10 13 11 0
POOL TYPE USED AVAIL
popcephfsmetadata metadata 228k 30.9G
popcephfsdata data 300M 30.9G
STANDBY MDS
ceph-node3
MDS version: ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)