1. Ceph監視器(ceph-mon):用於維護集群狀態映射(maintains maps of the cluster state),比如 ceph 集群中有多少存儲池、每個存儲池有多少 PG 以及存儲池和 PG的映射關系等,monitor map, manager map, the OSD map, the MDS map, and theCRUSH map,這些映射是 Ceph 守護程序相互協調所需的關鍵群集狀態,此外監視器還負責管理守護程序和客戶端之間的身份驗證(認證使用 cephX 協議)。通常至少需要三個監視器才能實現冗余和高可用性
2. Ceph管理器(ceph-mgr):ceph manager守護進程負責跟蹤運行時指標和ceph集群當前的狀態,包括存儲利用率,當前性能指標和系統負載等,ceph-mgr還托管一些python模塊,以實現基於web的ceph儀表盤和rest api,通常要實現高可用至少需要2個ceph-mgr進程,通常ceph-mon和ceph-mgr個數相同,1個ceph-mon同節點會伴隨1個ceph-mgr守護進程。
3. Ceph對象存儲(ceph-osd):提供存儲數據,操作系統上的一個磁盤就是一個 OSD 守護程序,OSD 用於處理 ceph集群數據復制,恢復,重新平衡,並通過檢查其他 Ceph OSD 守護程序的心跳來向 Ceph監視器和管理器提供一些監視信息。通常至少需要 3 個 Ceph OSD 才能實現冗余和高可用性。
4. Ceph元數據服務(ceph-mds):Ceph MDS為ceph文件系統存儲元數據,注意Ceph塊設備和對象存儲不用mds存儲元數據,Ceph MDS允許POSIX文件系統用戶執行基本命令,而不會將壓力都集中到Ceph OSD集群上,通常mds可以選擇部署至少2個節點,可以和其他組件一起也可以分開。
基於以上,本次部署采用Ubuntu 18.04.5-server版本,Ceph采用pacific版
環境准備:計划采用9台虛擬機機分開部署,1台用於部署,3台監視,2台管理,最后3台存儲節點,2個網段,一個用cluster,一個用於public
Cluster網段:172.16.1.0/24
Public網段: 192.168.79.0/24
具體規划如下:

基礎配置:(這里可以先初始化一台模板,配置完后在克隆):
1.更換源,這里采用清華鏡像地址:
wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | apt-key add -
Ubuntu18.04.x:
cat /etc/apt/sources.list
# 默認注釋了源碼鏡像以提高 apt update 速度,如有需要可自行取消注釋
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe
multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe
multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe
multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main
# echo "deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main"
>> /etc/apt/sources.list
更換完成后,執行apt-get update && apt-get upgrade
2.時間同步:
apt update
apt install chrony -y
vim /etc/chrony/chrony.conf
# 修改為阿⾥雲時鍾同步服務器
# 公⽹
server ntp.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp2.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp3.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp4.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp5.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp6.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp7.aliyun.com minpoll 4 maxpoll 10 iburst
# 重啟服務
systemctl restart chrony
systemctl status chrony
systemctl enable chrony
# 查看時鍾同步狀態
timedatectl status
# 寫⼊系統時鍾
hwclock -w
# 重啟服務器
reboot
3.更改IP地址
配置完成后,執行netplan apply
4.添加一個Ceph賬戶並給與權限,后期OSD掛載可能涉及
groupadd -r -g 2022 ceph && useradd -r -m-s /bin/bash -u 2022 -g 2022 ceph && echo ceph:123456 | chpasswd
echo "ceph ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
5.配置/etc/hosts主機解析

