Ceph集群部署
- 2019 年 10 月 8 日
- 筆記
一 概述
1.1 背景
近期進行公司業務容器化改造,在為kubernetes提供存儲選型方面,在選型中本地存儲不可跨node,NFS共享存儲不好做高可用,因此選型Ceph來為k8s提供存儲類。特此筆記以備後用。
1.2 概述
Ceph是一種為優秀的性能、可靠性和可擴展性而設計的統一的、分佈式文件系統。Ceph是一個開源的分佈式文件系統。因為它還支持塊存儲、對象存儲,所以很自然的被用做雲計算框架openstack或cloudstack整個存儲後端。當然也可以單獨作為存儲,例如部署一套集群作為對象存儲、SAN存儲、NAS存儲等。可以作為k8s的存儲類,來方便容器持久化存儲。
1.3 支持格式
- 對象存儲:即radosgw,兼容S3接口。通過rest api上傳、下載文件。
- 文件系統:posix接口。可以將ceph集群看做一個共享文件系統掛載到本地。
- 塊存儲:即rbd。有kernel rbd和librbd兩種使用方式。支持快照、克隆。相當於一塊硬盤掛到本地,用法和用途和硬盤一樣。比如在OpenStack項目里,Ceph的塊設備存儲可以對接OpenStack的後端存儲
1.4 優勢
- 統一存儲:雖然ceph底層是一個分佈式文件系統,但由於在上層開發了支持對象和塊的接口
- 高擴展性:擴容方便、容量大。能夠管理上千台服務器、EB級的容量。
- 高可靠性:支持多份強一致性副本,EC。副本能夠垮主機、機架、機房、數據中心存放。所以安全可靠。存儲節點可以自管理、自動修復。無單點故障,容錯性強。
- 高性能:因為是多個副本,因此在讀寫操作時候能夠做到高度並行化。理論上,節點越多,整個集群的IOPS和吞吐量越高。另外一點ceph客戶端讀寫數據直接與存儲設備(osd) 交互。
1.5 核心組件
- 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 存儲集群造成負擔的前提下,執行諸如 ls、find 等基本命令。
二 安裝部署
2.1 主機信息
主機名 |
操作系統 |
配置 |
K8S組件 |
CEPH組件 |
私網IP |
SSH端口 |
用戶名密碼 |
---|---|---|---|---|---|---|---|
master |
CentOS 7.4 64bit |
4C8G + 500G硬盤 |
|
admin,osd, mon |
172.16.60.2 |
2001/22 |
root/uWWKWnjySO7Zocuh |
node01 |
CentOS 7.4 64bit |
4C8G + 500G硬盤 |
|
osd, mon |
172.16.60.3 |
2002/22 |
root/IZ5lReaUBz3QOkLh |
node02 |
CentOS 7.4 64bit |
4C8G + 500G硬盤 |
|
osd, mon |
172.16.60.4 |
2003/22 |
root/nUMFlg9a4zpzDMcE |
2.2 磁盤準備
需要在三台主機創建磁盤,並掛載到主機的/var/local/osd{0,1,2}
[root@master ~]# mkfs.xfs /dev/vdc [root@master ~]# mkdir -p /var/local/osd0 [root@master ~]# mount /dev/vdc /var/local/osd0/ [root@node01 ~]# mkfs.xfs /dev/vdc [root@node01 ~]# mkdir -p /var/local/osd1 [root@node01 ~]# mount /dev/vdc /var/local/osd1/ [root@node02 ~]# mkfs.xfs /dev/vdc [root@node02 ~]# mkdir -p /var/local/osd2 [root@node02 ~]# mount /dev/vdc /var/local/osd2/ 將磁盤添加進入fstab中,確保開機自動掛載
2.3 配置各主機hosts文件
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.60.2 master 172.16.60.3 node01 172.16.60.4 node02
2.4 管理節點ssh免密鑰登錄node1/node2
[root@master ~]# ssh-keygen -t rsa [root@master ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node01 [root@master ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node02
2.5 master節點安裝ceph-deploy工具
# 各節點均更新ceph的yum源 vim /etc/yum.repos.d/ceph.repo [ceph] name=ceph baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ gpgcheck=0 priority =1 [ceph-noarch] name=cephnoarch baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/ gpgcheck=0 priority =1 [ceph-source] name=Ceph source packages baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS gpgcheck=0 priority=1 # 安裝ceph-deploy工具 yum clean all && yum makecache yum -y install ceph-deploy
2.6 創建monitor服務
創建monitor服務,指定master節點的hostname
[root@master ~]# mkdir /etc/ceph && cd /etc/ceph [root@master ceph]# ceph-deploy new master [root@master ceph]# ll total 12 -rw-r--r-- 1 root root 195 Sep 3 10:56 ceph.conf -rw-r--r-- 1 root root 2915 Sep 3 10:56 ceph-deploy-ceph.log -rw------- 1 root root 73 Sep 3 10:56 ceph.mon.keyring [root@master ceph]# cat ceph.conf [global] fsid = 5b9eb8d2-1c12-4f6d-ae9c-85078795794b mon_initial_members = master mon_host = 172.16.60.2 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx osd_pool_default_size = 2 配置文件的默認副本數從3改成2,這樣只有兩個osd也能達到active+clean狀態,把下面這行加入到[global]段(可選配置)
2.7 所有節點安裝ceph
# 各節點安裝軟件包 yum -y install yum-plugin-priorities epel-release # master節點利用ceph-deply 部署ceph [root@master ceph]# ceph-deploy install master node01 node02 [root@master ceph]# ceph --version ceph version 10.2.11 (e4b061b47f07f583c92a050d9e84b1813a35671e)
2.8 部署相關服務
# 安裝ceph monitor [root@master ceph]# ceph-deploy mon create master # 收集節點的keyring文件 [root@master ceph]# ceph-deploy gatherkeys master # 創建osd [root@master ceph]# ceph-deploy osd prepare master:/var/local/osd0 node01:/var/local/osd1 node02:/var/local/osd2 # 權限修改 [root@master ceph]# chmod 777 -R /var/local/osd{0..2} [root@master ceph]# chmod 777 -R /var/local/osd{0..2}/* # 激活osd [root@master ceph]# ceph-deploy osd activate master:/var/local/osd0 node01:/var/local/osd1 node02:/var/local/osd2 # 查看狀態 [root@master ceph]# ceph-deploy osd list master node01 node02
2.9 統一配置
用ceph-deploy把配置文件和admin密鑰拷貝到所有節點,這樣每次執行Ceph命令行時就無需指定monitor地址和ceph.client.admin.keyring了
[root@master ceph]# ceph-deploy admin master node01 node02 # 各節點修改ceph.client.admin.keyring權限: [root@master ceph]# chmod +r /etc/ceph/ceph.client.admin.keyring # 查看狀態 [root@master ceph]# ceph health HEALTH_OK [root@master ceph]# ceph -s cluster 5b9eb8d2-1c12-4f6d-ae9c-85078795794b health HEALTH_OK monmap e1: 1 mons at {master=172.16.60.2:6789/0} election epoch 3, quorum 0 master osdmap e15: 3 osds: 3 up, 3 in flags sortbitwise,require_jewel_osds pgmap v27: 64 pgs, 1 pools, 0 bytes data, 0 objects 15681 MB used, 1483 GB / 1499 GB avail 64 active+clean
2.10 部署MDS服務
我們在node01/node02上安裝部署MDS服務
[root@master ceph]# ceph-deploy mds create node01 node02 # 查看狀態 [root@master ceph]# ceph mds stat e3:, 2 up:standby [root@master ~]# ceph mon stat e1: 1 mons at {master=172.16.60.2:6789/0}, election epoch 4, quorum 0 master # 查看服務 [root@master ceph]# systemctl list-unit-files |grep ceph [email protected] static [email protected] static [email protected] disabled [email protected] enabled [email protected] enabled [email protected] disabled ceph-mds.target enabled ceph-mon.target enabled ceph-osd.target enabled ceph-radosgw.target enabled ceph.target enabled
至此,基本上完成了ceph存儲集群的搭建。
三 創建ceph文件系統
3.1 創建文件系統
關於創建存儲池
確定 pg_num 取值是強制性的,因為不能自動計算。下面是幾個常用的值:
- 少於 5 個 OSD 時可把 pg_num 設置為 128
- OSD 數量在 5 到 10 個時,可把 pg_num 設置為 512
- OSD 數量在 10 到 50 個時,可把 pg_num 設置為 4096
- OSD 數量大於 50 時,你得理解權衡方法、以及如何自己計算 pg_num 取值
- 自己計算 pg_num 取值時可藉助 pgcalc 工具 隨着 OSD 數量的增加,正確的 pg_num 取值變得更加重要,因為它顯着地影響着集群的行為、以及出錯時的數據持久性(即災難性事件導致數據丟失的概率)。
[root@master ceph]# ceph osd pool create cephfs_data <pg_num> [root@master ceph]# ceph osd pool create cephfs_metadata <pg_num> [root@master ~]# ceph osd pool ls rbd [root@master ~]# ceph osd pool create kube 128 pool 'kube' created [root@master ~]# ceph osd pool ls rbd kube # 查看證書 [root@master ~]# ceph auth list installed auth entries: mds.node01 key: AQB56m1dE42rOBAA0yRhsmQb3QMEaTsQ71jHdg== caps: [mds] allow caps: [mon] allow profile mds caps: [osd] allow rwx mds.node02 key: AQB66m1dWuhWKhAAtbiZN7amGcjUh6Rj/HNFkg== caps: [mds] allow caps: [mon] allow profile mds caps: [osd] allow rwx osd.0 key: AQA46W1daFx3IxAAE1esQW+t1fWJDfEQd+167w== caps: [mon] allow profile osd caps: [osd] allow * osd.1 key: AQBA6W1daJG9IxAAQwETgrVc3awkEZejDSaaow== caps: [mon] allow profile osd caps: [osd] allow * osd.2 key: AQBI6W1dot4/GxAAle3Ii3/D38RmwNC4yTCoPg== caps: [mon] allow profile osd caps: [osd] allow * client.admin key: AQBu4W1d90dZKxAAH/kta03cP5znnCcWeOngzQ== caps: [mds] allow * caps: [mon] allow * caps: [osd] allow * client.bootstrap-mds key: AQBv4W1djJ1uHhAACzBcXjVoZFgLg3lN+KEv8Q== caps: [mon] allow profile bootstrap-mds client.bootstrap-mgr key: AQCS4W1dna9COBAAiWPu7uk3ItJxisVIwn2duA== caps: [mon] allow profile bootstrap-mgr client.bootstrap-osd key: AQBu4W1dxappOhAA5FanGhQhAOUlizqa5uMG3A== caps: [mon] allow profile bootstrap-osd client.bootstrap-rgw key: AQBv4W1dpwvsDhAAyp58v08XttJWzLoHWVHZow== caps: [mon] allow profile bootstrap-rgw
3.2 創建客戶端密鑰
# 創建keyring [root@master ~]# ceph auth get-or-create client.kube mon 'allow r' osd 'allow rwx pool=kube' -o /etc/ceph/ceph.client.kube.keyring [root@master ~]# ceph auth list # 將密鑰拷貝到node1和node2 [root@master ceph]# scp ceph.client.kube.keyring root@node01:/etc/ceph/
四 卸載
清理機器上的ceph相關配置: 停止所有進程: stop ceph-all 卸載所有ceph程序:ceph-deploy uninstall [{ceph-node}] 刪除ceph相關的安裝包:ceph-deploy purge {ceph-node} [{ceph-data}] 刪除ceph相關的配置:ceph-deploy purgedata {ceph-node} [{ceph-data}] 刪除key:ceph-deploy forgetkeys 卸載ceph-deploy管理:yum -y remove ceph-deploy