Ubuntu 18.04.5 LTS Ceph集群之 cephx 認證及使用普通用戶掛載RBD和CephFS


1.cephx認證和授權 

1.1 CephX認證機制

Ceph使用cephx協議對客戶端進行身份認證:
1.每個MON都可以對客戶端進行身份驗正並分發密鑰, 不存在單點故障和性能瓶頸
2. MON會返回用於身份驗正的數據結構, 其包含獲取Ceph服務時用到的session key。
3.session key通過客戶端密鑰進行加密
4.客戶端使用session key向MON請求所需的服務
5.MON向客戶端提供一個ticket, 用於向實際處理數據的OSD等驗正客戶端身份
6.MON和OSD共享同一個secret, 因此OSD會信任由MON發放的ticket
7.ticket存在有效期限
 
注意:
CephX身份驗正功能僅限制Ceph的各組件之間, 它不能擴展到其它非Ceph組件;它並不解決數據傳輸加密的問題;

1.2 認證與授權:

        無論Ceph客戶端是何類型, Ceph都會在存儲池中將所有數據存儲為對象
        Ceph用戶需要擁有存儲池訪問權限才能讀取和寫入數據
        Ceph用戶必須擁有執行權限才能使用Ceph的管理命令
相關概念:
        用戶
        授權
        使能(Capabilities)
 
用戶:
        用戶是指個人或系統參與者( 例如應用)
        通過創建用戶, 可以控制誰( 或哪個參與者) 能夠訪問Ceph存儲集群、 以及可訪問的存儲池及存儲池中的數據。
        Ceph支持多種類型的用戶, 但可管理的用戶都屬於Client類型
        區分用戶類型的原因在於, MON、 OSD和MDS等系統組件也使用cephx協議, 但它們非為客戶端
        通過點號來分隔用戶類型和用戶名, 格式為TYPE.ID, 例如client.admin等
 

1.3 授權和使能

        Ceph基於“使能(caps)”來描述用戶可針對MON、 OSD或MDS使用的權限范圍或級別
        通用語法格式: daemon-type 'allow caps' [...]
MON使能:
        包括r、 w、 x和allow profile cap
        例如: mon 'allow rwx', 以及mon 'allow profile osd'等
OSD使能:
        包括r、 w、 x、 class-read、 class-write和profile osd
        此外, OSD 使能還允許進行存儲池和名稱空間設置
MDS使能:
        只需要allow, 或留空
 

1.4 各項使能的意義:

allow
        需先於守護進程的訪問設置指定
        僅對MDS表示rw之意, 其它的表示字面意義
r:讀取權限, 訪問MON以檢索CRUSH時依賴此使能
w:對象寫入權限
x:調用類方法( 讀取和寫入) 的能力, 以及在MON上執行auth操作的能力
class-read: x能力的子集, 授予用戶調用類讀取方法的能力
class-write: x的子集, 授予用戶調用類寫入方法的能力
*: 授予用戶對特定守護進程/存儲池的讀取、 寫入和執行權限, 以及執行管理命令的能力。
 
profile osd:
        授予用戶以某個OSD身份連接到其他OSD或監視器的權限
        授予OSD權限, 使OSD能夠處理復制檢測信號流量和狀態報告
profile mds:
        授予用戶以某個MDS身份連接到其他MDS或監視器的權限
profile bootstrap-osd:
        授予用戶引導OSD的權限
        授權給部署工具, 使其在引導OSD時有權添加密鑰
profile bootstrap-mds:
        授予用戶引導元數據服務器的權限
        授權給部署工具, 使其在引導元數據服務器時有權添加密鑰
 

1.5 認證和授權過程

1.要使用cephx,管理員必須先設置用戶,創建賬號流程如下:
1.1 client.admin用戶從命令行調用 以生成用戶名和密鑰。
1.2 Ceph 的子系統生成用戶名和密鑰,與監視器(mon)一起存儲副本並將用戶的密鑰傳輸回用戶
1.3 客戶端收到並保存密鑰,這意味着客戶端和mon共享一個密鑰。
ceph auth get-or-create-keyauthclient.admin

 

2.客戶端向mon節點進行身份驗證過程