在上面全部配置完成后,按規划地址克隆其他服務器,並更改IP
集群部署:
1.配置免秘鑰登錄:
在 ceph-deploy 節點配置允許以非交互的方式登錄到各節點
root@ceph-deploy:~# ssh-keygen -t rsa
root@ceph-deploy:~# ssh-copy-id 172.16.1.161
root@ceph-deploy:~# ssh-copy-id 172.16.1.162
略(這里可以寫腳本,批量執行)
2.安裝 ceph 部署工具:
root@ceph-deploy:~# apt-cache madison ceph-deploy
回顯如下:
ceph-deploy | 2.0.1 | https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic/main amd64 Packages
ceph-deploy | 2.0.1 | https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic/main i386 Packages
ceph-deploy |1.5.38-0ubuntu1 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic/universe amd64 Packages
ceph-deploy | 1.5.38-0ubuntu | https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic/universe i386 Packages
3.初始化 mon 節點:
[root@ceph-deploy ~]# mkdir ceph-cluster
[root@ceph-deploy ~]# cd ceph-cluster/
初始化 mon 節點過程如下:
Ubuntu 各服務器需要單獨安裝 Python2:
root@ceph-mon1:~# apt install python2.7 -y
root@ceph-mon1:~# ln -sv /usr/bin/python2.7 /usr/bin/python2
完成后執行:ceph-deploy new --cluster-network 172.16.1.0/24 --public-network 192.168.79.0/24 ceph-mon1.example.com
驗證初始化:

4.初始化 ceph 存儲節點:
[ceph@ceph-deploy ceph-cluster]# ceph-deploy install --no-adjust-repos --nogpgcheck ceph-node1 ceph-node2 ceph-node3
5.配置 mon 節點並生成及同步秘鑰(注意:在mon節點執行):
root@ceph-mon1:~# apt install ceph-mon
root@ceph-mon2:~# apt install ceph-mon
root@ceph-mon3:~# apt install ceph-mon

一路回車,3台mon節點一樣操作
完成后,在deploy部署節點,執行
[root@ceph-deploy ceph-cluster]# ceph-deploy mon create-initial
在mon節點驗證:
6.分發 admin 秘鑰:
root@ceph-deploy:~# apt install ceph-common #先安裝 ceph 的公共組件
root@ceph-node1:~# apt install ceph-common -y
root@ceph-node2:~# apt install ceph-common -y
root@ceph-node3:~# apt install ceph-common -y
root@ceph-node4:~# apt install ceph-common -y
root@ceph-deploy:/home/ceph/ceph-cluster# ceph-deploy admin ceph-node1 ceph-node2 ceph-node3
如下圖:

node節點驗證:

7.配置 manager 節點:
初始化 ceph-mgr 節點:
[root@ceph-mgr1 ~]#apt install ceph-mgr
2台mgr節點一樣操作:
完成后執行:
[root@ceph-deploy ceph-cluster]# ceph-deploy mgr create ceph-mgr1
mgr節點驗證:

8.ceph-deploy 管理 ceph 集群:
在 ceph-deploy 節點配置一下系統環境,以方便后期可以執行 ceph 管理命令。
root@ceph-deploy:~# apt install ceph-common
[root@ceph-deploy ceph-cluster]$ ceph-deploy admin ceph-deploy #推送正證書給自己
執行:root@ceph-deploy:~/ceph-cluster# ceph -s
若顯示有如下所示:
執行:root@ceph-deploy:~/ceph-cluster# ceph config set mon auth_allow_insecure_global_id_reclaim false
9:准備 OSD 節點:
擦除磁盤之前通過 deploy節點對 node 節點執行安裝 ceph 基本運行環境
[root@ceph-deployceph-cluster]# ceph-deploy install --release pacific ceph-node1
[root@ceph-deployceph-cluster]# ceph-deploy install --release pacific ceph-node2
[root@ceph-deployceph-cluster]# ceph-deploy install --release pacific ceph-node3
查看列出磁盤信息:
[root@ceph-deploy ceph-cluster]# ceph-deploy disk list ceph-node1 #列出遠端存儲 node1 節點的磁盤信息
使用 ceph-deploy disk zap 擦除各 ceph node 的 ceph 數據磁盤:
[root@ceph-deploy ceph-cluster]#ceph-deploy disk zap ceph-node1 /dev/sdb
[root@ceph-deploy ceph-cluster]#ceph-deploy disk zap ceph-node1 /dev/sdc
[root@ceph-deploy ceph-cluster]#ceph-deploy disk zap ceph-node1 /dev/sdd
注:所有node節點執行同樣操作
10.添加OSD
在部署節點執行:
ceph-deploy osd create ceph-node1 --data /dev/sdb
ceph-deploy osd create ceph-node1 --data /dev/sdc
ceph-deploy osd create ceph-node1 --data /dev/sdd
ceph-deploy osd create ceph-node2 --data /dev/sdb
ceph-deploy osd create ceph-node2 --data /dev/sdc
ceph-deploy osd create ceph-node2 --data /dev/sdd
ceph-deploy osd create ceph-node3 --data /dev/sdb
ceph-deploy osd create ceph-node3 --data /dev/sdc
ceph-deploy osd create ceph-node3 --data /dev/sdd
在node 節點驗證:

