Ceph(二)

[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 和密鑰交給用戶宇驾。

cephx1

要使用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)行簽名。

cephx2

cephx協(xié)議認(rèn)證client機(jī)器和Ceph服務(wù)器間正在進(jìn)行的通訊汰蓉,二者間認(rèn)證完成后的每條消息都用憑證簽署過绷蹲,Monitor、OSD顾孽、MDS服務(wù)器都可用此共享的密鑰來校驗(yàn)這些消息祝钢。

cephx2

認(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)參與者尿庐。

cephx2

當(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)制文件
  1. 通過密鑰環(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è)備

  1. 創(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
  1. 創(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
  1. 客戶端安裝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/
  1. 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/
  1. 拉伸rbd鏡像空間
cephyd@ceph-deploy:~/ceph-cluster$ rbd resize --pool webpool --image webdataimg1 --size 8G
  1. 卸載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存儲集群的訪問葡缰。

  1. 創(chuàng)建mds服務(wù)
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy mds create ceph-mgr1
  1. 創(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
  1. 創(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)
  1. 查看mds狀態(tài)
cephyd@ceph-deploy:~/ceph-cluster$ sudo ceph mds stat
ydcephfs:1 {0=ceph-mgr1=up:active}
  1. 創(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"
  1. 同步用戶和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
  1. 客戶端驗(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
  1. 內(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高可用

  1. 添加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
  1. 查看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)
  1. 查看當(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]]
  1. 設(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)
  1. 高可用優(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)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末魂贬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子裙顽,更是在濱河造成了極大的恐慌付燥,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愈犹,死亡現(xiàn)場離奇詭異键科,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門勋颖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梆掸,“玉大人,你說我怎么就攤上這事牙言∷崆眨” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵咱枉,是天一觀的道長卑硫。 經(jīng)常有香客問我,道長蚕断,這世上最難降的妖魔是什么欢伏? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮亿乳,結(jié)果婚禮上硝拧,老公的妹妹穿的比我還像新娘。我一直安慰自己葛假,他們只是感情好障陶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著聊训,像睡著了一般抱究。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上带斑,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天鼓寺,我揣著相機(jī)與錄音,去河邊找鬼勋磕。 笑死妈候,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挂滓。 我是一名探鬼主播苦银,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼杂彭!你這毒婦竟也來了墓毒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤亲怠,失蹤者是張志新(化名)和其女友劉穎所计,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體团秽,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡主胧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年叭首,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踪栋。...
    茶點(diǎn)故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡焙格,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夷都,到底是詐尸還是另有隱情眷唉,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布囤官,位于F島的核電站冬阳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏党饮。R本人自食惡果不足惜肝陪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刑顺。 院中可真熱鬧氯窍,春花似錦、人聲如沸蹲堂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贯城。三九已至熊楼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間能犯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工犬耻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留踩晶,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓枕磁,卻偏偏與公主長得像渡蜻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子计济,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容