2.1 客戶端將用戶名(比如:user01)傳遞給mon,mon生成會話密鑰(session_key)並使用與用戶名(user01)關聯的密鑰(創建用戶user01時生成的共享密鑰)對其進行加密,並將加密的數據發送回客戶端。
2.2 客戶端收到后使用共享密鑰解密出會話密鑰(session_key)。(會話密鑰標識當前會話的用戶)
2.3 客戶端使用會話密鑰簽名的用戶向mon請求票證。
2.4 模擬生成票證,用用戶的密鑰對其進行加密,然后將其發送回客戶端。
2.5 客戶端解密票證並使用它來簽署對整個集群的 OSD 和元數據服務器的請求。
3.該cephx協議驗證客戶端機器和 Ceph 服務器之間正在進行的通信。
在初始身份驗證之后,客戶端和服務器之間發送的每條消息都使用票證進行簽名,監視器、OSD 和元數據服務器可以使用它們的共享秘密進行驗證。
這種身份驗證提供的保護是在 Ceph 客戶端和 Ceph 服務器主機之間。身份驗證不會擴展到 Ceph 客戶端之外。如果用戶從遠程主機訪問 Ceph 客戶端,則 Ceph 身份驗證不會應用於用戶主機和客戶端主機之間的連接
 

 1.6 管理用戶

用戶管理功能為 Ceph 存儲集群管理員提供了直接在 Ceph 存儲集群中創建、更新和刪除用戶的能力。
當您在 Ceph 存儲集群中創建或刪除用戶時,您可能需要將密鑰分發給客戶端,以便將它們添加到密鑰環中。有關詳細信息,請參閱 密鑰環管理

1.6.1 列出用戶

要列出集群中的用戶,請執行以下操作:
ceph auth ls
Ceph 將列出集群中的所有用戶:
cephuser@ceph-deploy:~/ceph-cluster$ ceph auth ls

請注意,TYPE.IDusers的表示法適用於osd.0用戶類型osd,其 ID 為0,client.admin用戶類型為 client,其 ID 為admin(即默認client.admin用戶)。另請注意,每個條目都有一個條目,以及一個或多個 條目。key: <value>caps:

您可以使用with 選項將輸出保存到文件中。-o {filename}ceph auth ls
 

1.6.2 查看用戶

要檢索特定用戶、密鑰和功能,請執行以下操作:
ceph auth get {TYPE.ID}
例如:
cephuser@ceph-deploy:~/ceph-cluster$ ceph auth get client.admin
[client.admin] key = AQBy1x1hqZ/xEBAAMTbpjTvoOUJMLZw6YHB63A== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *" 

您還可以使用-o {filename}選項將輸出保存到文件中。開發人員還可以執行以下操作:

cephuser@ceph-deploy:~/ceph-cluster$ ceph auth get client.admin -o c.a.key
exported keyring for client.admin

cephuser@ceph-deploy:~/ceph-cluster$ cat c.a.key
[client.admin] key = AQBy1x1hqZ/xEBAAMTbpjTvoOUJMLZw6YHB63A== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *"

  

還可以使用 export選項 ceph auth export {TYPE.ID}

cephuser@ceph-deploy:~/ceph-cluster$ ceph auth export client.admin
[client.admin] key = AQBy1x1hqZ/xEBAAMTbpjTvoOUJMLZw6YHB63A== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *"
export auth(key=AQBy1x1hqZ/xEBAAMTbpjTvoOUJMLZw6YHB63A==)

 

1.6.3 添加用戶

添加用戶會創建用戶名(即TYPE.ID)、密鑰以及用於創建用戶的命令中包含的任何功能。
用戶的密鑰使用戶能夠通過 Ceph 存儲集群進行身份驗證。用戶的能力授權用戶在 Ceph 監視器 ( mon)、Ceph OSD ( osd) 或 Ceph 元數據服務器 ( mds)上讀取、寫入或執行。
 
添加用戶有以下幾種方式:
  • ceph auth add:此命令是添加用戶的規范方式。它將創建用戶、生成密鑰並添加任何指定的功能。
  • ceph auth get-or-create: 這個命令通常是創建用戶最方便的方式,因為它返回一個包含用戶名(在括號中)和密鑰的密鑰文件格式。如果用戶已存在,此命令僅以密鑰文件格式返回用戶名和密鑰。您可以使用該 選項將輸出保存到文件中。-o {filename}
  • ceph auth get-or-create-key: 此命令是創建用戶並返回用戶密鑰的便捷方式(僅限)。這對於只需要密鑰的客戶端很有用(例如,libvirt)。如果用戶已經存在,則此命令僅返回密鑰。您可以使用該選項將輸出保存到文件中。-o {filename}
 
