centos7 ceph 集群部署
ceph
一種為優秀的性能、可靠性和可擴展性而設計的統一的、分布式文件系統
一、Ceph必備組件
OSD(Object Storage Device)
Ceph OSD守護進程(Ceph OSD)的功能是存儲數據.處理數據的復制、恢復、回填、再均衡,并通過檢查其他OSD 守護進程的心跳來向Ceph Monitors提供一些監控信息。當Ceph存儲集群設定為有2個副本時,至少需要2個OSD守護進程,集群才能達到active+clean狀態(Ceph默認有3個副本,但你可以調整副本數)。
MON(Monitor)
Ceph Monitor維護著展示集群狀態的各種圖表,包括監視器圖、OSD圖、歸置組(PG)圖、和CRUSH圖。Ceph保存著發生在Monitors 、OSD和PG上的每一次狀態變更的歷史信息(稱為Epoch,Epoch 是一個通用的實時的圖表庫,用于構建漂亮、平滑和高性能的可視化圖形圖表。)。
MDS(Ceph MetaData Server)
Ceph元數據服務器(MDS)為Ceph文件系統存儲元數據(也就是說,Ceph塊設備和Ceph對象存儲不使用MDS)。元數據服務器使得POSIX文件系統的用戶們,可以在不對Ceph存儲集群造成負擔的前提下,執行諸如ls、find等基本命令。MDS能夠控制Client和OSD的交互,還可以管理限額控制、目錄和文件的創建與刪除,以及訪問控制權限等。
PG (placement group)
PG (放置組)是 OSD之上的一層邏輯,可視其為一個邏輯概念。Ceph 把對象OBJECT映射到PG中。
從名字可理解PG是一個放置策略組,很多個對象一起組團,然后再存入OSD 中,用來方便定位和追蹤對象。
因為一個擁有數百萬對象的系統,不可能在對象這一級追蹤位置。可以把 PG 看做一個對象集合,該集合里的所有對象都具有相同的放置策略:對象的副本都分布在相同的OSD列表上。
PG 減少了各對象存入對應 OSD 時的元數據數量,更多的 PG 使得均衡更好。PG有主從之分,對于多副本而言,一個PG的主從副本分布在不同的OSD上;一個對象只能屬于一個PG,一個PG包含很多個對象,一個PG對應于一個OSD列表,PG的所有對象對存放在對應的OSD列表上。
Pool存儲池
Pool 是一個抽象的存儲池,它是 PG 之上的一層邏輯。所有的對象都必須存在存儲池中。存儲池管理著歸置組數量、副本數量、和存儲池規則集。要往存儲池里存數據,用戶必須通過認證、且權限合適,存儲池可做快照。
如果把整個 Ceph 存儲系統看做是一個數據庫的話,那么 Pool 的角色可以看做是數據表。用戶可能需要根據不同的需求把對象存儲在不同的存儲池中。 一個 Pool 由多個 PG 構成,一個 PG 只能屬于一個Pool。同一個 Pool 中的 PG 具有相同的類型,比如,如 Pool 為副本類型,則 Pool 中所有的 PG 都是多副本的。
PGP (Placement Group for Placemen)
PGP是PG的歸置組,PGP 起到對 PG 進行歸置的作用,PGP的取值應該與PG相同,在PG的值增大的同時,也要增大PGP的值以保持二者的值相同。 當一個 Pool 的 PG 增大后,Ceph 并不會開始進行 rebalancing,只有在 PGP 的值增大后, PG才會開始遷移至其他的OSD上,并且開始 rebalancing。
二、部署
1、環境
環境
node0 192.168.0.47 osd,mds,admin,monitor
node1 192.168.0.33 osd,mds
node2 192.168.0.37 osd,mds
node3 192.168.0.59 client
2、Hosts及防火墻設置
node0、node1、node2節點進行如下配置: #添加hosts解析; cat >/etc/hosts<<EOF 127.0.0.1 localhost localhost.localdomain 192.168.0.47 node0 192.168.0.33 node1 192.168.0.37 node2 EOF #臨時關閉selinux和防火墻; sed -i '/SELINUX/s/enforcing/disabled/g' /etc/sysconfig/selinux setenforce 0 systemctl stop firewalld.service systemctl disable firewalld.service sed -i '/^SELINUX/s/enforcing/disabled/g' /etc/selinux/config ;setenforce 0 #同步節點時間; yum install ntpdate -y ntpdate pool.ntp.org #修改對應節點主機名; hostname `cat /etc/hosts |grep $(ifconfig|grep broadcast|awk '{print $2}'|grep -E '192.168')|awk '{print $2}'`;su3、Ceph網絡源管理
在node0管理節點上使用阿里Yum源,操作命令如下所示:
yum install wget -y rm -rf /etc/yum.repos.d/* cd /etc/yum.repos.d/ wget -c http://mirrors.aliyun.com/repo/Centos-7.repo wget -c http://mirrors.aliyun.com/repo/epel-7.repo cat>/etc/yum.repos.d/ceph.repo<<EOF [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 EOF yum clean all以上,在每個節點都執行,以下,在node0節點執行即可
4、ceph-deploy管理工具
ceph-deploy是Ceph官方提供的部署工具,基于ssh遠程登錄其它各個節點上執行命令完成部署過程,通常在node節點上安裝此工具。 ceph-deploy工具默認使用root用戶SSH到各Ceph節點執行命令。為了方便,需求提前設置免密碼登陸各個節點。如果ceph-deploy以某個普通用戶登陸,那么這個用戶必須有無密碼使用sudo的權限。 yum -y install ceph-deploy #創建Monitor服務 mkdir /etc/ceph cd /etc/ceph/ ceph-deploy new node0 #執行如上指令會創建對應ceph的配置文件、日志文件和Monitor密鑰文件: ceph.conf ceph-deploy-ceph.log ceph.mon.keyring #如果想要修改守護進程數,也就是副本數,可以在ceph.conf配置文件中添加如下: cat>>ceph.conf<<EOF osd_pool_default_size = 2 EOF5、Ceph軟件安裝
#在node0節點生成公鑰和私鑰; ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa -q -t:指定要創建的密鑰的類型; -N:是指密碼為空; -f:id_rsa是指保存文件為~/.ssh/id_rsa和~/.ssh/id_rsa.pub; -q:指靜默模式, 不輸出顯示; #將公鑰拷貝至各個節點; for i in `seq 0 2`;do ssh-copy-id -i ~/.ssh/id_rsa.pub node$i ;done #每個節點安裝Ceph ceph-deploy install node0 node1 node26、 部署Monitor(監控)
#創建Monitor(監控); ceph-deploy mon create node0 #收集keyring(密鑰環)信息; ceph-deploy gatherkeys node0 #查看生成的配置文件和秘鑰; ls ceph.bootstrap-mds.keyring ceph.bootstrap-rgw.keyring ceph-deploy-ceph.log ceph.bootstrap-mgr.keyring ceph.client.admin.keyring ceph.mon.keyring ceph.bootstrap-osd.keyring ceph.conf rbdmap7、創建OSD存儲節點
#分別在每個節點創建ceph存儲目錄:/data/,指令如下; for i in $(seq 0 2);do ssh -l root node$i "mkdir -p /data/" ;done #創建osd節點,命令如下: ceph-deploy osd prepare node0:/data/ node1:/data/ node2:/data/ #在不同的主機上可以看到,對應的節點會生成文件,命令如下: ls -l /data/ ceph_fsid fsid magic8、激活OSD存儲節點
#管理節點node0上激活各節點的osd ceph-deploy osd activate node0:/data/ node1:/data/ node2:/data/ #如果報提示沒有權限的錯誤,需要給三個節點的/data/讀寫、執行權限 for i in $(seq 0 2);do ssh -l root node$i "chmod 777 -R /data/" ;done #然后重新執行; ceph-deploy osd activate node0:/data/ node1:/data/ node2:/data/ 激活完成后可以使用命令查看osd狀態; ceph-deploy osd list node0 #使用如下命令將配置文件和admin密鑰同步到各個節點,以便各個節點使用ceph命令時無需指定Monitor地址和ceph.client.admin.keyring密鑰。 #注意:還需要修改各個節點ceph.client.admin.keyring密鑰的權限 ceph-deploy admin node0 node1 node29、檢查OSD狀態
ceph health HEALTH_OK10、部署MDS服務
ceph-deploy mds create node0 node1 node2 ceph mds stat e4:, 3 up:standby11、查看CEPH集群狀態
#查看Ceph集群狀態; ceph -s #查看Ceph文件系統; ceph fs ls No filesystems enabled12、Ceph創建存儲池
#創建存儲池; ceph osd pool create cephfs_data 128 #創建存儲池元數據; ceph osd pool create cephfs_metadata 128 #解析:參數后面的128數字為指定pg_num的值,這個值是不能自動計算的,需要手動賦予。一般來說,少于5個osd時,pg_num可以設置為128;osd在5到10個之間,pg_num可以設置為512;osd在10到50個之間,pg_num可以設置為4096;Osd一旦超過50個,那么就得自己計算pg_num的取值,也可以借助工具pgcalc計算,網址是https://ceph.com/pgcalc/。隨著osd數量的增加,正確的pg_num取值變得更加重要,因為它顯著地影響著集群的行為、以及出錯時的數據持久性(即災難性事件導致數據丟失的概率)。13、創建文件系統
#創建Ceph文件系統; ceph fs new 128 cephfs_metadata cephfs_data #查看Ceph文件系統; ceph fs ls #查看MDS狀態; ceph mds stat ceph osd pool get [存儲池名稱] size //查看存儲池副本數 ceph osd pool set [存儲池名稱] size 3 //修改存儲池副本數 ceph osd lspools //打印存儲池列表 ceph osd pool create [存儲池名稱] [pg_num的取值] //創建存儲池 ceph osd pool rename [舊的存儲池名稱] [新的存儲池名稱] //存儲池重命名 ceph osd pool get [存儲池名稱] pg_num //查看存儲池的pg_num ceph osd pool get [存儲池名稱] pgp_num //查看存儲池的pgp_num ceph osd pool set [存儲池名稱] pg_num [pg_num的取值] //修改存儲池的pg_num值 ceph osd pool set [存儲池名稱] pgp_num [pgp_num的取值] //修改存儲池的pgp_num值 ceph osd pool get-quota cephfs_metadata //查看存儲池配額 quotas for pool 'cephfs_metadata': max objects: N/A max bytes : N/A14、查看ceph 狀態
ceph osd tree
[root@node0 ceph]# ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY -1 0.22458 root default -2 0.07419 host node0 0 0.07419 osd.0 up 1.00000 1.00000 -3 0.07520 host node1 1 0.07520 osd.1 up 1.00000 1.00000 -4 0.07520 host node2 2 0.07520 osd.2 up 1.00000 1.00000 ceph -scluster 2735b13e-fc74-4eb5-9ae1-f5211c154b36health HEALTH_OKmonmap e1: 1 mons at {node0=192.168.0.47:6789/0}election epoch 3, quorum 0 node0fsmap e7: 1/1/1 up {0=node2=up:active}, 2 up:standbyosdmap e22: 3 osds: 3 up, 3 inflags sortbitwise,require_jewel_osdspgmap v867: 320 pgs, 3 pools, 2068 bytes data, 20 objects23387 MB used, 207 GB / 229 GB avail320 active+clean [root@node0 ceph]# ps -ef|grep ceph ceph 2601 1 0 16:09 ? 00:00:06 /usr/bin/ceph-mon -f --cluster ceph --id node0 --setuser ceph --setgroup ceph ceph 3364 1 0 16:11 ? 00:00:07 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph ceph 3724 1 0 16:11 ? 00:00:00 /usr/bin/ceph-mds -f --cluster ceph --id node0 --setuser ceph --setgroup ceph root 19462 2020 0 17:22 pts/0 00:00:00 grep --color=auto ceph [root@node1 ~]# ps -ef|grep ceph ceph 2666 1 0 16:11 ? 00:00:07 /usr/bin/ceph-osd -f --cluster ceph --id 1 --setuser ceph --setgroup ceph ceph 2891 1 0 16:11 ? 00:00:00 /usr/bin/ceph-mds -f --cluster ceph --id node1 --setuser ceph --setgroup ceph root 18201 2015 0 17:23 pts/0 00:00:00 grep --color=auto ceph如此,ceph集群部署完畢
三、客戶端掛載ceph 文件系統
方法一:內核驅動掛載
環境安裝及查看key值
yum install ceph-common -y mkdir -p /app /etc/ceph/ scp 192.168.0.47:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ cat /etc/ceph/ceph.client.admin.keyring [client.admin]key = AQDAg9lgfgY0LhAAOJ5eQxA6+l1qhMrU9zoTVA==mount
mount -t ceph 192.168.0.47:6789:/ /app/ -o name=admin,secret=AQDAg9lgfgY0LhAAOJ5eQxA6+l1qhMrU9zoTVA==
已掛載
方法二、用戶控件掛載ceph文件系統
#在客戶端主機部署ceph-fuse,命令操作如下; scp -r root@192.168.0.47:/etc/yum.repos.d/ceph.repo /etc/yum.repos.d/ yum install -y ceph-fuse #添加客戶端KEY,可以從node0節點/etc/ceph/目錄拷貝; scp 192.168.0.47:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ cat /etc/ceph/ceph.client.admin.keyring [client.admin]key = AQDAg9lgfgY0LhAAOJ5eQxA6+l1qhMrU9zoTVA== #使用如下指令掛載Ceph目錄即可; [root@localhost ~]# ceph-fuse -m 192.168.0.47:6789 /app 2021-06-28 18:18:07.600287 7fba23495f00 -1 did not load config file, using default settings. ceph-fuse[12012]: starting ceph client 2021-06-28 18:18:07.627873 7fba23495f00 -1 init, newargv = 0x56044d0326c0 newargc=11 ceph-fuse[12012]: starting fuse [root@localhost ~]# [root@localhost ~]# df -Th|grep ceph ceph-fuse fuse.ceph-fuse 230G 23G 208G 10% /app #注:如果需要卸載,命令如下; fusermount -u /data開機掛載 - 添加rc.local或fstab文件 (略)
四、Ceph添加新節點
CEPH集群配置成功之后,隨著數據量不斷的增長,后期如果資源池滿了,作為運維人員需要向集群中增加存儲節點,以應對企業數據飛速的增長。如果集群已經在運行,我們可以在集群運行時添加或刪除OSD節點。
要向CEPH集群中增加一個或者多個OSD節點,要依次做如下操作:
增加Linux服務器;
創建OSD數據目錄;
把硬盤掛載到數據目錄;
把 OSD節點數據目錄加入集群;
將OS節點加入 CRUSH Map。
1、Hosts及防火墻設置node0和node3節點進行如下配置:
#添加hosts解析; cat >/etc/hosts<<EOF 127.0.0.1 localhost localhost.localdomain 192.168.0.47 node0 192.168.0.33 node1 192.168.0.37 node2 192.168.0.59 node3 EOF #臨時關閉selinux和防火墻; sed -i '/SELINUX/s/enforcing/disabled/g' /etc/sysconfig/selinux setenforce 0 systemctl stop firewalld.service systemctl disable firewalld.service #同步節點時間; yum install ntpdate -y ntpdate pool.ntp.org #修改對應節點主機名; hostname `cat /etc/hosts|grep $(ifconfig|grep broadcast|awk '{print $2}')|awk '{print $2}'`;su2、在node0管理節點上使用阿里Yum源,操作命令如下所示:(如果已經操作,可以忽略)
yum install wget -y rm -rf /etc/yum.repos.d/* cd /etc/yum.repos.d/ wget http://mirrors.aliyun.com/repo/Centos-7.repo wget http://mirrors.aliyun.com/repo/epel-7.repo cat>/etc/yum.repos.d/ceph.repo<<EOF [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 EOF yum clean all3、在Ceph新增節點上安裝CEPH軟件服務;
#在node0節點生成公鑰和私鑰; ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa -q -t:指定要創建的密鑰的類型; -N:是指密碼為空; -f:id_rsa是指保存文件為~/.ssh/id_rsa和~/.ssh/id_rsa.pub; -q:指靜默模式, 不輸出顯示; #將公鑰拷貝至各個節點; ssh-copy-id -i ~/.ssh/id_rsa.pub node3 #在新節點安裝Ceph服務; ceph-deploy install node34、創建OSD存儲節點;
#在新增的節點創建ceph存儲目錄:/data/,指令如下; ssh -l root node3 "mkdir -p /data/" #創建osd節點,命令如下: ceph-deploy osd prepare node3:/data/ #在新節點的主機上可以看到,對應的節點會生成文件,命令如下: ls -l /data/ ceph_fsid fsid magic5、激活OSD存儲節點,在管理節點node0上激活新增節點的osd數據存儲,命令操作如下;
ceph-deploy osd activate node3:/data/如果報提示沒有權限的錯誤,需要給三個節點的/data/讀寫、執行權限
ssh -l root node3 "chmod 777 -R /data/"然后重新執行;
ceph-deploy osd activate node3:/data/激活完成后可以使用命令查看osd狀態;
ceph-deploy osd list node3使用如下命令將配置文件和admin密鑰同步到各個節點,以便各個節點使用ceph命令時無需指定Monitor地址和ceph.client.admin.keyring密鑰。注意:還需要修改各個節點ceph.client.admin.keyring密鑰的權限
ceph-deploy admin node36、添加新節點node3的/data/目錄加入到存儲池中;
ceph-deploy osd create node3:/data/7、OSD節點部署完成之后,接下來部署MDS服務,命令操作如下;
ceph-deploy mds create node38、檢查新增節點服務進程和端口信息,命令操作如下;
[root@node3 ~]# ps -ef|grep ceph root 11715 2 0 Jun28 ? 00:00:00 [ceph-msgr] root 12012 1 0 Jun28 pts/0 00:00:46 ceph-fuse -m 192.168.0.47:6789 /app ceph 14333 1 3 20:11 ? 00:00:01 /usr/bin/ceph-osd -f --cluster ceph --id 3 --setuser ceph --setgroup ceph ceph 14707 1 0 20:12 ? 00:00:00 /usr/bin/ceph-mds -f --cluster ceph --id node3 --setuser ceph --setgroup ceph root 14741 13302 0 20:12 pts/0 00:00:00 grep --color=auto ceph [root@node3 ~]# netstat -tnlp|grep ceph tcp 0 0 0.0.0.0:6800 0.0.0.0:* LISTEN 14333/ceph-osd tcp 0 0 0.0.0.0:6801 0.0.0.0:* LISTEN 14333/ceph-osd tcp 0 0 0.0.0.0:6802 0.0.0.0:* LISTEN 14333/ceph-osd tcp 0 0 0.0.0.0:6803 0.0.0.0:* LISTEN 14333/ceph-osd tcp 0 0 0.0.0.0:6804 0.0.0.0:* LISTEN 14707/ceph-mds [root@node3 ~]# ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY -1 0.31717 root default -2 0.07419 host node0 0 0.07419 osd.0 up 1.00000 1.00000 -3 0.07520 host node1 1 0.07520 osd.1 up 1.00000 1.00000 -4 0.07520 host node2 2 0.07520 osd.2 up 1.00000 1.00000 -5 0.09259 host node3 3 0.09259 osd.3 up 1.00000 1.00000五、ceph刪除節點
CEPH集群配置成功之后,隨著數據量不斷的增長,后期如果資源池滿了,作為運維人員需要向集群中增加存儲節點,以應對企業數據飛速的增長。如果集群已經在運行,我們可以在集群運行時添加或刪除OSD節點。
1)將node3節點的osd.3從Crush中刪除,并刪除對應的OSD和AUTH,HOST,在node0管理節點上執行如下指令:
ceph osd crush rm osd.3
ceph osd rm 3
ceph auth del osd.3
ceph osd crush rm node3
ceph osd tree
2)根據如上指令,將故障節點和OSD從集群中刪除了,同時可以停止node3節點CEPH相關的服務進程,命令操作如下:
systemctl stop ceph.target ps -ef|grep ceph3)卸載Ceph服務,同時將相關數據刪除,命令操作如下:
yum remove ceph* -y yum remove libcephfs* python-cephfs* -y find / -name "*ceph*" -exec rm -rf {} \;------------------------------------end
總結
以上是生活随笔為你收集整理的centos7 ceph 集群部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 360se html怎么删除,删除360
- 下一篇: php中session销毁,PHP中se