cephadm 離線安裝部署 ceph 集群記錄


我只是簡單的部署測試,並沒有深入的研究相關內容,可能下面的描述並不是准確。

ceph 的中文文檔很不錯,訪問地址: http://docs.ceph.org.cn

1、ceph 架構簡介

先了解下 ceph 基本組成,有一個大概的了解,這部分內容主要摘抄自 ceph 文檔和別人的文章。

以下部分來自:http://docs.ceph.org.cn/start/intro/

不管你是想為雲平台提供Ceph 對象存儲和/或 Ceph 塊設備,還是想部署一個 Ceph 文件系統或者把 Ceph 作為他用,所有 Ceph 存儲集群的部署都始於部署一個個 Ceph 節點、網絡和 Ceph 存儲集群。 Ceph 存儲集群至少需要一個 Ceph Monitor 和兩個 OSD 守護進程。而運行 Ceph 文件系統客戶端時,則必須要有元數據服務器( Metadata Server )。

  • Ceph OSDs: Ceph OSD 守護進程( Ceph OSD )的功能是存儲數據,處理數據的復制、恢復、回填、再均衡,並通過檢查其他OSD 守護進程的心跳來向 Ceph Monitors 提供一些監控信息。當 Ceph 存儲集群設定為有2個副本時,至少需要2個 OSD 守護進程,集群才能達到 active+clean 狀態( Ceph 默認有3個副本,但你可以調整副本數)。
  • Monitors: Ceph Monitor維護着展示集群狀態的各種圖表,包括監視器圖、 OSD 圖、歸置組( PG )圖、和 CRUSH 圖。 Ceph 保存着發生在Monitors 、 OSD 和 PG上的每一次狀態變更的歷史信息(稱為 epoch )。
  • MDSs: Ceph 元數據服務器( MDS )為 Ceph 文件系統存儲元數據(也就是說,Ceph 塊設備和 Ceph 對象存儲不使用MDS )。元數據服務器使得 POSIX 文件系統的用戶們,可以在不對 Ceph 存儲集群造成負擔的前提下,執行諸如 lsfind 等基本命令。

Ceph 把客戶端數據保存為存儲池內的對象。通過使用 CRUSH 算法, Ceph 可以計算出哪個歸置組(PG)應該持有指定的對象(Object),然后進一步計算出哪個 OSD 守護進程持有該歸置組。 CRUSH 算法使得 Ceph 存儲集群能夠動態地伸縮、再均衡和修復。

rados 結構,以下部分來自 https://www.jianshu.com/p/cc3ece850433

一個 Ceph 集群的服務器關系圖,來自 https://docs.switzernet.com/3/public/130910-ceph-dovecot/

更多的內容這里就不轉載了,請直接網絡搜索吧。

參考資料

2、集群節點規划

我這里只是測試一下,所以開了三個虛擬機進行測試。三個虛擬機操作系統都是 CentOS 8。

節點 IP 數據盤(OSD) 角色
ceph-mon1 192.168.122.103 MON、MDS、PROM、GRAFANA
ceph-osd1 192.168.122.200 /dev/vdb1 OSD
ceph-osd2 192.168.122.201 /dev/vdb1 OSD

3、准備工作

先在三台機器上,修改 /etc/hosts 文件,添加下面內容:

# ceph 集群節點主機名對應的 ip,每個節點都需要添加
192.168.122.103 ceph-mon1
192.168.122.200 ceph-osd1 
192.168.122.201 ceph-osd2

然后分別在每個節點機器上,根據節點所承擔的角色設置主機名

# 下面的 ceph-mon1 需要根據實際節點進行確定
hostnamectl set-hostname ceph-mon1

4、使用 cephadm 部署一個 ceph 集群

4.1、離線安裝包

因為后續需要離線部署到實際工作環境中,所以我這里參照網上的部署方案,制作了一個簡單的離線安裝部署包。

安裝包里面的 cephadm 程序被我修改了,將里面的 command_pull 函數里面 cmd 數組中的 'pull' 改為了 'images' 。因為離線部署不需要使用 docker 或者 podman 去實際拉取鏡像,使用本地鏡像即可。