創建客戶端用戶時,您可以創建一個沒有能力的用戶。一個沒有能力的用戶除了認證是沒有用的,因為客戶端無法從監視器檢索集群映射。但是,如果您希望稍后使用該命令ceph auth caps推遲添加功能
 
一個典型的用戶至少有 Ceph 監視器上的讀取能力和 Ceph OSD 上的讀寫能力。此外,用戶的 OSD 權限通常僅限於訪問特定池。
cephuser@ceph-deploy:~/ceph-cluster$ ceph auth add client.rbduser1 mon 'allow r' osd 'allow rw pool=rbd-test1'
added key for client.rbduser1 

cephuser@ceph-deploy:~/ceph-cluster$ ceph auth get-or-create client.rbduser2 mon 'allow r' osd 'allow rw pool=rbd-test1'
[client.rbduser2] key = AQBP2SVhoQcHDxAAfmq8XkBVAxBCIBi6RHHWkw==

cephuser@ceph-deploy:~/ceph-cluster$ ceph auth get-or-create-key client.rbduser3 mon 'allow r' osd 'allow rw pool=rbd-test1' -o client.rbduser3.key
cephuser@ceph-deploy:~/ceph-cluster$ cat !$
cat client.rbduser3.key
AQCc2SVhNaFMChAAyz+OUTGLKrN9V8dP5BaVcQ==

重要的:如果您為用戶提供 OSD 功能,但您不限制對特定池的訪問,則該用戶將有權訪問集群中的所有池!

 

1.6.4 修改用戶權限

該命令允許您指定用戶並更改用戶的能力。設置新功能將覆蓋當前功能。要查看當前功能,請運行ceph auth get USERTYPE.USERID
 
要添加功能,您還應該在使用表單時指定現有功能:
ceph auth caps USERTYPE.USERID {daemon} 'allow [r|w|x|*|...] [pool={pool-name}] [namespace={namespace-name}]' [{daemon} 'allow [r|w|x|*|...] [pool={pool-name}] [namespace={namespace-name}]']
 
例如:
# client.rbduser1 增加osd的x(執行)權限
cephuser@ceph-deploy:~/ceph-cluster$ ceph auth caps client.rbduser1 mon 'allow r' osd 'allow rwx pool=rbd-test1'
updated caps for client.rbduser1

cephuser@ceph-deploy:~/ceph-cluster$ ceph auth get client.rbduser1
[client.rbduser1] key = AQAp2SVh/mg7BhAAUn1znkL/X9qmMtOW3fBDIg== caps mon = "allow r" caps osd = "allow rwx pool=rbd-test1"
exported keyring for client.rbduser1 # client.rbduser2

# 增加mon的w(寫)權限
cephuser@ceph-deploy:~/ceph-cluster$ ceph auth caps client.rbduser2 mon 'allow rw' osd 'allow rwx pool=rbd-test1'
updated caps for client.rbduser2

cephuser@ceph-deploy:~/ceph-cluster$ ceph auth get client.rbduser2
[client.rbduser2] key = AQBP2SVhoQcHDxAAfmq8XkBVAxBCIBi6RHHWkw== caps mon = "allow rw" caps osd = "allow rwx pool=rbd-test1"
exported keyring for client.rbduser2 # client.rbduser3

# 修改為mon,osd的*(所有)權限
cephuser@ceph-deploy:~/ceph-cluster$ ceph auth caps client.rbduser3 mon 'allow *' osd 'allow *'
updated caps for client.rbduser3

cephuser@ceph-deploy:~/ceph-cluster$ ceph auth get client.rbduser3
[client.rbduser3] key = AQCc2SVhNaFMChAAyz+OUTGLKrN9V8dP5BaVcQ== caps mon = "allow *" caps osd = "allow *"
exported keyring for client.rbduser3

  

1.6.5 刪除用戶

