ceph作為目前最火的開源分布式存儲,支持對象,塊,文件存儲。把每個需要管理的數據流(比如文件)切分成多個固定大小的對象數據,並以其原子單元作為存取。
一ceph的存儲核心服務是rados(可靠,自動化分布式對象存儲)。

二ceph集群角色有如下幾個
三正式安裝
3.1下載地址
Ubuntu:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/bionic/
3.2部署環境:
| 主機名 | publi network | cluster network | 功能組件 |
| admin | 192.168.89.140 | 192.168.64.140 | ceph-deploy,mon |
| node1 | 192.168.89.141 | 192.168.64.141 | mon,osd,mgr |
| node2 | 192.168.89.142 | 192.168.64.142 | mon,osd,mgr,mds |
| node3 | 192.168.89.143 | 192.168.64.143 | rgw,osd |
時間同步
關閉selinux和防火牆
配置域名解析
配置所有節點之間免ssh登錄 注意: 配置的是普通用戶
每個節點2塊磁盤
3.3ceph安裝配置
3.3.1 添加Pacific版本源
3.3.6 初始化mon並生產秘鑰,能看到生成的key
xxx@admin~/cluster$:ceph-deploy mon create-initial
3.3.7 分發admin秘鑰,理論上可以讓任何節點都管理配置,此外同步集群配置文件和認證文件。一般僅僅是mon節點,當有客戶端使用也要分發。
3.3.8部署manager節點(在L版本及以上才有)
xxx@admin~/cluster$:ceph-deploy mgr create node1 node2(無法連續執行,分開執行單個節點)

3.3.9ceph-deploy配置系統環境,方便執行ceph命令
xxx@admin~/cluster$:ceph-deploy admin admin 給自己授權
3.3.10列出node節點磁盤
xxx@admin~/cluster$:ceph-deploy disk list node1

3.3.11 添加osd
xxx@admin~/cluster$:ceph-deploy osd create node1 --data /dev/sdb
其他主機類似操作
全部添加完查看集群狀態ceph osd tree

3.3.12 移除osd
1.停用設備 ceph osd out osd.1
2在osd所在節點停止進程 systemctl stop ceph-osd@1
3.移除設備 ceph osd purge 1 --yes-i-really-mean-it
4.清除osd lvm信息 vgremove ceph-xxx ceph-xxx信息可以用ceph-volume lvm list查看。此操作不是必須,是用於重新將磁盤添加回集群前操作。
注:也可以刪除/dev/dm-xx,同時清除dm-xx的文件系統(dd實現),但不推薦。
3.3.13 測試上傳下載
xxx@admin~/cluster$:ceph osd pool create myrbd1 32 32 myrbd1:池名 32:PG 32: PGP

注:由於此時走的是http協議並不安全,可以使用證書加密方式來保障安全。配置如下
→1在rgw節點創建證書目錄,並自簽證書
mkdir /etc/ceph/certs
cd certs;openssl genrsa -out civetweb.key 2048
openssl req -new -x509 -key civetweb.key -out civetweb.crt -subj "/CN=rgw.ty.net"
cat civetweb.key civetweb.crt >civetweb.pem
→2 rgw節點的ceph.conf配置新增如下

→3重啟rgw服務
systemctl restart ceph-radosgw@rgw.node3.service 或者systemctl restart ceph-radosgw.taget
→4修改本地主機的host文件,為了做域名解析 /system32/dirvers/host
驗證
以下 rbd和cephfs的掛載硬盤均為試驗多次重復使用,會有圖片不一致之處。
3.3.18查看ceph集群使用狀態 ceph df

3.3.19客戶端使用ceph塊設備,安裝ceph-mon,將管理節點的配置和認證文件同步給客戶端
客戶端 apt install ceph-common // yum install ceph-common 生產為openstack提供塊設備較多
客戶端:rbd -p myrdb1 map img1 注意:ceph為P版,客戶端內核版本或ceph版本過低,會導致無法映射。此模式使用的賬號是admin,最高權限
客戶端:進行格式化掛載

使用普通賬號掛載:
→1創建普通賬號,可以選擇任何組件的權限,mon,mds,rgw,osd等。