離線安裝包只適合在 CentOS 8 x86_64 下使用,其他系統環境無法兼顧。離線安裝包主要是打包了 podmanpython3smartmontoolschrony 的安裝包,以及 cephadm 及其需要用到的幾個容器鏡像。

cephadm 使用到的鏡像列表如下:

sudo podman images
REPOSITORY                   TAG      IMAGE ID      CREATED        SIZE
quay.ceph.io/ceph-ci/ceph    v17.0.0  fb6c62c88122  11 hours ago   1.14 GB
docker.io/ceph/ceph-grafana  6.7.4    80728b29ad3f  3 months ago   495 MB
docker.io/prom/prometheus    v2.18.1  de242295e225  11 months ago  141 MB
docker.io/prom/alertmanager  v0.20.0  0881eb8f169f  16 months ago  53.5 MB

離線安裝包下載地址:

鏈接: https://pan.baidu.com/s/1zIODZ9cfMVCxLQrU9YRyow 提取碼: cxi5 復制這段內容后打開百度網盤手機App,操作更方便哦

注意,在安裝完成之后,可以將 cephadm 復制到 /usr/bin 目錄下,后續可以直接使用,無需指定路徑。

4.2、在 ceph-mon1 節點進行部署

將上面說的離線安裝包上傳到 ceph-mon1 節點,解壓后進入 ceph_centos8_x86_64 文件夾,執行下面命令進行基礎依賴組件安裝:

# 執行 install.sh 腳本,安裝必要的一些軟件,以及導入鏡像到容器
./install.sh

安裝完成基礎組件后,再執行 cluster.gen.sh 腳本來創建集群,執行的過程中,會要求輸入 MON 節點的 IP,直接輸入后回車即可:

./cluster.gen.sh
... ...

Ceph Monitor維護着展示集群狀態的各種圖表,包括監視器圖、 OSD 圖、歸置組( PG )圖、和 CRUSH 圖。
請輸入 MON (Ceph Monitor) 節點 IP:192.168.122.103

如果執行沒有出錯的話,應該會有類似下面的輸出:

... ...
Enabling firewalld port 8443/tcp in current zone...
Ceph Dashboard is now available at:

	     URL: https://ceph-mon1:8443/
	    User: admin
	Password: j75kmrecsd

You can access the Ceph CLI with:

	sudo ./cephadm shell --fsid be48dd3a-983d-11eb-b776-525400648899 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring

Please consider enabling telemetry to help improve Ceph:

	ceph telemetry on

For more information see:

	https://docs.ceph.com/docs/master/mgr/telemetry/

這表示已經安裝成功了,可以使用瀏覽器打開 https://ceph-mon1:8443/ 進行訪問,用戶名和密碼也在輸出中。

image-20210408164745961

image-20210408173411296

4.3、添加 ceph-ods1、ceph-ods2 節點到集群

4.3.1、集群節點間的 SSH 免密訪問設置

前面安裝過程結束后,會在 /etc/ceph 目錄下生成 ceph.pub 文件,這個是 ssh 創建的公鑰文件,將它上傳到 ceph-ods1ceph-ods2 節點,以便實現 SSH 免密登陸。

ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-osd1
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-osd2

可以使用 ssh-keygen 命令創建新的密鑰對也是可以的。

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:2FaZgTcTf3ol/aafNHh69m9Bb2i8xKiwx8Um6aTtvmw root@ceph-osd1
The key's randomart image is:
+---[RSA 3072]----+
|         .o.     |
|        . +=   . |
|         .+o. o o|
|       o .   o +.|
|      . S  o.+o.+|
|       .. + =.B+o|
|         O = +.*.|
|        o.E   =++|
|         ==. .oo*|
+----[SHA256]-----+

# 創建之后,將 公鑰 拷貝到 ceph-osd1 和 ceph-osd2
ssh-copy-id -f -i /root/.ssh/id_rsa.pub root@ceph-osd1