要刪除用戶,請使用:ceph auth del
ceph auth del {TYPE}.{ID}
哪里{TYPE}是一個client,osd,mon,或mds,並且{ID}是用戶名或守護進程的ID。
cephuser@ceph-deploy:~/ceph-cluster$ ceph auth del client.rbduser3

 

1.6.6 打印用戶的密鑰

要將用戶的身份驗證密鑰打印到標准輸出,請執行以下操作:
ceph auth print-key {TYPE}.{ID}
哪里{TYPE}是一個client,osd,mon,或mds,並且{ID}是用戶名或守護進程的ID。
cephuser@ceph-deploy:~/ceph-cluster$ ceph auth print-key client.rbduser1
AQAp2SVh/mg7BhAAUn1znkL/X9qmMtOW3fBDIg==

當您需要使用用戶的密鑰(例如,libvirt)填充客戶端軟件時,打印用戶的密鑰非常有用。

mount -t ceph serverhost:/ mountpoint -o name=client.user,secret=`ceph auth print-key client.user`
 

1.6.7 導入用戶

要導入一個或多個用戶,請使用並指定一個密鑰環:ceph auth import
ceph auth import -i /path/to/keyring
 
可以用於用戶和權限的備份,即便賬號被刪除,也可以通過import文件將用戶恢復,且key不變
# 查看用戶client.rbduser2的key 和權限
cephuser@ceph-deploy:~/ceph-cluster$ ceph auth get client.rbduser2
[client.rbduser2] key = AQBP2SVhoQcHDxAAfmq8XkBVAxBCIBi6RHHWkw== caps mon = "allow rw" caps osd = "allow rwx pool=rbd-test1"

# 將用戶client.rbduser2的key和權限導出到client.rbduser2.keyring文件
cephuser@ceph-deploy:~/ceph-cluster$ ceph auth get client.rbduser2 -o client.rbduser2.keyring 

# 查看導出的文件內容和get 查看的相同
cephuser@ceph-deploy:~/ceph-cluster$ cat !$ cat client.ebduser2.keyring
[client.rbduser2] key = AQBP2SVhoQcHDxAAfmq8XkBVAxBCIBi6RHHWkw== caps mon = "allow rw" caps osd = "allow rwx pool=rbd-test1"

# 刪除client.rbduser2用戶
cephuser@ceph-deploy:~/ceph-cluster$ ceph auth del client.rbduser2 

# 通過導入備份文件恢復用戶及其權限
cephuser@ceph-deploy:~/ceph-cluster$ ceph auth import -i client.ebduser2.keyring

# 驗證恢復后的用戶key、權限和被刪除前一致。
cephuser@ceph-deploy:~/ceph-cluster$ ceph auth get client.rbduser2
[client.rbduser2] key = AQBP2SVhoQcHDxAAfmq8XkBVAxBCIBi6RHHWkw== caps mon = "allow rw" caps osd = "allow rwx pool=rbd-test1" 

  

 

2.普通用戶使用客戶端使用塊存儲

2.1 創建給普通用戶使用的pool,開啟rbd功能,並創建鏡像img

$ ceph osd pool create rbd-test2 16 16
pool 'rbd-test2' created

$ ceph osd pool application enable rbd-test2 rbd
enabled application 'rbd' on pool 'rbd-test2'

$ rbd pool init -p rbd-test2

$ rbd create img-test3 --size 5G --pool rbd-test2 --image-format 2 --image-feature layering 

$ rbd ls --pool rbd-test2
img-test3

  

2.2 創建普通賬戶並授權 

$ ceph auth add client.rbd_user_01 mon 'allow r' osd 'allow rwx pool=rbd-test2'
added key for client.rbd_user_01
 

2.3 導出用戶權限到 keyring 文件

$ ceph auth get client.rbd_user_01 -o ceph.client.rbd_user_01.keyring
exported keyring for client.rbd_user_01

  

2.4 客戶端安裝ceph-common

~# wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | sudo apt-key add -
~# echo "deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main" >> /etc/apt/sources.list
~# apt install ceph-common

  

2.5 同步普通用戶認證文件

$ sscp ceph.conf ceph.client.admin.keyring ceph.client.rbd_user_01.keyring root@client1:/etc/ceph/
ceph.client.rbd_user_01.keyring   

  

2.6 在客戶端上查看映射rbd並映射

root@client1:~# rbd ls --pool rbd-test2
img-test3

