ceph分散式儲存
Ceph是一個開源的分散式檔案系統。因為它還支援塊儲存、物件儲存,所以很自然的被用做雲端計算框架openstack或cloudstack整個儲存後端。當然也可以單獨作為儲存,例如部署一套叢集作為物件儲存、SAN儲存、NAS儲存等。
機器規劃
節點名稱 |
外網IP |
內網IP |
磁碟容量 |
ceph-node-1-171 |
192.168.10.171 |
172.16.1.171 |
10G 掛載到opt下 |
ceph-node-2-172 |
192.168.10.172 |
172.16.1.172 |
10G |
ceph-node-3-173 |
192.168.10.173 |
172.16.1.173 |
10G |
系統環境
[root@ceph-node-1-170 ~]# cat /etc/redhat-release CentOS Linux release 7.8.2003 (Core) [root@ceph-node-1-170 ~]# uname -a Linux ceph-node-1-170 3.10.0-1127.18.2.el7.x86_64 #1 SMP Sun Jul 26 15:27:06 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux [root@ceph-node-1-170 ~]#
基礎優化
1、時間同步,生產環境建議搭建時間伺服器 echo "#time sync by fage at 2019-09-09" >>/var/spool/cron/root
echo "*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1" >>/var/spool/cron/root
systemctl restart crond.service 2、關閉防火牆和selinux systemctl stop firewalld && systemctl disable firewalld && setenforce 0 && sed -i s#SELINUX=enforcing#SELINUX=disable#g /etc/selinux/config 3、更改主機名 hostname node-1 echo "node-1" >/etc/hostname hostname node-2 echo "node-2" >/etc/hostname hostname node-3 echo "node-3" >/etc/hostname 4、更改hosts檔案 cat >/etc/hosts <<EOF 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.10.171 node-1 192.168.10.172 node-2 192.168.10.173 node-3 EOF 5、分發公鑰,每臺都要執行(非必須項) ssh-keygen -t rsa -f /root/.ssh/id_rsa -P "" ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected] ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected] ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected] 6、禁用swap裝置 swapoff -a sed -i "s@/dev/mapper/centos-swap swap@#/dev/mapper/centos-swap swap@g" /etc/fstab 7、新增好磁碟分割槽並格式化,但不需要掛載 fdisk -uc /dev/sdb mkfs.xfs /dev/sdb1 8、配置國內阿里雲源 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
安裝ceph
1、配置Ceph源
cat << EOF > /etc/yum.repos.d/ceph.repo [ceph] name=Ceph packages for baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc priority=1 [ceph-noarch] name=Ceph noarch packages baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc priority=1 [ceph-source] name=Ceph source packages baseurl= https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc priority=1 [x86_64] name=x86_64 baseurl= https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/ enabled=1 gpgcheck=0 EOF #複製到其他機器上 scp -r /etc/yum.repos.d/* [email protected]:/etc/yum.repos.d/ scp -r /etc/yum.repos.d/* [email protected]:/etc/yum.repos.d/
重新整理快取
yum makecache
2、在管理節點上安裝ceph-deploy控制器
yum install -y python-setuptools ceph-deploy
3、初始化叢集
建立工作目錄
mkdir /opt/ceph-deploy && cd /opt/ceph-deploy
建立新的叢集 叢集外部網路地址 叢集內部網路地址 將node-1部署為moniter
ceph-deploy new --public-network 192.168.10.0/24 --cluster-network 172.16.1.0/24 node-1
4、安裝依賴包 (所有節點都需要安裝)
yum install -y ceph ceph-mon ceph-mgr ceph-radogw ceph-mds
初始化mon
ceph-deploy mon create-initial
[root@node-1 ceph-deploy]# ll 總用量 44 -rw------- 1 root root 113 9月 10 00:15 ceph.bootstrap-mds.keyring 祕鑰檔案 -rw------- 1 root root 113 9月 10 00:15 ceph.bootstrap-mgr.keyring -rw------- 1 root root 113 9月 10 00:15 ceph.bootstrap-osd.keyring -rw------- 1 root root 113 9月 10 00:15 ceph.bootstrap-rgw.keyring -rw------- 1 root root 151 9月 10 00:15 ceph.client.admin.keyring -rw-r--r-- 1 root root 263 9月 9 23:27 ceph.conf -rw-r--r-- 1 root root 15543 9月 10 00:15 ceph-deploy-ceph.log -rw------- 1 root root 73 9月 9 23:27 ceph.mon.keyring [root@node-1 ceph-deploy]#
5、下發認證檔案
cd /opt/ceph-deploy && ceph-deploy admin node-1 node-2 node-3 && ceph -s
6、部署監控manager daemon
將node-1節點作為管理節點
ceph-deploy mgr create node-1 && ceph -s
7、新增磁碟到叢集
lsblk 檢視磁碟
ceph-deploy osd create node-1 --data /dev/sdb1 && ceph -s
7.1、將其他節點的磁碟也加入到叢集
需要在加入到節點檢視磁碟名稱
ceph-deploy osd create node-2 --data /dev/sdb1 ceph-deploy osd create node-3 --data /dev/sdb1 ceph -s #檢視叢集所有的空間 ceph osd tree # 檢視osd當前狀態
部署moniter 高可用叢集
部署moniter叢集基本是奇數數量3、5、7個的數量,會自動仲裁選舉管理節點
1、將其他節點加入到moniter叢集
ceph-deploy mon add node-2 --address 192.168.10.172 ceph-deploy mon add node-3 --address 192.168.10.173
2、加入到節點後可以檢視到節點在仲裁的數量
ceph quorum_status --format json-pretty
檢視monter狀態
ceph -s #檢視節點數量 ceph mon stat #檢視狀態 ceph mon dump # 更詳細的狀態
3、部署高可用監控叢集
直接將節點加入到叢集
ceph-deploy mgr create node-2 node-3
RBD塊裝置
公有云上可稱為裸裝置,可以進行格式化、分割槽等操作,但是不建議分割槽
可進行擴容和進行快照
可以隨著使用的空間進行慢慢擴容,最大一個塊裝置可以支援到16EB,支援切片,可快照,可快速克隆,支援雲解決方案,支援災難恢復
ceph快儲存的使用
pools資源池
建立資源池,包含有64個pgp
ceph osd pool create ceph-demo 64 64 #建立資源池 ceph osd lspools #檢視資源池 ceph osd pool get ceph-demo pg_num #檢視資源池中的pgp數量 ceph osd pool get ceph-demo size #檢視副本數,分片存放的叢集數量
檢視更多型別欄位可以使用幫助進行檢視
ceph osd pool get -h|grep size
排程演算法
ceph osd pool get ceph-demo crush_rule
可以根據自己的需求進行調整副本數量
ceph osd pool get ceph-demo size 2 ceph osd pool get ceph-demo size
可以根據自己的需求進行調整pg數量,注意也需要調整pgp
ceph osd pool set ceph-demo pg_num 128 ceph osd pool set ceph-demo pgp_num 128 ceph osd pool get ceph-demo pg_num ceph osd pool get ceph-demo pgp_num ceph -s
RBD塊儲存建立
建立裝置
rbd create -p ceph-demo --image rbd-demo.img --size 10G #方法一 rbd create ceph-demo/rbd-demo-1.img --size 10G #方法二 rbd -p ceph-demo ls
檢視建立的塊的詳細資訊
rbd info ceph-demo/rbd-demo.img
刪除已經建立的塊裝置
rbd rm -p ceph-demo --image rbd-demo-1.img rbd -p ceph-demo ls
RBD塊裝置的使用掛載
掛載前需要將建立時候的預設特性去除掉,不然會報錯
檢視特性
rbd -p ceph-demo info rbd-demo.img
去除特性
rbd feature disable ceph-demo/rbd-demo.img deep-flatten rbd feature disable ceph-demo/rbd-demo.img fast-diff rbd feature disable ceph-demo/rbd-demo.img object-map rbd feature disable ceph-demo/rbd-demo.img exclusive-lock
檢視去除特性的結果
rbd -p ceph-demo info rbd-demo.img
掛載裝置並檢視裝置掛載的名稱
rbd map ceph-demo/rbd-demo.img
rbd device list
掛載完成後就可以進行分割槽格式化這些操作
fdisk -l|grep /dev/rbd0 mkfs.ext4 /dev/rbd0 mkdir /mnt/rbd-demo mount /dev/rbd0 /mnt/rbd-demo
掛載完成後就可以正常的讀寫操作了
RBD裝置擴容
檢視裝置名稱及容量大小後進行擴容
rbd -p ceph-demo ls #檢視資源池中裝置名稱 rbd -p ceph-demo info --image rbd-demo-1.img #資源池的塊裝置檢視容量大小 rbd resize ceph-demo/rbd-demo-1.img --size 20G #擴容為20G
裝置擴容後需要在磁碟分割槽中也進行擴容才會在系統顯示擴容後的容量
需要注意,resize2fs 只對ext2/3/4檔案系統有效,對xfs檔案系統無效
rbd resize ceph-demo/rbd-demo-1.img --size 20G
RBD資料寫入流程
每個資料寫入都會被切割成叢集數量的分數進行儲存,保證資料的高可用性
一個物件會切割成多個objects,每個都是4M大小
rados -p ceph-demo ls rados -p ceph-demo ls|grep rbd_data.125 rados -p ceph-demo stat rbd_data.125ae45119d8.0000000000000500
objects會落在不同的pg上
驗證objects落在不同的pg上
for i in `ceph osd map ceph-demo rbd_data.125ae45119d8`;do ceph osd map ceph-demo ${i};done
測試寫入資料,實時監控寫入增長情況
rados -p ceph-demo ls |grep rbd_data.134a3db15f91 | wc -l cd /data/ && dd if=/dev/zero of=test.img bs=1M count=1024
由97增長到354個
watch -n 1 'rados -p ceph-demo ls | grep rbd_data.134a3db15f91 | wc -l'
代表會自動去生成容量檔案,但是不能超出限定的塊裝置容量大小
ceph警告排查
ceph -s # 列出告警
ceph health detail # 檢視告警資訊詳細內容
ceph osd pool application enable ceph-demo rbd ceph osd pool application get ceph-demo
如果出現其他的告警
ceph crash ls ID ENTITY NEW 2020-09-10-17:00:17.247005Z_cbe7d9c6-6e8-4d43-8e75-3c55aebfbe27 mgr.node-1 * 2020-09-10-17:05:17.880659Z_7c57908d-192-8864-8e75-ef95f5gdbbvd mgr.node-1 *
檢視某個時間的詳情
ceph crash info 2020-09-10-17:00:17.247005Z_cbe7d9c6-6e8-4d43-8e75-3c55aebfbe27
systemctl status ceph-mgr@node-1
刪除誤報的告警進行打包
ceph crash archive 2020-09-10-17:00:17.247005Z_cbe7d9c6-6e8-4d43-8e75-3c55aebfbe27 ceph crash archive 2020-09-10-17:05:17.880659Z_7c57908d-192-8864-8e75-ef95f5gdbbvd
ceph -s && ceph health detail #就看到會正常了
&n