→2創建賬號對應的key


→3將key傳到客戶端

→4客戶端使用普通賬號登入ceph集群
ceph --user tyy -s
→5客戶端映射鏡像,格式化掛載使用


3.3.20 調整pg,此操作可以在任何mon節點進行
Ceph集群中的PG總數:
PG總數 = (OSD總數 * 100 / 最大副本數)
** 結果必須舍入到最接近的2的N次方冪的值。
Ceph集群中每個pool中的PG總數:
存儲池PG總數 = (OSD總數 * 100 / 最大副本數) / 池數
→1 檢查rbd這個pool里已存在的PG和PGP數量:
root:ceph osd pool get myrbd1 pg_num
pg_num: 128
root:ceph osd pool get myrbd1 pgp_num
pg_num: 128
→2 檢查pool的復制size
root:ceph osd dump |grep size|grep myrbd1(池名)
pool 2 'myrbd1' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 45 flags hashpspool stripe_width 0
2:池 ID
myrbd1:池名
replicate size:副本數
→3 根據公式計算出pg值並修改,本試驗中pg=500/3,按照pg值必須接近2^n,所以修改成256。當然試驗可以自定義值,不得超過默認值340即可。
ceph osd pool set myrbd1 pg_num 256
ceph osd pool set myrbd1 pgp_num 256
注意:因為僅僅創建了一個池,如果有多個池,pg需要除以池數,每個池都要進行pg和pgp值得修改。
3.3.21使用cephfs
→1 在deploy節點選擇node2創建mds服務器
xxx@admin~/cluster:ceph-deploy mds create node2
→2 在node2上創建cephfs所需要的數據池和元數據池
ceph osd pool create cephfs_data 16
ceph osd pool create cephfs_metadata 16
注意:兩個池的pg值可以不同
→3 創建cephfs文件系統
ceph fs new cephfs_storage cephfs_metadata cephfs_data
查看是否成功創建

可以看到對應的池,文件系統都已成功
→4 客戶端安裝ceph-mon,並掛載cephfs。
apt install ceph-mon -y // yum install ceph-mon -y
創建目錄點
mkdir /mnt/cephfs
掛載並驗證
mount -t ceph 192.168.89.142:6789:/ /mnt/cephfs/ -o name=admin,secret=AQCnHhhhbsRFDRAAOU4KgYm73B2ZAWnZtjDG7w==

注意:命令中的secret是從mon節點拷貝過去的,/etc/ceph/ceph.client.admin.keyring中的key。由於明文相對危險,所以一般把key單獨拿出來做個文件。
把key值放出admin.secret 。然后命令修改為mount -t ceph 192.168.89.142:6789:/ /mnt/cephfs/ -o name=admin,secretfile=/etc/ceph/admin.secret。
可以像塊設備一樣使用普通賬號,需要修改池賬號權限池為文件存儲池,依舊以上圖池為例。pool=cephfs_data,普通賬號為ty。
將生成的keyring傳到客戶端上,登錄ceph集成--ceph --user ty -s。
客戶端進行掛載,方式依舊如上所寫可以用key或者admin.secret文件,但是name需要修改成ty。
當然有多個mds服務,可以同時掛載mount -t ceph xxxx:6789,xxxxxx:6789,192.168.89.142:6789:/ /mnt/cephfs/ -o name=admin,secretfile=/etc/ceph/ty.secret

→5刪除文件系統以及池
客戶端取消掛載 umount /mnt/cephfs
cephfs節點 systemctl stop ceph-mds.target
ceph fs rm cephfs_storage --yes-i-really-mean-it
ceph osd pool rm cephfs_data cephfs_data --yes-i-really-really-mean-it
ceph osd pool rm cephfs_data cephfs_metadata --yes-i-really-really-mean-it
注意:如果報錯無法刪除,請在mon節點/etc/ceph/ceph.conf添加mon allow pool delete = true,將此文件同步給其他mon節點
ceph-deploy --overwrite-conf config push node{1..2},所有mon節點重啟服務:systemctl restart ceph-mon.target
→2刪除快照