root@client1:~# rbd --image img-test3 --pool rbd-test2 info    
rbd image 'img-test3':
        size 5 GiB in 1280 objects
        order 22 (4 MiB objects)
        snapshot_count: 0
        id: d65187c1e104
        block_name_prefix: rbd_data.d65187c1e104
        format: 2
        features: layering
        op_features: 
        flags: 
        create_timestamp: Wed Aug 25 16:25:22 2021
        access_timestamp: Wed Aug 25 16:25:22 2021
        modify_timestamp: Wed Aug 25 16:25:22 2021

root@client1:~# rbd --user rbd_user_01 --pool rbd-test2 map img-test3    
/dev/rbd0
rbd: --user is deprecated, use --id

  

2.7 格式化並掛載 rbd磁盤分區

~# mkfs.xfs /dev/rbd0
~# mount /dev/rbd0 /mnt/rbd0/
~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/rbd0       5.0G   39M  5.0G   1% /mnt/rbd0

 

2.8 卸載並刪除鏡像映射

root@client1:~# umount /mnt/rbd0 
root@client1:~# rbd --user rbd_user_01 --pool rbd-test2 unmap img-test3
rbd: --user is deprecated, use --id

  

2.9 刪除rbd鏡像

cephuser@ceph-deploy:~/ceph-cluster$ rbd rm --pool rbd-test2 --image img-test3
Removing image: 100% complete...done.

  

3.Ceph-FS 文件存儲 

Ceph FS 即ceph filesystem,可以實現文件系統共享功能,客戶端通過ceph 協議掛載並使用ceph 集群作為數據存儲服務器。
Ceph FS 需要運行Meta Data Services(MDS)服務,其守護進程為ceph-mds,ceph-mds 進程管理與cephFS 上存儲的文件相關的元數據,並協調對ceph 存儲集群的訪問。

3.1 部署MDS 服務

3.1.1 所有mds節點安裝ceph-mds

root@mds1:~# wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | sudo apt-key add -
root@mds1:~# echo "deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main" >> /etc/apt/sources.list
root@mds1:~# apt install ceph-mds

 

3.1.2 mds所有節點創建賬號普通賬號並賦予sudo權限

root@mds1:~# groupadd  -r -g 2023 cephuser  && useradd -r -m  -s /bin/bash  -u 2023 -g 2023 cephuser && echo cephuser:sa@123.. | chpasswd
root@mds1:~# echo "cephuser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

 

3.1.3 原集群節點增加mds的hosts配置

192.168.2.61 mds1
192.168.2.62 mds2
192.168.2.64 mds3
192.168.2.64 mds4

 

3.1.4 所有mds節點配置集群中所有節點解析的hosts

192.168.2.2  ceph-deploy
192.168.2.21 mon1
192.168.2.22 mon2
192.168.2.23 mon3
192.168.2.31 mgr1
192.168.2.32 mgr2
192.168.2.41 osd1
192.168.2.42 osd2
192.168.2.43 osd3
192.168.2.44 osd4
192.168.2.50 client1
192.168.2.61 mds1
192.168.2.62 mds2
192.168.2.64 mds3
192.168.2.64 mds4

 

3.1.5 管理節點配置cephuser普通用戶ssh免密ssh信任

$ ssh-copy-id cephuser@mds1
$ ssh-copy-id cephuser@mds2
$ ssh-copy-id cephuser@mds3
$ ssh-copy-id cephuser@mds4

 

3.1.6 同步集群key

$ scp ceph.conf ceph.client.admin.keyring root@mds1:/etc/ceph/
$ scp ceph.conf ceph.client.admin.keyring root@mds2:/etc/ceph/
$ scp ceph.conf ceph.client.admin.keyring root@mds3:/etc/ceph/
$ scp ceph.conf ceph.client.admin.keyring root@mds4:/etc/ceph/

 

3.1.7 需要單獨安裝Python2

# apt install python2.7 -y
# ln -sv /usr/bin/python2.7 /usr/bin/python2

 

3.1.8 在管理節點部署mds服務

$ ceph-deploy mds create mds1
$ ceph-deploy mds create mds2
$ ceph-deploy mds create mds3
$ ceph-deploy mds create mds4

  

3.2 創建CephFS metadata 和data 存儲池