11.擴容mod節點:
[root@ceph-deploy ceph-cluster]# ceph-deploy mon add ceph-mon2
[root@ceph-deploy ceph-cluster]# ceph-deploy mon add ceph-mon3
12.擴容mgr節點:
[root@ceph-deploy ceph-cluster]# ceph-deploy mgr create ceph-mgr2
[root@ceph-deploy ceph-cluster]# ceph-deploy admin ceph-mgr2 #同步配置文件到ceph-mg2 節點
13.最后驗證:
至此,集群部署完成
客戶端驗證:
准備一台 centos的虛擬機,配置好Yum源,
在客戶端安裝 ceph-common:
執行:
yum install https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm -y
yum install ceph-common
完成后,從ceph部署節點執行scp配合和驗證文件
[root@ceph-deploy ceph-cluster]# scp ceph.conf ceph.client.admin.keyring root@172.16.1.XX:/etc/ceph/
Ceph集群塊設備 RBD准備:
創建 RBD:
#ceph osd pool create myrbd1 64 64 #創建存儲池,指定 pg 和 pgp 的數量,pgp 是對存在於 pg 的數據進行組合存儲,pgp 通常等於 pg 的值
pool 'myrdb1' created
# ceph osd pool --help
# ceph osd pool application enable myrbd1 rbd #對存儲池啟用 RBD 功能
enabled application 'rbd' on pool 'myrdb1'
# rbd pool init -p myrbd1 #通過 RBD 命令對存儲池初始化
創建並驗證 img:
#rbd create myimg1 --size 5G --pool myrbd1
# rbd create myimg2 --size 3G --pool myrbd1 --image-format 2 --image-feature layering
后續步驟會使用 myimg2 ,由於 centos 系統內核較低無法掛載使用,因此只開啟部分特
性。除了 layering 其他特性需要高版本內核支持
#rbd ls --pool myrbd1 #列出指定的 pool 中所有的 img
myimg1
myimg2

完成上述操作后:
客戶端映射 img:
在cenos上執行:
[root@ceph-client ceph]# rbd -p myrbd1 map myimg2
出現如下所示:
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel
with "rbd feature disable myrdb1/myimg1 object-map fast-diff deep-flatten".
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (6) No such device or address
執行括號中的rbd feature disable myrdb1/myimg1 object-map fast-diff deep-flatten
再執行 lsblk查看
已發現rbd0
創建一個掛載目錄test,並對rbd0執行mkfs.xfs /dev/rdb0格式化 ,並掛載到test目錄下
寫入一個文件測試:
dd if=/dev/zero of=/test/ceph-test-file bs=1MB count=300
300+0 records in
300+0 records out
300000000 bytes (300 MB) copied, 3.49849 s, 85.8 MB/s
最后到ceph端驗證:
可以看到容量已經成功完成,完