上面操作只能實現 ceph-mon1 節點免密 SSH 登陸 ceph-osd1(2) 節點,要能夠都互相之間訪問,則需要反過來也操作。

4.3.2、添加節點到集群

下面說的步驟中,直接將離線安裝包拷貝到所有節點上,並執行 install.sh 腳本,就不用麻煩了,可以直接跳到 4.4 的第三個步驟。


注意,下面所說的都是在各個節點分別進行的過程,不是在 ceph-mon1 節點了。

然后將離線安裝包上傳到 ceph-osd1ceph-osd2 節點

scp -r ceph_centos8_x86_64 root@ceph-osd1:/root/
scp -r ceph_centos8_x86_64 root@ceph-osd1:/root/

然后 ssh 登陸到 ceph-osd1ceph-osd2 節點,安裝好 python3

# 這里只記錄對 ceph-osd1 的操作,ceph-osd2 的操作是一樣的
ssh root@ceph-osd1

rpm -Uvh /root/ceph_centos8_x86_64/python3/*.rpm --nodeps
rpm -Uvh /root/ceph_centos8_x86_64/podman/*.rpm --nodeps

# 不安裝 python3 ,添加節點到集群時候會報錯:
#    Error EINVAL: Can't communicate with remote host `192.168.122.200`, 
#    possibly because python3 is not installed there: cannot send (already closed?)
# 不安裝 podman ,添加節點到集群時候會報錯:
#    Error EINVAL: New host ceph-osd1 (192.168.122.200) failed check(s): []

注意:如果不進行上面的安裝操作,將無法將節點添加到集群!

執行完成上面的操作之后,可以回到 ceph-mon1 節點,執行下面的命令將 ceph-osd1ceph-osd2 添加到集群。

# 下面最后的 IP 說是可選項,但是如果加上這個 IP 的話,在我這邊無法將節點加入集群
ceph orch host add ceph-osd1 192.168.122.200
ceph orch host add ceph-osd2 192.168.122.201

image-20210409144121581

上面的標簽是使用下面命令添加的(這是在 ceph-mon1 節點執行的),標簽可以添加也可以移除。

ceph orch host label add ceph-osd1 mgr
ceph orch host label add ceph-osd2 mgr

ceph orch apply mgr label:mgr

4.4、在 ceph-ods1、ceph-ods2 節點安裝 OSDs

下面的操作都是在 ceph-ods1、ceph-ods2 節點進行的,兩個節點都要執行。

4.4.1、依賴項安裝

將離線安裝包里面的 ceph-common chrony 安裝。(如果上面步驟中是執行 install.sh 安裝的,則跳過此步驟)

rpm -Uvh /root/ceph_centos8_x86_64/chrony/*.rpm --nodeps
rpm -Uvh /root/ceph_centos8_x86_64/ceph-common/*.rpm --nodeps

執行上面的操作后,可以執行下 ceph 命令看看是否正常,應該是會報一下錯誤的:

ceph
Error initializing cluster client: ObjectNotFound('RADOS object not found (error calling conf_read_file)',)

這個只需要將 ceph-mon1 節點上的 /etc/ceph/ceph.confceph.client.admin.keyring 文件拷貝到其他節點即可

[root@ceph-mon1 ceph]# scp /etc/ceph/ceph.conf root@ceph-osd1:/etc/ceph/
[root@ceph-mon1 ceph]# scp /etc/ceph/ceph.client.admin.keyring root@ceph-osd1:/etc/ceph/
# 上面命令是在 mon1 節點上操作的,復制到其他節點也是一樣的操作。

然后將 docker.ioquay.ceph.io 里面的容器鏡像導入到 podman。(如果上面步驟中是執行 install.sh 安裝的,則跳過此步驟)

podman load -i quay.ceph.io/ceph-ci/ceph.tar     quay.ceph.io/ceph-ci/ceph:v17.0.0
podman load -i docker.io/ceph/ceph-grafana.tar   docker.io/ceph/ceph-grafana:6.7.4
podman load -i docker.io/prom/prometheus.tar     docker.io/prom/prometheus:v2.18.1
podman load -i docker.io/prom/alertmanager.tar   docker.io/prom/alertmanager:v0.20.0
podman load -i docker.io/prom/node-exporter.tar  docker.io/prom/node-exporter:v0.18.1

4.4.2、添加 OSD 角色(服務)到集群

前面添加了節點到集群,並且也在每個節點都進行必要的依賴項安裝,以及 podman 鏡像的導入,下面可以進行 OSD 角色(服務)的添加了。

在任意節點(因為都已經安裝了 ceph-common,所以那個節點都一樣),

# 在 ceph-osd1 和 ceph-osd2 節點創建 osd 服務
#  注意,下面的  /dev/vdb 是在節點機器上的一個未使用的磁盤

ceph orch daemon add osd ceph-osd1:/dev/vdb
ceph orch daemon add osd ceph-osd2:/dev/vdb

Created osd(s) 1 on host 'ceph-osd2'

# 添加別的角色也是類似的操作,比如添加一個 mon
ceph orch daemon add mon ceph-osd1:192.168.122.200/24

集群-節點主機狀態

集群-OSDs 狀態

查看一下集群狀態:

ceph -s
  cluster:
    id:     be48dd3a-983d-11eb-b776-525400648899
    health: HEALTH_WARN
            clock skew detected on mon.ceph-osd1
            OSD count 2 < osd_pool_default_size 3
 
  services:
    mon: 2 daemons, quorum ceph-mon1,ceph-osd1 (age 31m)
    mgr: ceph-mon1.nabssq(active, since 25h)
    osd: 2 osds: 2 up (since 20m), 2 in (since 20m)
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   9.9 MiB used, 40 GiB / 40 GiB avail
    pgs:

因為我這里只有兩個 OSDs ,所以這里會有警告。

5、創建一個文件系統卷

執行完成上面的操作之后,可以創建一個文件系統進行測試一下

# 可以先創建兩個 Pool,如果不創建的話,會默認創建的
# ceph osd pool create testfs.data # 用於保存數據
# ceph osd pool create testfs.meta # 用於保存元數據

# 創建一個文件系統卷 testfs
# 下面命令中的 testfs.meta testfs.data 不指定就會創建默認名稱是
# cephfs.testfs.meta 和 cephfs.testfs.data 的 Pool
# 如果上面創建了別的名字的 Pool ,這里也是可以用的,指定 Pool 名稱就是
ceph fs volume create testfs # testfs.meta testfs.data

# 查看一下當前的文件系統卷有哪些
ceph fs volume ls
[
    {
        "name": "testfs"
    }
]

創建完成之后,添加一個 mds (元數據)服務

# 設置一下副本數量
ceph orch apply mds testfs --placement="2 ceph-osd1 ceph-osd2"

# 在節點 ceph-mon1 上添加 mds 服務
ceph orch daemon add mds testfs ceph-mon1

# 查看一下文件系統狀態
ceph fs status testfs
testfs - 0 clients
======
RANK    STATE              MDS            ACTIVITY   DNS    INOS   DIRS   CAPS  
 0    reconnect  testfs.ceph-mon1.hypudc               0      0      0      0   
       POOL           TYPE     USED  AVAIL  
cephfs.testfs.meta  metadata  64.0k  18.9G  
cephfs.testfs.data    data       0   12.6G  
MDS version: ceph version 17.0.0-2904-g116ef525 (116ef52566c5fb8f7621439218fb492595e2d85a) quincy (dev)

使用命令 ceph mds stat 查看下 mds 服務狀態

ceph mds stat
testfs:1 cephfs:1 {cephfs:0=cephfs.ceph-mon1.komjhm=up:active,testfs:0=testfs.ceph-mon1.hypudc=up:active}

重新看一下集群狀態,我這里因為創建了兩個文件系統和 mds ,所以下面有的顯示了兩個的狀態。

ceph -s
  cluster:
    id:     be48dd3a-983d-11eb-b776-525400648899
    health: HEALTH_WARN
            insufficient standby MDS daemons available
            clock skew detected on mon.ceph-osd1
            Degraded data redundancy: 22/66 objects degraded (33.333%), 13 pgs degraded, 224 pgs undersized
            OSD count 2 < osd_pool_default_size 3
 
  services:
    mon: 2 daemons, quorum ceph-mon1,ceph-osd1 (age 97m)
    mgr: ceph-mon1.nabssq(active, since 26h)
    mds: 2/2 daemons up
    osd: 2 osds: 2 up (since 85m), 2 in (since 86m)
 
  data:
    volumes: 2/2 healthy
    pools:   4 pools, 224 pgs
    objects: 22 objects, 2.3 KiB
    usage:   13 MiB used, 40 GiB / 40 GiB avail
    pgs:     22/66 objects degraded (33.333%)
             211 active+undersized
             13  active+undersized+degraded
 
  io:
    client:   409 B/s rd, 0 op/s rd, 0 op/s wr
 
  progress:
    Global Recovery Event (22m)
      [............................]

image-20210409180143027

6、在客戶端機器掛載 cephfs

先在客戶端機器上安裝 ceph-common,軟件安裝包在離線安裝包里面有。

然后直接使用下面的命令進行掛載操作即可:

# 創建掛載點目錄,我這里創建兩個,把前面創建的兩個 fs 都掛載上
mkdir /mnt/testfs
mkdir /mnt/cephfs

# 使用 mount.ceph 進行掛載,使用的相關參數等可以  man mount.ceph 進行查看
#     secret 參數的值來自於 /etc/ceph/ceph.client.admin.keyring 文件內
#     fs 用於指定使用那個 cephfs
#     
mount -t ceph :/ /mnt/testfs -o name=admin,secret=AQCJs25gjmpIBBAAdbmFcI+nfdd9rfsa+zW78g==,fs=testfs
# 指定任意一個 MON 節點的 IP 都可以,也可以指定多個,用 , 分隔
mount -t ceph 192.168.122.200:6789:/ cephfs -o name=admin,secret=AQCJs25gjmpIBBAAdbmFcI+nfdd9rfsa+zW78g==,fs=cephfs

# 掛載后使用 df 命令查看下
df -h
文件系統                容量  已用  可用 已用% 掛載點
.... 多余的刪掉了....
192.168.122.103:6789:/   12G  2.4G  9.3G   21% /mnt/cephfs
192.168.122.200:6789:/   11G  1.7G  9.3G   15% /mnt/testfs

更多參數和掛載示例還是通過 man mount.ceph 進行查詢比較好。

使用 ceph fs dump 命令查看一下 cephfs 的狀況。

ceph fs dump
dumped fsmap epoch 16
e16
enable_multiple, ever_enabled_multiple: 1,1
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}
legacy client fscid: 1
 
Filesystem 'testfs' (1)
fs_name testfs
epoch   16
flags   12
created 2021-04-09T09:28:18.089566+0000
modified        2021-04-12T03:08:34.919957+0000
tableserver     0
root    0
session_timeout 60
session_autoclose       300
max_file_size   1099511627776
required_client_features        {}
last_failure    0
last_failure_osd_epoch  35
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=14646}
failed
damaged
stopped
data_pools      [2]
metadata_pool   1
inline_data     disabled
balancer
standby_count_wanted    1
[mds.testfs.ceph-mon1.hypudc{0:14646} state up:active seq 58769 join_fscid=1 addr [v2:192.168.122.103:6804/1724461665,v1:192.168.122.103:6805/1724461665]]
 
 
Filesystem 'cephfs' (2)
fs_name cephfs
epoch   14
flags   12
created 2021-04-09T09:40:15.916424+0000
modified        2021-04-09T09:50:45.474894+0000
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=24235}
failed
damaged
stopped
data_pools      [3]
metadata_pool   4
inline_data     disabled
balancer
standby_count_wanted    0
[mds.cephfs.ceph-mon1.komjhm{0:24235} state up:active seq 3 join_fscid=2 addr [v2:192.168.122.103:6802/4112730485,v1:192.168.122.103:6803/4112730485]]


免責聲明!

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



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