$ ceph osd pool create cephfs-t1-metadata 32 32
pool 'cephfs-t1-metadata' created

$ ceph osd pool create cephfs-t1-data 64 64
pool 'cephfs-t1-data' created

 

3.3 創建cephFS 並驗證

$ ceph fs new cephfs-t1 cephfs-t1-metadata cephfs-t1-data
new fs with metadata pool 8 and data pool 9

 

3.4 查看文件系統狀態

$ ceph fs status cephfs-t1
cephfs-t1 - 0 clients
=========
RANK  STATE   MDS      ACTIVITY     DNS    INOS   DIRS   CAPS  
 0    active  mds1  Reqs:    0 /s    10     13     12      0   
       POOL           TYPE     USED  AVAIL  
cephfs-t1-metadata  metadata  96.0k   629G  
  cephfs-t1-data      data       0    629G  
STANDBY MDS  
    mds2     
    mds3     
    mds4     
MDS version: ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)
$ ceph fs get cephfs-t1
Filesystem 'cephfs-t1' (1)
fs_name cephfs-t1
epoch   5
flags   12
created 2021-08-26T14:47:28.599590+0800
modified        2021-08-26T14:54:22.906615+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=4983}
failed
damaged
stopped
data_pools      [8]
metadata_pool   7
inline_data     disabled
balancer
standby_count_wanted    1
[mds.mds1{0:4983} state up:active seq 3 addr [v2:192.168.2.61:6800/1159603360,v1:192.168.2.61:6801/1159603360]]

 

3.5 設置處於激活狀態mds 的數量

cephuser@ceph-deploy:~/ceph-cluster$ ceph fs set cephfs-t1 max_mds 2
         
cephuser@ceph-deploy:~/ceph-cluster$ ceph fs status cephfs-t1          
cephfs-t1 - 0 clients
=========
RANK  STATE   MDS      ACTIVITY     DNS    INOS   DIRS   CAPS  
 0    active  mds1  Reqs:    0 /s    10     13     12      0   
 1    active  mds4  Reqs:    0 /s    10     13     12      0   
       POOL           TYPE     USED  AVAIL  
cephfs-t1-metadata  metadata   168k   629G  
  cephfs-t1-data      data       0    629G  
STANDBY MDS  
    mds2     
    mds3     
MDS version: ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)

 

3.6 MDS 高可用優化

目前的狀態是mds1 和mds4 分別是active 狀態,mds2 和mds3 分別處於standby 狀態.
可以將:
mds2 設置為mds1 的standby
mds3 設置為mds4 的standby
以實現每個主都有一個固定備份角色的結構,則修改配置文件如下

$ vim ceph.conf 
[global]
fsid = 54ed6318-9830-4152-917c-f1af7fa1002a
public_network = 192.168.2.0/24
cluster_network = 172.1.0.0/24
mon_initial_members = mon1, mon2, mon3
mon_host = 192.168.2.21,192.168.2.22,192.168.2.23
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

[mds.mds1]
#mds_standby_for_fscid = cephfs-t1
mds_standby_for_name = mds2
mds_standby_replay = true

[mds.mds3]
mds_standby_for_name = mds4
mds_standby_replay = true

 

3.7 分發配置文件並重啟mds服務

$ ceph-deploy --overwrite-conf config push mds1
$ ceph-deploy --overwrite-conf config push mds2
$ ceph-deploy --overwrite-conf config push mds3
$ ceph-deploy --overwrite-conf config push mds4

  

root@mds1:~# systemctl restart ceph-mds@mds1.service 
root@mds2:~# systemctl restart ceph-mds@mds2.service 
root@mds3:~# systemctl restart ceph-mds@mds3.service 
root@mds4:~# systemctl restart ceph-mds@mds4.service 

 

3.8 查看主備狀態

$ ceph fs status       
cephfs-t1 - 0 clients
=========
RANK  STATE   MDS      ACTIVITY     DNS    INOS   DIRS   CAPS  
 0    active  mds4  Reqs:    0 /s    10     13     12      0   
 1    active  mds3  Reqs:    0 /s    10     13     11      0   
       POOL           TYPE     USED  AVAIL  
cephfs-t1-metadata  metadata   168k   629G  
  cephfs-t1-data      data       0    629G  
STANDBY MDS  
    mds2     
    mds1     
