1. 程式人生 > >ceph分散式儲存

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