[TOC]
三削解、Cephx 認(rèn)證
為識別用戶并防止中間人攻擊像吻,Ceph用cephx認(rèn)證系統(tǒng)來認(rèn)證用戶和守護(hù)進(jìn)程啼器。
注: cephx協(xié)議不解決傳輸加密(如SSL/TLS)窥岩、或者存儲加密問題披诗。
Cephx用共享密鑰來認(rèn)證撬即,Client和Monitor集群各自都有client密鑰的副本。這樣的認(rèn)證協(xié)議使雙方不用提供密鑰就能相互認(rèn)證呈队,就是說集群確信用戶擁有密鑰剥槐、而且用戶相信集群有密鑰的副本。
Ceph的一個關(guān)鍵可伸縮性特性是避免Ceph對象存儲的集中接口宪摧,這就要求Ceph client必須能夠直接與osd交互粒竖。Ceph通過cephx認(rèn)證系統(tǒng)保護(hù)數(shù)據(jù),它也認(rèn)證運(yùn)行Ceph client的用戶几于。
3.1 授權(quán)流程
用戶通過Ceph client與Monitor聯(lián)系蕊苗,每個Monitor都可以對用戶進(jìn)行身份認(rèn)證并分發(fā)秘鑰,因此多個Monitor節(jié)點(diǎn)就不存在單點(diǎn)故障和認(rèn)證性能瓶頸沿彭。Monitor會返回用于身份認(rèn)證的數(shù)據(jù)結(jié)構(gòu)朽砰,其中包含獲取ceph服務(wù)時用到的session key,session key通過client秘鑰進(jìn)行加密,秘鑰是在cleint提前配置好的喉刘,/etc/ceph/ceph.client.admin.keyring瞧柔。client使用session key向Monitor請求所需要的服務(wù),Monitor向client提供一個tiket睦裳,用于向?qū)嶋H處理數(shù)據(jù)的OSD等服務(wù)驗(yàn)證客戶端身份非剃,MON和OSD共享同一個secret,因此OSD會信任所有MON發(fā)放的tikettiket存在有效期
3.2 訪問流程
要使用cephx推沸,管理員必須先設(shè)置好用戶备绽。在下面的圖解里,client.admin用戶從命令行調(diào)用ceph auth get-or-create-key 來生成一個用戶及其密鑰鬓催,Ceph的認(rèn)證子系統(tǒng)生成了用戶名和密鑰肺素、副本存到Monitor然后把此用戶的密鑰回傳給client.admin用戶,也就是說client和Monitor共享著相同的密鑰
注: client.admin 用戶必須以安全方式把此用戶 ID 和密鑰交給用戶宇驾。
要使用Monitor進(jìn)行身份驗(yàn)證倍靡,Client將用戶名傳遞給Monitor,Monitor生成會話密鑰并使用與用戶名相關(guān)聯(lián)的密鑰對其進(jìn)行加密课舍。然后塌西,Monitor將加密的憑證傳輸回Client他挎。然后,客戶端使用共享密鑰對有效進(jìn)行解密就可獲取會話密鑰捡需。會話密鑰標(biāo)識當(dāng)前會話的用戶办桨。然后,Client代表用戶請求一張由會話密鑰簽名的憑證站辉。Monitor生成一張憑證呢撞,用用戶的秘密密鑰加密它,并將其傳送回客戶端饰剥。client對憑證進(jìn)行解密殊霞,并使用它對整個集群中的osd和元數(shù)據(jù)服務(wù)器的請求進(jìn)行簽名。
cephx協(xié)議認(rèn)證client機(jī)器和Ceph服務(wù)器間正在進(jìn)行的通訊汰蓉,二者間認(rèn)證完成后的每條消息都用憑證簽署過绷蹲,Monitor、OSD顾孽、MDS服務(wù)器都可用此共享的密鑰來校驗(yàn)這些消息祝钢。
認(rèn)證提供的保護(hù)位于Ceph 客戶端和服務(wù)器間,沒有擴(kuò)展到Ceph客戶端之外岩齿。如果用戶從遠(yuǎn)程主機(jī)訪問Ceph客戶端太颤, Ceph認(rèn)證就不管用了,它不會影響到用戶主機(jī)和客戶端主機(jī)間的通訊盹沈。
3.3 Cephx配置
cephx協(xié)議已默認(rèn)開啟龄章。
執(zhí)行以下步驟在禁用身份驗(yàn)證的集群上啟用cephx。如果您(或您的部署實(shí)用程序)已經(jīng)生成了密鑰乞封,則可以跳過與生成密鑰相關(guān)的步驟做裙。
1. 創(chuàng)建一個client.admin密鑰,并為您的client保存密鑰的副本
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)拧廊、并給它們生成密鑰。
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,用此命令:
cp /tmp/ceph.mon.keyring /var/lib/ceph/mon/ceph-a/keyring
4. 為每個MGR生成密鑰墓卦,{$id}是MGR編號:
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編號:
ceph auth get-or-create osd.{$id} mon 'allow rwx' osd 'allow *' -o /var/lib/ceph/osd/ceph-{$id}/keyring
6. 為每個MDS生成密鑰,{$id}是MDS的標(biāo)識字母:
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認(rèn)證:
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
8. 啟動或重啟Ceph集群
禁用CEPHX
1. 把下列配置加入Ceph配置文件的[global]段下即可禁用cephx認(rèn)證:
auth cluster required = none
auth service required = none
auth client required = none
2. 啟動或重啟Ceph集群
3.4 用戶管理
本節(jié)描述了Ceph客戶端用戶及其在Ceph存儲集群中的認(rèn)證和授權(quán)。用戶可以是個人睁本,也可以是使用Ceph客戶機(jī)與Ceph存儲集群守護(hù)進(jìn)程進(jìn)行交互的應(yīng)用程序等系統(tǒng)參與者尿庐。
當(dāng)Ceph在啟用身份驗(yàn)證和授權(quán)(默認(rèn)情況下啟用)的情況下運(yùn)行時,您必須指定一個用戶名和一個包含指定用戶的密鑰的密匙環(huán)(通常通過命令行)呢堰。如果不指定用戶名抄瑟,Ceph將使用client。默認(rèn)用戶名為Admin暮胧。如果您沒有指定一個keyring, Ceph將通過Ceph配置中的keyring設(shè)置查找一個keyring锐借。例如问麸,如果您在不指定用戶或密匙環(huán)的情況下執(zhí)行ceph health命令:
ceph health
Ceph這樣解釋這個命令:
ceph -n client.admin --keyring=/etc/ceph/ceph.client.admin.keyring health
ceph基于使能/能力(Capabilities往衷,簡稱caps)來描述用戶可針對MON/OSD或MDS使用的授權(quán)范圍或級別。
通用的語法格式:{daemon-type} '{cap-spec}[, {cap-spec} ...]'
能力一覽表:
r:授予用戶讀權(quán)限严卖,需要它才能獲取CRUSH圖
w:授予用戶寫對象的權(quán)限席舍。
x:授予用戶調(diào)用類方法(包括讀取和寫入)的能力,以及在監(jiān)視器中執(zhí)行auth操作的能力哮笆。
*:授予用戶對特定守護(hù)進(jìn)程/存儲池的讀取来颤、寫入和執(zhí)行權(quán)限,以及執(zhí)行管理命令的能力
class-read:授予用戶調(diào)用類讀取方法的能力稠肘,屬于是x能力的子集福铅。
class-write:授予用戶調(diào)用類寫入方法的能力,屬于是x能力的子集项阴。
profile osd:授權(quán)用戶以O(shè)SD身份連接其它OSD或監(jiān)視器滑黔。授予OSD們允許其它OSD處理復(fù)制、心跳流量和狀態(tài)報(bào)告环揽。
profile mds:授予用戶以某個MDS身份連接到其他MDS或監(jiān)視器的權(quán)限略荡。
profile bootstrap-osd:授權(quán)一用戶自舉引導(dǎo)一OSD。授予部署工具歉胶,像ceph-disk汛兜、ceph-deploy等等,這樣它們在自舉引導(dǎo)OSD時就有權(quán)限增加密鑰了通今。
profile bootstrap-mds:授權(quán)一用戶自舉引導(dǎo)一元數(shù)據(jù)服務(wù)器粥谬。授予像 ceph-deploy 一樣的部署工具,這樣它們在自舉引導(dǎo)元數(shù)據(jù)服務(wù)器時就有權(quán)限增加密鑰了辫塌。
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能力還允許進(jìn)行存儲池和名稱空間設(shè)置条篷。
osd 'allowc apability' [pool=poolname] [namespace=namespace-name]
MGR能力:
mgr 'allow rwx'
MDS能力:
只需要allow或空都表示允許僚害。
mds 'allow'
列出用戶
cephyd@ceph-deploy:~$ sudo ceph auth ls
可以結(jié)合使用-o 文件名選項(xiàng)和ceph auth list將輸出保存到某個文件风纠。
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth ls -o ceph.key
添加用戶
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth add client.yd mon 'allow r' osd 'allow rwx pool=ydpool'
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.yd
[client.yd]
key = AQD85yVhu4agORAAxuxlXlEMmfsYzWoQ3t129w==
caps mon = "allow r"
caps osd = "allow rwx pool=ydpool"
exported keyring for client.yd
ceph auth get-or-create
ceph auth get-or-create 此命令是創(chuàng)建用戶較為常見的方式之一亚隙,它會返回包含用戶名(在方括號中)和密鑰的密鑰文宾抓,如果該用戶已存在抑月,此命令只以密鑰文件格式返回用戶名和密鑰树叽,還可以使用 -o 指定文件名選項(xiàng)將輸出保存到某個文件。
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get-or-create client.yda mon 'allow r' osd 'allow rwx pool=ydpool'
[client.yda]
key = AQAZ7SVh3tt0JhAAjvBxwuoxthhqWX+0X8v2NA==
ceph auth get-or-create-key:
此命令是創(chuàng)建用戶并僅返回用戶密鑰谦絮,對于只需要密鑰的客戶端(例如 libvirt)题诵,此命令非 常有用。如果該用戶已存在层皱,此命令只返回密鑰性锭。您可以使用 -o 文件名選項(xiàng)將輸出保存到 某個文件。 創(chuàng)建客戶端用戶時叫胖,可以創(chuàng)建不具有能力的用戶草冈。不具有能力的用戶可以進(jìn)行身份驗(yàn)證,但 不能執(zhí)行其他操作瓮增,此類客戶端無法從監(jiān)視器檢索集群地圖怎棱,但是,如果希望稍后再添加能 力绷跑,可以使用 ceph auth caps 命令創(chuàng)建一個不具有能力的用戶拳恋。 典型的用戶至少對 Ceph monitor 具有讀取功能,并對 Ceph OSD 具有讀取和寫入功能砸捏。此 外谬运,用戶的 OSD 權(quán)限通常限制為只能訪問特定的存儲池。
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get-or-create-key client.yda mon 'allow r' osd 'allow rwx pool=ydpool'
AQAZ7SVh3tt0JhAAjvBxwuoxthhqWX+0X8v2NA==
ceph auth print-key:
只獲取單個指定用戶的key信息
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth print-key client.yda
AQAZ7SVh3tt0JhAAjvBxwuoxthhqWX+0X8v2NA==
ceph auth caps:
使用 ceph auth caps 命令可以指定用戶以及更改該用戶的能力带膜,設(shè)置新能力會完全覆蓋當(dāng)前的能力吩谦,因此要加上之前的用戶已經(jīng)擁有的能和新的能力,如果看當(dāng)前能力膝藕,可以運(yùn)行 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)限:
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.yda
[client.yda]
key = AQAZ7SVh3tt0JhAAjvBxwuoxthhqWX+0X8v2NA==
caps mon = "allow r"
caps osd = "allow rwx pool=ydpool"
exported keyring for client.yda
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth caps client.yda mon 'allow r' osd 'allow rw pool=ydpool'
updated caps for client.yda
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.yda
[client.yda]
key = AQAZ7SVh3tt0JhAAjvBxwuoxthhqWX+0X8v2NA==
caps mon = "allow r"
caps osd = "allow rw pool=ydpool"
exported keyring for client.yda
ceph auth del:
要刪除用戶使用ceph auth del TYPE.ID芭挽,其中TYPE是client滑废、osd、mon或mds之一袜爪,ID是用戶名或守護(hù)進(jìn)程的 ID蠕趁。
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth del client.yda
3.5 密鑰環(huán)管理
ceph的密鑰環(huán)是一個保存了secrets、keys辛馆、certificates并且能夠讓客戶端通認(rèn)證訪問ceph的keyring file(集合文件)俺陋,一個keyring file可以保存一個或者多個認(rèn)證信息豁延,每一個key都有一個實(shí)體名稱加權(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 #編譯后的二進(jìn)制文件
- 通過密鑰環(huán)文件備份與恢復(fù)用戶:
使用ceph auth add等命令添加的用戶還需要額外使用ceph-authtool命令為其創(chuàng)建用戶密鑰環(huán)文件袋狞。
創(chuàng)建keyring文件命令格式:ceph-authtool --create-keyring FILE
將用戶信息導(dǎo)出至keyring文件,對用戶信息進(jìn)行備份映屋。
1. 創(chuàng)建用戶
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get-or-create client.user mon 'allow r' osd 'allow * pool=ydpool'
[client.user]
key = AQCWEiZhxcFGDxAAOkf/oVn0f7ooAEKbzntarA==
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.user
[client.user]
key = AQCWEiZhxcFGDxAAOkf/oVn0f7ooAEKbzntarA==
caps mon = "allow r"
caps osd = "allow * pool=ydpool"
exported keyring for client.user
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool --create-keyring ceph.client.user.keyring
creating ceph.client.user.keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo cat ceph.client.user.keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo file ceph.client.user.keyring
ceph.client.user.keyring: empty
2. 導(dǎo)出keyring到指定文件
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.user -o ceph.client.user.keyring
exported keyring for client.user
cephyd@ceph-deploy:~/ceph-cluster$ sudo cat ceph.client.user.keyring
[client.user]
key = AQCWEiZhxcFGDxAAOkf/oVn0f7ooAEKbzntarA==
caps mon = "allow r"
caps osd = "allow * pool=ydpool"
在創(chuàng)建包含單個用戶的密鑰環(huán)時苟鸯,通常建議使用ceph集群名稱、用戶類型和用戶名及keyring來命名棚点,并將其保存在/etc/ceph目錄中早处。例如為client.user用戶創(chuàng)建ceph.client.user1.keyring。
從keyring文件恢復(fù)用戶認(rèn)證信息
可以使用ceph auth import -i 指定keyring文件并導(dǎo)入到ceph:
cephyd@ceph-deploy:~/ceph-cluster$ sudo cat ceph.client.user.keyring
[client.user]
key = AQCWEiZhxcFGDxAAOkf/oVn0f7ooAEKbzntarA==
caps mon = "allow r"
caps osd = "allow * pool=ydpool"
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth del client.user
updated
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.user
Error ENOENT: failed to find client.user in keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth import -i ceph.client.user.keyring
imported keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.user
[client.user]
key = AQCWEiZhxcFGDxAAOkf/oVn0f7ooAEKbzntarA==
caps mon = "allow r"
caps osd = "allow * pool=ydpool"
exported keyring for client.user
密鑰環(huán)文件多用戶:一個keyring文件中可以包含多個不同用戶的認(rèn)證文件乙濒。
將多用戶導(dǎo)出至密鑰環(huán):
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool --create-keyring ceph.client.yduser.keyring
creating ceph.client.yduser.keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool ./ceph.client.yduser.keyring --import-keyring ./ceph.client.admin.keyring
importing contents of ./ceph.client.admin.keyring into ./ceph.client.yduser.keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool -l ./ceph.client.yduser.keyring
[client.admin]
key = AQDQ1xhh9xhvGRAAikpHkft8EoYRQeLxaTuUbw==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
cephyd@ceph-deploy:~/ceph-cluster$ aut
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool ./ceph.client.yduser.keyring --import-keyring ./ceph.client.user.keyring
importing contents of ./ceph.client.user.keyring into ./ceph.client.yduser.keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool -l ./ceph.client.yduser.keyring
[client.admin]
key = AQDQ1xhh9xhvGRAAikpHkft8EoYRQeLxaTuUbw==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
[client.user]
key = AQCWEiZhxcFGDxAAOkf/oVn0f7ooAEKbzntarA==
caps mon = "allow r"
caps osd = "allow * pool=ydpool"
四陕赃、RDB塊設(shè)備
- 創(chuàng)建pool并啟用rbd/初始化rbd
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool create webpool 32 32
pool 'webpool' created
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool ls
device_health_metrics
ydpool
ydrbd1
webpool
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool application enable webpool rbd
enabled application 'rbd' on pool 'webpool'
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd pool init -p webpool
- 創(chuàng)建img鏡像
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd create webdataimg1 --size 3G -p webpool --image-format 2 --image-feature layering
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd create webdataimg2 --size 5G -p webpool --image-format 2 --image-feature layering
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd ls -p webpool
webdataimg1
webdataimg2
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd ls -p webpool -l
NAME SIZE PARENT FMT PROT LOCK
webdataimg1 3 GiB 2
webdataimg2 5 GiB 2
查看img詳細(xì)信息
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd --image webdataimg1 -p webpool info
rbd image 'webdataimg1':
size 3 GiB in 768 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 1677947bac76
block_name_prefix: rbd_data.1677947bac76
format: 2
features: layering
op_features:
flags:
create_timestamp: Thu Aug 26 11:19:55 2021
access_timestamp: Thu Aug 26 11:19:55 2021
modify_timestamp: Thu Aug 26 11:19:55 2021
cephyd@ceph-deploy:~/ceph-cluster$ sudo rbd --image webdataimg2 -p webpool info
rbd image 'webdataimg2':
size 5 GiB in 1280 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 1680b1ce0101
block_name_prefix: rbd_data.1680b1ce0101
format: 2
features: layering
op_features:
flags:
create_timestamp: Thu Aug 26 11:20:15 2021
access_timestamp: Thu Aug 26 11:20:15 2021
modify_timestamp: Thu Aug 26 11:20:15 2021
- 客戶端安裝ceph
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy install ceph-client1
ceph目錄同步并同步
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy admin ceph-clients
遠(yuǎn)程拷貝yd用戶和ceph.conf文件
cephyd@ceph-deploy:~/ceph-cluster$ sudo scp ceph.client.yd.keyring ceph.conf root@ceph-client1:/etc/ceph/
- client端操作:
驗(yàn)證權(quán)限
root@ceph-client1:~# ceph --user yd -s
使用普通用戶權(quán)限映射
root@ceph-client1:~# rbd --id yd -p webpool device map webdataimg1
格式化并掛載
root@ceph-client1:~# mkfs.ext4 /dev/rbd3
root@ceph-client1:~# mkdir /data3
root@ceph-client1:~# mount /dev/rbd0 /data3/
測試:
root@ceph-client1:~# rbd showmapped
root@ceph-client1:~# cp /var/log/messages /data3/
- 拉伸rbd鏡像空間
cephyd@ceph-deploy:~/ceph-cluster$ rbd resize --pool webpool --image webdataimg1 --size 8G
- 卸載rbd
root@ceph-client1:~# rbd showmapped
root@ceph-client1:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
rbd0 251:0 0 8G 0 disk
vda 252:0 0 40G 0 disk
└─vda1 252:1 0 40G 0 part /
root@ceph-client1:~# sudo rbd --id yd -p webpool device unmap webdataimg1
root@ceph-client1:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 40G 0 disk
└─vda1 252:1 0 40G 0 part /
五卵蛉、 CephFS 文件系統(tǒng)
CephFS即ceph filesystem颁股,可以實(shí)現(xiàn)文件系統(tǒng)共享功能,客戶端通過ceph協(xié)議掛載并使用ceph集群作為數(shù)據(jù)存儲服務(wù)器。CephFS需要運(yùn)行Meta Data Services(MDS)服務(wù)傻丝,其守護(hù)進(jìn)程為ceph-mds甘有,ceph-mds進(jìn)程管理與cephFS上存儲的文件相關(guān)的元數(shù)據(jù),并協(xié)調(diào)對ceph存儲集群的訪問葡缰。
- 創(chuàng)建mds服務(wù)
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mgr1
- 創(chuàng)建CephFS metadata和data存儲池:
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool create ydcephfsmetadata 32 32
pool 'ydcephfsmetadata' created
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool create ydcephfsdata 64 64
pool 'ydcephfsdata' created
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph -s
cluster:
id: 003cb89b-8812-4172-a327-6a774c687c6c
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 10d)
mgr: ceph-mgr1(active, since 11d), standbys: ceph-mgr2
osd: 6 osds: 6 up (since 10d), 6 in (since 10d)
data:
pools: 6 pools, 225 pgs
objects: 143 objects, 454 MiB
usage: 2.8 GiB used, 117 GiB / 120 GiB avail
pgs: 225 active+clean
- 創(chuàng)建文件系統(tǒng)并驗(yàn)證
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph fs new ydcephfs ydcephfsmetadata ydcephfsdata
new fs with metadata pool 5 and data pool 6
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph fs ls
name: ydcephfs, metadata pool: ydcephfsmetadata, data pools: [ydcephfsdata ]
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph fs status ydcephfs
ydcephfs - 0 clients
========
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active ceph-mgr1 Reqs: 0 /s 10 13 12 0
POOL TYPE USED AVAIL
ydcephfsmetadata metadata 96.0k 36.7G
ydcephfsdata data 0 36.7G
MDS version: ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)
- 查看mds狀態(tài)
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph mds stat
ydcephfs:1 {0=ceph-mgr1=up:active}
- 創(chuàng)建客戶端賬號
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth add client.ydfs mon 'allow r' mds 'allow rw' osd 'allow rwx pool=ydcephfsdata'
added key for client.ydfs
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.ydfs
[client.ydfs]
key = AQCKdSdhwMr1FxAAWVYckHtTT7FwlOSccw+iOA==
caps mds = "allow rw"
caps mon = "allow r"
caps osd = "allow rwx pool=ydcephfsdata"
exported keyring for client.ydfs
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph-authtool --create-keyring ceph.client.ydfs.keyring
creating ceph.client.ydfs.keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth get client.ydfs -o ceph.client.ydfs.keyring
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph auth print-key client.ydfs > ydfs.key
cephyd@ceph-deploy:~/ceph-cluster$ sudo cat ceph.client.ydfs.keyring
[client.ydfs]
key = AQCKdSdhwMr1FxAAWVYckHtTT7FwlOSccw+iOA==
caps mds = "allow rw"
caps mon = "allow r"
caps osd = "allow rwx pool=ydcephfsdata"
- 同步用戶和ceph.conf至客戶端
cephyd@ceph-deploy:~/ceph-cluster$ sudo scp ydfs.key ceph.client.ydfs.keyring ceph.conf root@ceph-client1:/etc/ceph/
ceph.client.ydfs.keyring 100% 149 285.8KB/s 00:00
ceph.conf 100% 267 677.0KB/s 00:00
- 客戶端驗(yàn)證
root@ceph-client1:~# ceph --id ydfs -s
cluster:
id: 003cb89b-8812-4172-a327-6a774c687c6c
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 10d)
mgr: ceph-mgr1(active, since 11d), standbys: ceph-mgr2
mds: 1/1 daemons up
osd: 6 osds: 6 up (since 10d), 6 in (since 10d)
data:
volumes: 1/1 healthy
pools: 6 pools, 225 pgs
objects: 165 objects, 454 MiB
usage: 2.8 GiB used, 117 GiB / 120 GiB avail
pgs: 225 active+clean
- 內(nèi)核空間掛載:
root@ceph-client1:~# mount -t ceph 172.26.128.90:6789,172.26.128.91:6789,172.26.128.92:6789:/ /datafs -o name=ydfs,secretfile=/etc/ceph/ydfs.key
root@ceph-client1:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 921M 0 921M 0% /dev
tmpfs 189M 2.9M 187M 2% /run
/dev/vda1 40G 4.3G 34G 12% /
tmpfs 945M 0 945M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 945M 0 945M 0% /sys/fs/cgroup
tmpfs 189M 0 189M 0% /run/user/0
172.26.128.90:6789,172.26.128.91:6789,172.26.128.92:6789:/ 37G 0 37G 0% /datafs
root@ceph-client1:~# cp /var/log/auth.log /datafs/
root@ceph-client1:~# 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.0515362 s, 2.0 GB/s
六 MDS高可用
- 添加MDS服務(wù)器:
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mgr2
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mon2
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mon3
- 查看mds集群當(dāng)前的狀態(tài)
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph mds stat
ydcephfs:1 {0=ceph-mgr1=up:active} 3 up:standby
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph fs status
ydcephfs - 1 clients
========
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active ceph-mgr1 Reqs: 0 /s 12 15 12 3
POOL TYPE USED AVAIL
ydcephfsmetadata metadata 168k 36.4G
ydcephfsdata data 300M 36.4G
STANDBY MDS
ceph-mon2
ceph-mgr2
ceph-mon3
MDS version: ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)
- 查看當(dāng)前文件系統(tǒng)狀態(tài)
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph fs get ydcephfs
Filesystem 'ydcephfs' (1)
fs_name ydcephfs
epoch 4
flags 12
created 2021-08-26T19:01:38.448604+0800
modified 2021-08-26T19:01:39.454954+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=14710}
failed
damaged
stopped
data_pools [6]
metadata_pool 5
inline_data disabled
balancer
standby_count_wanted 1
[mds.ceph-mgr1{0:14710} state up:active seq 184 addr [v2:172.26.128.93:6802/3875272528,v1:172.26.128.93:6803/3875272528]]
- 設(shè)置處于激活狀態(tài)mds的數(shù)量:
目前有四個mds服務(wù)器亏掀,但是有一個主三個備,可以優(yōu)化一下部署架構(gòu)泛释,設(shè)置為為兩主兩備滤愕。
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph fs set ydcephfs max_mds 2
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph fs status
ydcephfs - 1 clients
========
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active ceph-mgr1 Reqs: 0 /s 12 15 12 3
1 active ceph-mon3 Reqs: 0 /s 10 13 11 0
POOL TYPE USED AVAIL
ydcephfsmetadata metadata 240k 36.4G
ydcephfsdata data 300M 36.4G
STANDBY MDS
ceph-mon2
ceph-mgr2
MDS version: ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)
- 高可用優(yōu)化
MDS高可用優(yōu)化: 目前的狀態(tài)是ceph-mgr1和ceph-mon3分別是active狀態(tài),ceph-mon2和 ceph-mgr2分別處于standby狀態(tài)怜校,現(xiàn)在可以將ceph-mgr2設(shè)置為ceph-mgr1的standby间影,將ceph-mon2設(shè)置為ceph-mon3的standby,以實(shí)現(xiàn)每個主都有一個固定備份角色的結(jié)構(gòu)茄茁,則修改配置文件如下:
cephyd@ceph-deploy:~/ceph-cluster$ cat ceph.conf
[global]
fsid = 003cb89b-8812-4172-a327-6a774c687c6c
public_network = 172.26.128.0/20
cluster_network = 172.26.128.0/20
mon_initial_members = ceph-mon1
mon_host = 172.26.128.90
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
[mds.ceph-mgr1]
mds_standby_for_name = ceph-mgr2
mds_standby_replay = true
[mds.ceph-mon2]
mds_standby_for_name = ceph-mon3
mds_standby_replay = true
分發(fā)配置文件
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf config push ceph-mon1
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf config push ceph-mon2
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf config push ceph-mgr1
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf config push ceph-mgr2
重啟服務(wù)
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-mon2 'sudo systemctl restart ceph-mds@ceph-mon2.service'
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-mon3 'sudo systemctl restart ceph-mds@ceph-mon3.service'
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-mgr1 'sudo systemctl restart ceph-mds@ceph-mgr1.service'
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-mgr2 'sudo systemctl restart ceph-mds@ceph-mgr2.service'
查mds集群狀態(tài)
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph fs status
ydcephfs - 1 clients
========
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active ceph-mon2 Reqs: 0 /s 12 15 12 1
1 active ceph-mgr2 Reqs: 0 /s 10 13 11 0
POOL TYPE USED AVAIL
ydcephfsmetadata metadata 240k 36.4G
ydcephfsdata data 300M 36.4G
STANDBY MDS
ceph-mgr1
ceph-mon3
MDS version: ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)