MDS version: ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)
問題:
根據配置,預期為mds1 <--> mds2, mds3 <--> md4,重啟了mds服務多長,也沒達到預期的效果。
而且mds服務默認30分鍾內重啟次數不能超過3次,否則需要修改參數。
vim /etc/systemd/system/ceph-mds.target.wants/ ceph-mds@mds1.service
StartLimitBurst=3
StartLimitInterval=30min

 

3.9 給客戶端創建用於cephfs文件系統掛載的普通用戶

# 創建賬號並授權
$ ceph auth add client.cephfs_user02 mon 'allow r' mds 'allow rw' osd 'allow rwx pool=cephfs-t1-data'
added key for client.cephfs_user02

# 創建用keyring 文件
$ ceph auth get client.cephfs_user02 -o ceph.client.cephfs_user02.keyring 
exported keyring for client.cephfs_user02

$ $ ceph auth print-key client.cephfs_user02 > cephfs_user02.key 

 

3.10 客戶端安裝ceph-common

~# wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | sudo apt-key add -
~# echo "deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main" >> /etc/apt/sources.list
~# apt install ceph-common

 

3.11 將生成的cephfs客戶端使用的普通用戶的認證文件同步到客戶端節點

$ scp ceph.conf ceph.client.cephfs_user02.keyring cephfs_user02.key root@client1:/etc/ceph/
root@client1's password: 
ceph.conf                                                                                                                              100%  461   141.0KB/s   00:00    
ceph.client.cephfs_user02.keyring                                                                                                      100%  160    59.3KB/s   00:00    
cephfs_user02.key                                                                                                                      100%   40    16.3KB/s   00:00     

 

3.12 內核空間掛載ceph-fs

客戶端掛載有兩種方式,一是內核空間一是用戶空間,內核空間掛載需要內核支持ceph 模塊,用戶空間掛載需要安裝ceph-fuse

 

3.12.1 客戶端通過key文件掛載

~# mount -t ceph mon1:6789,mon2:6789,mon3:6789:/ /mnt/ceph-fs-t1/ -o name=cephfs_user02,secretfile=/etc/ceph/cephfs_user02.key   
root@client1:/etc/ceph# df -h
Filesystem                                               Size  Used Avail Use% Mounted on
...
192.168.2.21:6789,192.168.2.22:6789,192.168.2.23:6789:/  629G     0  629G   0% /mnt/ceph-fs-t1

root@client1:/etc/ceph# cd /mnt/ceph-fs-t1/

root@client1:/mnt/ceph-fs-t1# dd if=/dev/zero of=/mnt/ceph-fs-t1/file1 bs=4MB count=200
200+0 records in
200+0 records out
800000000 bytes (800 MB, 763 MiB) copied, 0.925139 s, 865 MB/s

root@client1:/mnt/ceph-fs-t1# cp /var/log/syslog .
root@client1:/mnt/ceph-fs-t1# ll
total 781427
drwxr-xr-x 1 root root         3 Aug 26 17:14 ./
drwxr-xr-x 4 root root        36 Aug 26 16:48 ../
-rw-r--r-- 1 root root 800000000 Aug 26 17:14 file1
-rw-r----- 1 root root    180463 Aug 26 17:14 syslog

 

3.12.2 客戶端通過key掛載

root@client1:~# umount /mnt/ceph-fs-t1 
root@client1:~#
root@client1:~# cat /etc/ceph/cephfs_user02.key 
AQCZWidhy8IpKBAA9W1tT45tflTM4bpAuT6mcw==

root@client1:~# mount -t ceph mon1:6789,mon2:6789,mon3:6789:/ /mnt/ceph-fs-t1/ -o name=cephfs_user02,secret=AQCZWidhy8IpKBAA9W1tT45tflTM4bpAuT6mcw==

root@client1:~# cd /mnt/ceph-fs-t1/
root@client1:/mnt/ceph-fs-t1# rm -rf *

 

3.11.3 開機掛載配置

root@client1:~# vim /etc/fstab
root@client1:~# mon1:6789,mon2:6789,mon3:6789:/           /mnt/ceph-fs-t1 ceph    defaults,name=cephfs_user02,secretfile=/etc/ceph/cephfs_user02.key,_netdev 0 0

root@client1:~# mount -a

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM