介紹
為什么要用Ceph
Ceph是當(dāng)前非常流行的開(kāi)源分布式存儲(chǔ)系統(tǒng),具有高擴(kuò)展性、高性能、高可靠性 等優(yōu)點(diǎn),同時(shí)提供塊存儲(chǔ)服務(wù)(rbd)、對(duì)象存儲(chǔ)服務(wù)(rgw)以及文件系統(tǒng)存儲(chǔ)服務(wù)(cephfs),Ceph在存儲(chǔ)的時(shí)候充分利用存儲(chǔ)節(jié)點(diǎn)的計(jì)算能力,在存儲(chǔ)每一個(gè)數(shù)據(jù)時(shí) 都會(huì)通過(guò)計(jì)算得出該數(shù)據(jù)的位置,盡量的分布均衡。。目前也是OpenStack的主流 后端存儲(chǔ),隨著OpenStack在云計(jì)算領(lǐng)域的廣泛使用,ceph也變得更加炙手可熱。 國(guó)內(nèi)目前使用ceph搭建分布式存儲(chǔ)系統(tǒng)較為成功的企業(yè)有x-sky,深圳元核云,上海 UCloud等三家企業(yè)。
Ceph架構(gòu)介紹
Ceph使用RADOS提供對(duì)象存儲(chǔ),通過(guò)librados封裝庫(kù)提供多種存儲(chǔ)方式的文件和 對(duì)象轉(zhuǎn)換。外層通過(guò)RGW(Object,有原生的API,而且也兼容Swift和S3的API, 適合單客戶(hù)端使用)、RBD(Block,支持精簡(jiǎn)配置、快照、克隆,適合多客戶(hù)端有 目錄結(jié)構(gòu))、CephFS(File,Posix接口,支持快照,社會(huì)和更新變動(dòng)少的數(shù)據(jù),沒(méi) 有目錄結(jié)構(gòu)不能直接打開(kāi))將數(shù)據(jù)寫(xiě)入存儲(chǔ)。
-
高性能
a. 摒棄了傳統(tǒng)的集中式存儲(chǔ)元數(shù)據(jù)尋址的方案,采用CRUSH算法,數(shù)據(jù)分布 均衡,并行度高
b.考慮了容災(zāi)域的隔離,能夠?qū)崿F(xiàn)各類(lèi)負(fù)載的副本放置規(guī)則,例如跨機(jī)房、機(jī) 架感知等
c. 能夠支持上千個(gè)存儲(chǔ)節(jié)點(diǎn)的規(guī)模,支持TB到PB級(jí)的數(shù)據(jù)
-
高可擴(kuò)展性
a. 去中心化
b. 擴(kuò)展靈活
c. 隨著節(jié)點(diǎn)增加而線(xiàn)性增長(zhǎng)
-
特性豐富
a. 支持三種存儲(chǔ)接口:塊存儲(chǔ)、文件存儲(chǔ)、對(duì)象存儲(chǔ)
b. 支持自定義接口,支持多種語(yǔ)言驅(qū)動(dòng)
目前來(lái)說(shuō),ceph在開(kāi)源社區(qū)還是比較熱門(mén)的,但是更多的是應(yīng)用于云計(jì)算的后端 存儲(chǔ)。官方推薦使用ceph的對(duì)象式存儲(chǔ),速度和效率都比較高,而cephfs官方并 不推薦直接在生產(chǎn)中使用。以上介紹的只是ceph的滄海一粟,ceph遠(yuǎn)比上面介紹 的要復(fù)雜,而且支持很多特性,比如使用糾刪碼就行尋址,所以大多數(shù)在生產(chǎn)環(huán)境 中使用ceph的公司都會(huì)有專(zhuān)門(mén)的團(tuán)隊(duì)對(duì)ceph進(jìn)行二次開(kāi)發(fā),ceph的運(yùn)維難度也 比較大。但是經(jīng)過(guò)合理的優(yōu)化之后,ceph的性能和穩(wěn)定性都是值得期待的。
Ceph核心概念
-
RADOS
可靠的、自動(dòng)化的、分布式對(duì)象存儲(chǔ)系統(tǒng)。RADOS是Ceph集群的精華,用戶(hù) 實(shí)現(xiàn)數(shù)據(jù)分配、Failover等集群操作。
-
Librados
上層的RBD、RGW和CephFS都是通過(guò)librados訪(fǎng)問(wèn)的,目前提供PHP、Ruby、 Java、Python、C和C++支持。
-
Crush
Crush算法在一致性哈希基礎(chǔ)上很好的考慮了容災(zāi)域的隔離,使得Ceph能夠 實(shí)現(xiàn)各類(lèi)負(fù)載的副本放置規(guī)則,例如跨機(jī)房、機(jī)架感知等。同時(shí),Crush算法 有相當(dāng)強(qiáng)大的擴(kuò)展性,理論上可以支持?jǐn)?shù)千個(gè)存儲(chǔ)節(jié)點(diǎn),這為Ceph在大規(guī)模 云環(huán)境中的應(yīng)用提供了先天的便利。
-
Pool
Pool是存儲(chǔ)對(duì)象的邏輯分區(qū),它規(guī)定了數(shù)據(jù)冗余的類(lèi)型和對(duì)應(yīng)的副本分布策 略,默認(rèn)存儲(chǔ)3份副本;支持兩種類(lèi)型:副本(replicated)和 糾刪碼( Erasure Code);
-
PG
放置策略組,它是對(duì)象的集合,該集合里的所有對(duì)象都具有相同的放置策略, 簡(jiǎn)單點(diǎn)說(shuō)就是相同PG內(nèi)的對(duì)象都會(huì)放到相同的硬盤(pán)上,PG是 ceph的邏輯概 念,服務(wù)端數(shù)據(jù)均衡和恢復(fù)的最小粒度就是PG,一個(gè)PG包含多個(gè)OSD。引入 PG這一層其實(shí)是為了更好的分配數(shù)據(jù)和定位數(shù)據(jù);
-
Object
簡(jiǎn)單來(lái)說(shuō)塊存儲(chǔ)讀寫(xiě)快,不利于共享,文件存儲(chǔ)讀寫(xiě)慢,利于共享。能否弄一 個(gè)讀寫(xiě)快,利于共享的出來(lái)呢。于是就有了對(duì)象存儲(chǔ)。最底層的存儲(chǔ)單元,包 含元數(shù)據(jù)和原始數(shù)據(jù)。
-
ceph資源劃分
-
ceph對(duì)象元數(shù)據(jù)
Ceph核心組件
-
OSD
OSD是負(fù)責(zé)物理存儲(chǔ)的進(jìn)程,一般配置成和磁盤(pán)一一對(duì)應(yīng),一塊磁盤(pán)啟動(dòng)一個(gè) OSD進(jìn)程。主要功能是存儲(chǔ)數(shù)據(jù)、復(fù)制數(shù)據(jù)、平衡數(shù)據(jù)、恢復(fù)數(shù)據(jù),以及與其 它OSD間進(jìn)行心跳檢查,負(fù)責(zé)響應(yīng)客戶(hù)端請(qǐng)求返回具體數(shù)據(jù)的進(jìn)程等;
-
Pool、PG和OSD的關(guān)系:
一個(gè)Pool里有很多PG;
一個(gè)PG里包含一堆對(duì)象,一個(gè)對(duì)象只能屬于一個(gè)PG;
PG有主從之分,一個(gè)PG分布在不同的OSD上(針對(duì)三副本類(lèi)型);
-
pool PG
-
OSD PG pool
-
Monitor
一個(gè)Ceph集群需要多個(gè)Monitor組成的小集群,它們通過(guò)Paxos同步數(shù)據(jù), 用來(lái)保存OSD的元數(shù)據(jù)。負(fù)責(zé)監(jiān)視整個(gè)Ceph集群運(yùn)行的Map視圖(如OSD Map、Monitor Map、PG Map和CRUSH Map),維護(hù)集群的健康狀態(tài),維護(hù)展 示集群狀態(tài)的各種圖表,管理集群客戶(hù)端認(rèn)證與授權(quán);生產(chǎn)中建議最少要用3 個(gè)Monitor,基數(shù)個(gè)的Monitor組成組件來(lái)做高可用。
-
MDS
CephFS服務(wù)依賴(lài)的元數(shù)據(jù)服務(wù)。負(fù)責(zé)保存文件系統(tǒng)的元數(shù)據(jù),管理目錄結(jié)構(gòu)。 對(duì)象存儲(chǔ)和塊設(shè)備存儲(chǔ)不需要元數(shù)據(jù)服務(wù);
-
Mgr
實(shí)現(xiàn) ceph 集群的管理,為外界提供統(tǒng)一的入口。
-
RGW
Ceph對(duì)外提供的對(duì)象存儲(chǔ)服務(wù),接口與S3和Swift兼容。
-
Admin
Ceph常用管理接口通常都是命令行工具,如rados、ceph、rbd等命令,另外 Ceph還有可以有一個(gè)專(zhuān)用的管理節(jié)點(diǎn),在此節(jié)點(diǎn)上面部署專(zhuān)用的管理工具來(lái) 實(shí)現(xiàn)近乎集群的一些管理工作,如集群部署,集群組件管理等。
Ceph三種存儲(chǔ)類(lèi)型
-
塊存儲(chǔ)(RBD)
優(yōu)點(diǎn):
a.通過(guò)Raid與LVM等手段,對(duì)數(shù)據(jù)提供了保護(hù);
b.多塊廉價(jià)的硬盤(pán)組合起來(lái),提高容量;
c.多塊磁盤(pán)組合出來(lái)的邏輯盤(pán),提升讀寫(xiě)效率;缺點(diǎn):
a.采用SAN架構(gòu)組網(wǎng)時(shí),光纖交換機(jī),造價(jià)成本高;
b.主機(jī)之間無(wú)法共享數(shù)據(jù);使用場(chǎng)景
a.docker容器、虛擬機(jī)磁盤(pán)存儲(chǔ)分配;
b.日志存儲(chǔ);
c.文件存儲(chǔ); -
文件存儲(chǔ)(CephFS)
優(yōu)點(diǎn):
a.造價(jià)低,隨便一臺(tái)機(jī)器就可以了;
b.方便文件共享;缺點(diǎn):
a.讀寫(xiě)速率低;
b.傳輸速率慢;使用場(chǎng)景
a.日志存儲(chǔ);
b.FTP、NFS;
c.其它有目錄結(jié)構(gòu)的文件存儲(chǔ) -
對(duì)象存儲(chǔ)(Object)(適合更新變動(dòng)較少的數(shù)據(jù))
優(yōu)點(diǎn):
a.具備塊存儲(chǔ)的讀寫(xiě)高速;
b.具備文件存儲(chǔ)的共享等特性;使用場(chǎng)景
a.圖片存儲(chǔ);
b.視頻存儲(chǔ);
如何將ssd作為hdd的緩存池
-
緩存池原理
緩存分層特性也是在Ceph的Firfly版中正式發(fā)布的,這也是Ceph的Firefly版本中 被談?wù)撟疃嗟囊粋€(gè)特性。緩存分層是在更快的磁盤(pán)(通常是SSD),上創(chuàng)建一 個(gè)Ceph池。這個(gè)緩存池應(yīng)放置在一個(gè)常規(guī)的復(fù)制池或erasure池的前端,這 樣所有的客戶(hù)端I/O操作都首先由緩存池處理。之后,再將數(shù)據(jù)寫(xiě)回到現(xiàn)有的 數(shù)據(jù)池中??蛻?hù)端能夠在緩存池上享受高性能,而它們的數(shù)據(jù)顯而易見(jiàn)最終是 被寫(xiě)入到常規(guī)池中的。
一般來(lái)說(shuō),緩存層構(gòu)建在昂貴/速度更快的SSD磁盤(pán)上,這樣才能為客戶(hù)提供更好 的I/O性能。在緩存池后端通常是存儲(chǔ)層,它由復(fù)制或者erasure類(lèi)型的HDD 組成。在這種類(lèi)型的設(shè)置中,客戶(hù)端將I/O請(qǐng)求提交到緩存池,不管它是一個(gè) 讀或?qū)懖僮?,它的?qǐng)求都能夠立即獲得響應(yīng)。速度更快的緩存層為客戶(hù)端請(qǐng)求 提供服務(wù)。一段時(shí)間后,緩存層將所有數(shù)據(jù)寫(xiě)回備用的存儲(chǔ)層,以便它可以緩 存來(lái)自客戶(hù)端的新請(qǐng)求。在緩存層和存儲(chǔ)層之間的數(shù)據(jù)遷移都是自動(dòng)觸發(fā)且對(duì) 客戶(hù)端是透明的。緩存分層能以?xún)煞N模式進(jìn)行配置。
-
writeback模式:
寫(xiě)操作時(shí),寫(xiě)入緩存池?;诰彺鎸觙lushing/evicting策略,數(shù)據(jù)將從緩存層 遷移到存儲(chǔ)層,并由緩存分層代理將其從緩存層中刪除。
讀操作時(shí),由緩存分層代理將數(shù)據(jù)從存儲(chǔ)層遷移到緩存層,然后再把它提供給 客戶(hù)。直到數(shù)據(jù)變得不再活躍或成為冷數(shù)據(jù),否則它將一直保留在緩存層 中。 -
read-only模式:
寫(xiě)操作不涉及緩存分層,所有的客戶(hù)端寫(xiě)都在存儲(chǔ)層上完成。
讀操作時(shí),在處理來(lái)自客戶(hù)端的讀操作時(shí),緩存分層代理將請(qǐng)求的數(shù)據(jù)從存儲(chǔ) 層復(fù)制到緩存層。基于你為緩存層配置的策略,不活躍的對(duì)象將會(huì)從緩存 層中刪除。這種方法非常適合多個(gè)客戶(hù)端需要讀取大量類(lèi)似數(shù)據(jù)的場(chǎng)景。緩存層是在速度更快的物理磁盤(pán)(通常是SSD),上實(shí)現(xiàn)的,它在使用HDD構(gòu)建 的速度較慢的常規(guī)池前部署一個(gè)快速的緩存層。在本節(jié)中,我們將創(chuàng)建兩個(gè)獨(dú) 立的池(一個(gè)緩存池和一個(gè)常規(guī)),分別用作緩存層和存儲(chǔ)層。
部署
機(jī)器需求
- 最少三臺(tái)Centos7系統(tǒng)虛擬機(jī)用于部署Ceph集群
- 硬件配置:2C4G
- 另外每臺(tái)機(jī)器最少掛載三塊硬盤(pán)
安裝前環(huán)境準(zhǔn)備
-
服務(wù)器初始化(參考初始化文檔)
-
安裝需要工具
yum install createrepo -y yum install epel-release -y yum install lttng-ust -y
-
關(guān)閉NetworkManager
systemctl disable NetworkManager systemctl stop NetworkManager
-
升級(jí)系統(tǒng)內(nèi)核
#查看內(nèi)核版本 uname -r cd 內(nèi)核文件/ yum -y install kernel-ml-5.7.8-1.el7.elrepo.x86_64.rpm kernel-ml-devel-5.7.8-1.el7.elrepo.x86_64.rpm #調(diào)整默認(rèn)啟動(dòng)內(nèi)核 cat /boot/grub2/grub.cfg | grep menuentry grub2-set-default "CentOS Linux (5.7.8-1.el7.elrepo.x86_64) 7 (Core)" #查看是否設(shè)置成功 grub2-editenv list reboot
-
主機(jī)名與IP對(duì)應(yīng)關(guān)系(必須配置主機(jī)名映射)
vim /etc/hosts 192.168.66.31 ceph-node1 192.168.66.32 ceph-node2 192.168.66.33 ceph-node3
-
ceph-node1操作節(jié)點(diǎn)上安裝ceph的yum源共享
安裝源
yum install httpd #上傳軟件包\ceph到/var/www/html/下 #啟動(dòng)httpd systemctl restart httpd systemctl enable httpd #更新yum源 createrepo --update /var/www/html/ceph/rpm-nautilus #(官方y(tǒng)um源 vim /etc/yum.repos.d/ceph.repo [Ceph] name=Ceph packages for $basearch baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/$basearch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc priority=1 [Ceph-noarch] name=Ceph noarch packages baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc priority=1 [ceph-source] name=Ceph source packages baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/SRPMS enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc )
編輯yum源文件
vim /etc/yum.repos.d/ceph.repo [Ceph] name=Ceph packages for $basearch baseurl=http://192.168.66.31/ceph/rpm-nautilus/el7/$basearch gpgcheck=0 priority=1 [Ceph-noarch] name=Ceph noarch packages baseurl=http://192.168.66.31/ceph/rpm-nautilus/el7/noarch gpgcheck=0 priority=1 [ceph-source] name=Ceph source packages baseurl=http://192.168.66.31/ceph/rpm-nautilus/el7/SRPMS gpgcheck=0 priority=1 [nfs-ganesha] name=nfs-ganesha baseurl=http://192.168.66.31/nfs-ganesha/el7/x86_64 gpgcheck=0 priority=1 [ceph-iscsi] name=ceph-iscsi noarch packages baseurl=http://192.168.66.31/ceph-iscsi/3/rpm/el7/noarch gpgcheck=0 priority=1 [ceph-iscsi-source] name=ceph-iscsi source packages baseurl=http://192.168.66.31/ceph-iscsi/3/rpm/el7/SRPMS gpgcheck=0 priority=1 [tcmu-runner] name=tcmu-runner baseurl=http://192.168.66.31/tcmu-runner/x86_64 gpgcheck=0 priority=1 [ceph-iscsi-conf] name=ceph-iscsi-config baseurl=http://192.168.66.31/ceph-iscsi-config/noarch gpgcheck=0 priority=1
在每臺(tái)node上執(zhí)行
yum makecache
-
安裝基礎(chǔ)ceph包每臺(tái)node
yum -y install ceph ceph -v
安裝Ceph集群
-
部署安裝工具
安裝 ceph-deploy在ceph-node1操作節(jié)點(diǎn)上
yum install -y ceph-deploy yum install python-setuptools -y ceph-deploy --version
創(chuàng)建一個(gè)my-cluster目錄,所有命令在此目錄下進(jìn)行ceph-node1操作節(jié)點(diǎn)上
mkdir /my-cluster cd /my-cluster
控制端無(wú)密碼連接所以節(jié)點(diǎn)和自己
ssh-keygen for i in 31 32 33; do ssh-copy-id root@192.168.66.$i; done
-
創(chuàng)建Ceph集群,生成Ceph配置文件(建議是奇數(shù))ceph-node1操作節(jié)點(diǎn)上
ceph-deploy new --public-network 對(duì)外網(wǎng)端 --cluster-network 192.168.66.0/24 ceph-node1 ceph-node2 ceph-node3 #--public-network沒(méi)有就不寫(xiě) #--cluster-network對(duì)內(nèi)通行網(wǎng)端 #ceph-nodex mon節(jié)點(diǎn)
允許刪除存儲(chǔ)池
ceph-node1操作節(jié)點(diǎn)上修改配置文件vim ceph.conf [global] ....... #允許刪除存儲(chǔ)池 mon_allow_pool_delete = true
-
安裝mon服務(wù),生成monitor檢測(cè)集群所使用的的秘鑰ceph-node1操作節(jié)點(diǎn)上
ceph-deploy mon create-initial
-
安裝管理命令Ceph CLIceph-node1操作節(jié)點(diǎn)上
如前所示,我們執(zhí)行admin的命令,要提供admin的key(–keyring ceph.client.admin.keyring)以及配置文件(-c ceph.conf)。在后續(xù)的運(yùn)維中,我們經(jīng)常 需要在某個(gè)node上執(zhí)行admin命令。每次都提供這些參數(shù)比較麻煩。實(shí)際上,ceph 會(huì)默認(rèn)地從/etc/ceph/中找keyring和ceph.conf。因此,我們可以把 ceph.client.admin.keyring和ceph.conf放到每個(gè)node的/etc/ceph/。ceph-deploy可 以幫做這些
ceph-deploy admin ceph-node1 ceph-node2 ceph-node3
-
添加osd(添加的磁盤(pán)必須是沒(méi)有被處理過(guò)的裸盤(pán))ceph-node1操作節(jié)點(diǎn)上
所有操作節(jié)點(diǎn)上初始化清空磁盤(pán)數(shù)據(jù)
ceph-volume lvm zap /dev/sdb /dev/sdc /dev/sdd ceph-deploy osd create --data /dev/sdb ceph-node1 ceph-deploy osd create --data /dev/sdc ceph-node1 ceph-deploy osd create --data /dev/sdd ceph-node1 ceph-deploy osd create --data /dev/sdb ceph-node2 ceph-deploy osd create --data /dev/sdc ceph-node2 ceph-deploy osd create --data /dev/sdd ceph-node2 ceph-deploy osd create --data /dev/sdb ceph-node3 ceph-deploy osd create --data /dev/sdc ceph-node3 ceph-deploy osd create --data /dev/sdd ceph-node3
-
檢查Ceph群集狀態(tài)。
ceph -s
-
#使用盤(pán)+盤(pán)的方式所有節(jié)點(diǎn)磁盤(pán)創(chuàng)建固態(tài)+集群盤(pán)組
對(duì)固態(tài)進(jìn)行分區(qū)
parted /dev/sdb mklabel gpt parted /dev/sdb mkpart primary 1 50% parted /dev/sdb mkpart primary 50% 100% #磁盤(pán)分區(qū)后的默認(rèn)權(quán)限無(wú)法讓ceph軟件對(duì)其進(jìn)行讀寫(xiě)操作
提權(quán)
chown ceph.ceph /dev/sdb1 chown ceph.ceph /dev/sdb2 vim /etc/udev/rules.d/70-sdb.rules ENV{DEVNAME}=="/dev/sdb1",OWNER="ceph",GROUP="ceph" ENV{DEVNAME}=="/dev/sdb2",OWNER="ceph",GROUP="ceph"
創(chuàng)建OSD存儲(chǔ)空間
ceph-deploy osd create --data /dev/sdc:/dev/sdb1 /dev/sdd:/dev/sdb2 ceph-node1 ceph-deploy osd create --data ceph-node2:/dev/sdc:/dev/sdb1 ceph-node2:/dev/sdd:/dev/sdb2 ceph-deploy osd create --data ceph-node3:/dev/sdc:/dev/sdb1 ceph-node3:/dev/sdd:/dev/sdb2
#使用pool+pool的方式(后面說(shuō))
-
部署監(jiān)控配置mgr,用于管理集群ceph-node1操作節(jié)點(diǎn)上
ceph-deploy mgr create ceph-node1 ceph-deploy mgr create ceph-node2 ceph-deploy mgr create ceph-node3
-
允許刪除存儲(chǔ)池以做
ceph-node1操作節(jié)點(diǎn)上修改配置文件
vim ceph.conf [global] ....... #允許刪除存儲(chǔ)池 mon_allow_pool_delete = true
使用ceph-deploy推配置給所有節(jié)點(diǎn)
ceph-deploy --overwrite-conf config push ceph-node1 ceph-node2 ceph-node3
所有節(jié)點(diǎn)重啟ceph-mon服務(wù)
systemctl restart ceph-mon.target
-
創(chuàng)建默認(rèn)pool,ceph-node1操作節(jié)點(diǎn)上
```powershell
ceph osd pool create rbd 32 32
ceph osd pool application enable rbd rbd
```
-
檢查狀態(tài)
OSD狀態(tài)
ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.29279 root default -3 0.09760 host cephnode01 0 hdd 0.04880 osd.0 up 1.00000 1.00000 1 hdd 0.04880 osd.1 up 1.00000 1.00000 -5 0.09760 host cephnode02 2 hdd 0.04880 osd.2 up 1.00000 1.00000 3 hdd 0.04880 osd.3 up 1.00000 1.00000 -7 0.09760 host cephnode03 4 hdd 0.04880 osd.4 up 1.00000 1.00000 5 hdd 0.04880 osd.5 up 1.00000 1.00000
整體運(yùn)行狀態(tài)
ceph -s cluster: id: a4c42290-00ac-4647-9856-a707d5f8f2fd health: HEALTH_OK services: mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03 (age 18m) mgr: cephnode01(active, since 34m), standbys: cephnode03, cephnode02 mds: 3 up:standby osd: 6 osds: 6 up (since 27m), 6 in (since 27m) rgw: 1 daemon active (cephnode01) data: pools: 4 pools, 128 pgs objects: 187 objects, 1.2 KiB usage: 6.0 GiB used, 294 GiB / 300 GiB avail pgs: 128 active+clean
檢查集群健康狀況的命令,后期用來(lái)查找故障
ceph health detail HEALTH_OK
Monitor狀態(tài)
ceph mon stat
Ceph Dashboard監(jiān)控
-
所有節(jié)點(diǎn)節(jié)點(diǎn)安裝
yum -y install ceph-mgr-dashboard
-
配置ceph-node1操作節(jié)點(diǎn)上
禁用 SSL
ceph config set mgr mgr/dashboard/ssl false #生成并安裝自簽名的證書(shū)ssl #ceph dashboard create-self-signed-cert
配置監(jiān)聽(tīng)I(yíng)P和 port
ceph config set mgr mgr/dashboard/server_addr 0.0.0.0 ceph config set mgr mgr/dashboard/server_port 8888 #IP 不設(shè)置,默認(rèn)綁定 ::,禁用 ssl 之后,PORT 默認(rèn)8080
創(chuàng)建一個(gè)dashboard登錄用戶(hù)名密碼
vim dashboard-password 123456 ceph dashboard ac-user-create admin -i ./dashboard-password administrator #更多操作,查看幫助 ceph dashboard -h
-
開(kāi)啟功能ceph-node1操作節(jié)點(diǎn)上
ceph mgr module enable dashboard ceph mgr module disable dashboard(注意修改了配置,要先停,在開(kāi)啟)
-
啟用功能
rgw啟用
#部署rgw #安裝實(shí)現(xiàn) ceph 集群的管理,為外界提供統(tǒng)一的入口,所有節(jié)點(diǎn) yum install -y ceph-radosgw #創(chuàng)建rgw實(shí)例ceph-node1操作節(jié)點(diǎn)上 ceph-deploy rgw create ceph-node1 ceph-deploy rgw create ceph-node2 ceph-deploy rgw create ceph-node3
#Dashboard中啟用RGWceph-node1操作節(jié)點(diǎn)上 #創(chuàng)建rgw系統(tǒng)賬戶(hù) radosgw-admin user create --uid=rgw --display-name=rgw --system #查看 radosgw-admin user info --uid=rgw #記下輸出的access_key 和 secret_key的值 "access_key": "DK81962PKOT9MURYBL3Y", "secret_key": "OABnPhViCWlYtNCyXxTQ7sr6xUVAYvvSgrTiNUQE" #為Dashboard設(shè)置access_key 和 secret_key echo DK81962PKOT9MURYBL3Y > access_key echo OABnPhViCWlYtNCyXxTQ7sr6xUVAYvvSgrTiNUQE > secret_key ceph dashboard set-rgw-api-access-key -i ./access_key ceph dashboard set-rgw-api-secret-key -i ./secret_key #禁用SSL ceph dashboard set-rgw-api-ssl-verify False
#檢測(cè) http://rgw-node:7480
cephfs啟用ceph-node1操作節(jié)點(diǎn)上
#創(chuàng)建cephfs實(shí)例 ceph-deploy mds create ceph-node1 ceph-deploy mds create ceph-node2 ceph-deploy mds create ceph-node3 #創(chuàng)建cephfs池 ceph osd pool create cephfs_data 32 ceph osd pool create cephfs_metadata 32 #創(chuàng)建文件系統(tǒng) ceph fs new cephfs cephfs_metadata cephfs_data #查看mds狀態(tài) ceph mds stat
-
查看服務(wù)訪(fǎng)問(wèn)方式,查看已開(kāi)啟模塊信息ceph-node1操作節(jié)點(diǎn)上
ceph mgr services
訪(fǎng)問(wèn):http://ceph-node1:8888/
創(chuàng)建nfs存儲(chǔ)
-
首先創(chuàng)建存儲(chǔ)池nfs-hmtd
#創(chuàng)建在SSD上 #ceph osd pool create nfs-hmtd on-ssd ceph osd pool create nfs-hmtd 32 32 ceph osd pool application enable nfs-hmtd nfs
-
部署NFS服務(wù)(這里我放在了appfor117\appfor210):
# ceph orch apply nfs *<svc_id>* *<pool>* *<namespace>* --placement="*<num-daemons>* [*<host1>* ...]" ceph orch apply nfs nfs-hmtd --pool nfs-hmtd nfs-ns --placement="appfor117 appfor210"
-
為了在dashboard中進(jìn)行操作,可以進(jìn)行如下設(shè)置:
ceph dashboard set-ganesha-clusters-rados-pool-namespace nfs-hmtd/nfs-ns
-
Ceph的NFS是基于CephFS提供的,我們首先在CephFS中創(chuàng)建一個(gè)/nfs目錄,用于作為NFS服務(wù)的根目錄。
mkdir /mnt/cephfs/nfs
-
其中mount的時(shí)候的secret是/etc/ceph/ceph.client.admin.keyring的值,也可以替換成
secretfile=/etc/ceph/ceph.client.admin.keyring。
創(chuàng)建Ceph塊存儲(chǔ)
-
創(chuàng)建存儲(chǔ)池pool
新建數(shù)據(jù)池
ceph osd pool create storage_(池名) 64
重命名pool
ceph osd pool rename storage_(舊池名) storage_(新池名)
設(shè)置存儲(chǔ)池副本數(shù)(默認(rèn)3副本)
ceph osd pool get storage_(池名) size ceph osd pool setstorage_(池名) size 3
給test使用的pool標(biāo)識(shí)成test
ceph osd pool application enable storage_(池名)/cache_(池名) test
查看存儲(chǔ)池
ceph osd lspools
#創(chuàng)建緩存+存儲(chǔ)(可以不操作) #新建數(shù)據(jù)池 ceph osd pool create storage_(池名) 64 #新建緩沖池 ceph osd pool create cache_(池名) 64 #把緩存層掛接到后端存儲(chǔ)池上 ceph osd tier add storage_(池名) cache_(池名) #設(shè)定緩沖池讀寫(xiě)策略為寫(xiě)回模式。 ceph osd tier cache-mode cache_(池名) writeback #將客戶(hù)端流量指向到緩存存儲(chǔ)池 ceph osd tier set-overlay storage_(池名) cache_(池名) #調(diào)整Cache tier配置 #1、設(shè)置緩存層hit_set_type使用bloom過(guò)濾器 ceph osd pool set cache_(池名) hit_set_type bloom #2、設(shè)置hit_set_count、hit_set_period #熱度數(shù)hit_set_count:HitSet 覆蓋的時(shí)間區(qū)間,保留多少個(gè)這樣的 HitSet,保留一段時(shí)間以來(lái)的訪(fǎng)問(wèn)記錄 #熱度周期hit_set_period:判斷一客戶(hù)端在一段時(shí)間內(nèi)訪(fǎng)問(wèn)了某對(duì)象 一次、還是多次 #最大緩沖數(shù)據(jù)target_max_bytes。 ceph osd pool set cache_(池名) hit_set_count 1 ceph osd pool set cache_(池名) hit_set_period 3600 ceph osd pool set cache_(池名) target_max_bytes 1000000000000 #3、設(shè)置min_read_recency_for_promete、min_write_recency_for_promote ceph osd pool set cache_(池名) min_read_recency_for_promote 1 ceph osd pool set cache_(池名) min_write_recency_for_promote 1 #緩存池容量控制 #刷寫(xiě)(flushing):負(fù)責(zé)把已經(jīng)被修改的對(duì)象寫(xiě)入到后端慢存儲(chǔ),但是對(duì) 象依然在緩沖池。 #驅(qū)逐(evicting):負(fù)責(zé)在緩沖池里銷(xiāo)毀那些沒(méi)有被修改的對(duì)象。 #(1)驅(qū)逐(容量百分比),緩沖池代理就開(kāi)始把這些數(shù)據(jù)刷寫(xiě)到后端慢存 儲(chǔ)。當(dāng)緩沖池里被修改的數(shù)據(jù)達(dá)到40%時(shí),則觸發(fā)刷寫(xiě)動(dòng)作。 ceph osd pool set cache_(池名) cache_target_dirty_ratio 0.4 #(2)驅(qū)逐指定數(shù)據(jù)對(duì)象數(shù)量或者確定的數(shù)據(jù)容量。對(duì)緩沖池設(shè)定最大的數(shù) 據(jù)容量 ceph osd pool set cache_(池名) target_max_bytes 1073741824 #(3)驅(qū)逐對(duì)緩沖池設(shè)定最大的對(duì)象數(shù)量。在默認(rèn)情況下,RBD的默認(rèn)對(duì) 象大小為 4MB,1GB容量包含256個(gè)4MB的對(duì)象 ceph osd pool set cache_(池名) target_max_objects 256 #4、對(duì)象有最短的刷寫(xiě)周期。 #設(shè)定最短的刷寫(xiě)周期:若被修改的對(duì)象在緩沖池里超過(guò)最短周期,將會(huì)被刷寫(xiě) 到慢存儲(chǔ)池(分鐘) ceph osd pool set cache_(池名) cache_min_flush_ age 600 #設(shè)定對(duì)象最短的驅(qū)逐周期 ceph osd pool set cache_(池名) cache_min_evict_age 1800 #刪除緩存層 #刪除readonly緩存 #把緩存模式改為 none 即可禁用 ceph osd tier cache-mode cache_(池名) none #去除后端存儲(chǔ)池的緩存池 ceph osd tier remove storage_(池名) cache_(池名) #刪除writeback緩存 #把緩存模式改為 forward ,這樣新的和更改過(guò)的對(duì)象將直接刷回到 后端存儲(chǔ)池 ceph osd tier cache-mode cache_(池名) forward --yes-i-really-mean-it #確保緩存池已刷回,可能要等數(shù)分鐘 rados ls -p cache_(池名) #可以通過(guò)以下命令進(jìn)行手動(dòng)刷回 rados -p cache_(池名) cache-flush-evict-all #取消流量指向緩存池 ceph osd tier remove-overlay storage_(池名) #剝離緩存池 ceph osd tier remove storage cache_(池名)
-
創(chuàng)建鏡像
方法一:默認(rèn)池中創(chuàng)建鏡像
rbd create cxk-image --image-feature layering --size 1G
方法二:指定池中創(chuàng)建鏡像
rbd create 池名/cxk-image --image-feature layering --size 1G
查看鏡像
rbd list 池名
查看詳細(xì)信息
rbd info 池名/cxk-image
-
鏡像動(dòng)態(tài)調(diào)整
擴(kuò)容容量
rbd resize --size 2G 池名/cxk-image
縮小容量
rbd resize --size 1G 池名/cxk-image --allow-shrink
-
刪除RBD塊設(shè)備
rbd rm 池名/cxk-image
鏡像快照操作 給鏡像創(chuàng)建快照 rbd snap create 池名/cxk-image --snap cxk-snap1 克隆快照
保護(hù)快照不讓刪除:rbd snap protect 池名/cxk-image --snap cxk-snap1 取消保護(hù):rbd snap
unprotect 池名/cxk-image --snap cxk-snap1 rbd clone 池名/cxk-image --snap
cxk-snap1 cxk-snap2 --image-feature layering 還原快照: rbd snap rollback
池名/cxk-image --snap cxk-snap1 把快照脫離父母獨(dú)立工作 rbd flatten cxk-snap1 刪除快照:
rbd snap rm 池名/cxk-image --snap cxk-snap1 查看快照: 查看鏡像快照 rbd snap ls
池名/cxk-image 查看克隆鏡像與父鏡像快照的關(guān)系 rbd info 池名/cxk-clone
客戶(hù)端通過(guò)KRBD訪(fǎng)問(wèn)塊存儲(chǔ)
-
客戶(hù)端安裝
yum install createrepo -y yum install epel-release -y yum install lttng-ust -y #指定共享的yum yum -y install ceph-common
-
客戶(hù)端拷貝ceph文件到本地、配置文件和連接密鑰文件
scp /my-cluster/ceph.conf root@192.168.66.242:/etc/ceph/ scp /my-cluster/ceph.client.admin.kevring root@192.168.66.242:/etc/ceph/
-
客戶(hù)端掛載服務(wù)端的鏡像
rbd map 池名/cxk-image 撤銷(xiāo)磁盤(pán)掛載: rbd unmap /dev/rbd0(掛載點(diǎn))
-
客戶(hù)端查看掛載服務(wù)端的鏡像
rbd showmapped lsblk
-
客戶(hù)端格式化、掛載分區(qū)
mkfs.xfs /dev/rbd0 mount /dev/rbd0 /mnt/
創(chuàng)建MDS文件系統(tǒng)(inode+block)
要使用 CephFS, 至少就需要一個(gè) metadata server 進(jìn)程??梢允謩?dòng)創(chuàng)建一個(gè) MDS, 也可以使 用 ceph-deploy 或者 ceph-ansible 來(lái)部署 MDS。
-
給那些osd部署mds服務(wù):
cd /my-cluster ceph-deploy mds create ceph-node1ceph-node2 ceph-node3 (可以繼續(xù)添加)
-
創(chuàng)建存儲(chǔ)池
數(shù)據(jù):ceph osd pool create cephfs_cxk_data 128 元數(shù)據(jù):ceph osd pool create cephfs_cxk_metadata 64 查看:ceph osd lspools
-
創(chuàng)建Ceph文件系統(tǒng)
ceph fs new myfs-cxk cephfs_cxk_metadata cephfs_cxk_data
-
查看
ceph fs ls
客戶(hù)端掛載
vim /etc/fstab
ip:6789,ip:6789,ip:6789:/ /mnt/cephfs ceph name=admin,secret=xxxxxx,_netdev 0 0
mount -t ceph MON節(jié)點(diǎn)的IP:6789:/ /mnt/cephfs/
-o name=admin,secret=AQC0FaJgu2A2ARAACbXjhYEeZTX+nlUJ+seDGw==
#注意:文件系統(tǒng)類(lèi)型為ceph
#admin是用戶(hù)名,secret是密鑰
#密鑰可以在/etc/ceph/ceph.client.admin.keyring中找到
創(chuàng)建RGW對(duì)象存儲(chǔ)
-
部署rgw服務(wù):
ceph-deploy rgw create ceph-node1(可以繼續(xù)添加)
-
登陸該節(jié)點(diǎn)驗(yàn)證服務(wù)是否啟動(dòng)
ps aux |grep radosgw
-
該節(jié)點(diǎn)修改服務(wù)端口
vim /etc/ceph/ceph.conf [client.rgw.node5] host = ceph-node1 rgw_frontends = "civetweb port=8000" //node5為主機(jī)名 //civetweb是RGW內(nèi)置的一個(gè)web服務(wù)
-
該節(jié)點(diǎn)重啟服務(wù)
systemctl status ceph-radosgw@\*
-
創(chuàng)建radosgw用戶(hù)
radosgw-admin user create --uid="radosgw" --display-name="radosgw" { "user_id": "radosgw", "display_name": "radosgw", "email": "", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [], "keys": [ { "user": "radosgw", "access_key": "DKOORDOMS6YHR2OW5M23", "secret_key": "OOBNCO0d03oiBaLCtYePPQ7gIeUR2Y7UuB24pBW4" } ], "swift_keys": [], "caps": [], "op_mask": "read, write, delete", "default_placement": "", "placement_tags": [], "bucket_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "user_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "temp_url_keys": [], "type": "rgw" }
客戶(hù)端安裝軟件
-
安裝
yum install s3cmd
-
修改軟件配置
s3cmd --configure Access Key: DKOORDOMS6YHR2OW5M23 Secret Key: OOBNCO0d03oiBaLCtYePPQ7gIeUR2Y7UuB24pBW4 Default Region [US]: ZH S3 Endpoint [s3.amazonaws.com]: 192.168.4.15:8000 [%(bucket)s.s3.amazonaws.com]: %(bucket)s.192.168.4.15:8000 Use HTTPS protocol [Yes]: no Test access with supplied credentials? [Y/n] n Save settings? [y/N] y
-
創(chuàng)建存儲(chǔ)數(shù)據(jù)的bucket(類(lèi)似于存儲(chǔ)數(shù)據(jù)的目錄)創(chuàng)建桶并放入文件
s3cmd ls s3cmd mb s3://my_bucket Bucket 's3://my_bucket/' created s3cmd ls 2018-05-09 08:14 s3://my_bucket s3cmd put /var/log/messages s3://my_bucket/log/ s3cmd ls s3://my_bucket DIR s3://my_bucket/log/ s3cmd ls s3://my_bucket/log/ 2018-05-09 08:19 309034 s3://my_bucket/log/messages
-
測(cè)試下載功能
s3cmd get s3://my_bucket/log/messages /tmp/
-
測(cè)試刪除功能
s3cmd del s3://my_bucket/log/messages
使用
集群監(jiān)控管理
-
集群整體運(yùn)行狀態(tài)
ceph -s
-
檢查集群健康狀況的命令,后期用來(lái)查找故障
ceph health detail HEALTH_OK
-
PG狀態(tài)
ceph pg dump ceph pg stat
-
Pool狀態(tài)
ceph osd pool stats
-
OSD狀態(tài)
ceph osd stat ceph osd dump ceph osd tree ceph osd df
-
Monitor狀態(tài)和查看仲裁狀態(tài)
ceph mon stat ceph mon dump ceph quorum_status
-
集群空間用量
ceph df ceph df detail
集群配置管理(臨時(shí)和全局,服務(wù)平滑重啟)
有時(shí)候需要更改服務(wù)的配置,但不想重啟服務(wù),或者是臨時(shí)修改。這時(shí)候就可以使用 tell和daemon子命令來(lái)完成此需求。
-
查看運(yùn)行配置
#命令格式: ceph daemon {daemon-type}.{id} config show #命令舉例: ceph daemon osd.0 config show
-
tell子命令格式
使用 tell 的方式適合對(duì)整個(gè)集群進(jìn)行設(shè)置,使用 * 號(hào)進(jìn)行匹配,就可以對(duì)整個(gè)集 群的角色進(jìn)行設(shè)置。而出現(xiàn)節(jié)點(diǎn)異常無(wú)法設(shè)置時(shí)候,只會(huì)在命令行當(dāng)中進(jìn)行報(bào)錯(cuò), 不太便于查找。
#命令格式: ceph tell {daemon-type}.{daemon id or *} injectargs --{name}={value} [--{name}={value}] #命令舉例: ceph tell osd.0 injectargs --debug-osd 20 --debug-ms 1 #daemon-type:為要操作的對(duì)象類(lèi)型如osd、mon、mds等。 #daemon id:該對(duì)象的名稱(chēng),osd通常為0、1等,mon為ceph -s顯示的名稱(chēng), 這里可以輸入*表示全部。 #injectargs:表示參數(shù)注入,后面必須跟一個(gè)參數(shù),也可以跟多個(gè)
-
daemon子命令
使用 daemon 進(jìn)行設(shè)置的方式就是一個(gè)個(gè)的去設(shè)置,這樣可以比較好的反饋,此 方法是需要在設(shè)置的角色所在的主機(jī)上進(jìn)行設(shè)置。
#命令格式: ceph daemon {daemon-type}.{id} config set {name}={value} #命令舉例: ceph daemon mon.ceph-monitor-1 config set mon_allow_pool_delete false
集群操作
命令包含start、restart、status
-
啟動(dòng)所有守護(hù)進(jìn)程
systemctl start ceph.target
-
按類(lèi)型啟動(dòng)守護(hù)進(jìn)程
systemctl restart ceph-mgr.target systemctl restart ceph-osd@id systemctl restart ceph-mon.target systemctl restart ceph-mds.target systemctl restart ceph-radosgw.target
-
更新所有節(jié)點(diǎn)的配置文件的命令
ceph-deploy --overwrite-conf config push cephnode01 cephnode02 cephnode03
添加和刪除OSD
添加OSD
-
格式化磁盤(pán)
ceph-volume lvm zap /dev/sd<id>
-
進(jìn)入到ceph-deploy執(zhí)行目錄/my-cluster,添加OSD
刪除OSD
-
調(diào)整osd的crush weight為 0
ceph osd crush reweight osd.<ID> 0.0
-
將osd進(jìn)程stop
systemctl stop ceph-osd@<ID>
-
將osd設(shè)置out
ceph osd out <ID>
-
立即執(zhí)行刪除OSD中數(shù)據(jù)
ceph osd purge osd.<ID> --yes-i-really-mean-it
-
卸載磁盤(pán)
umount /var/lib/ceph/osd/ceph-?
RDB快設(shè)備操作
-
創(chuàng)建
#方法一:默認(rèn)池中創(chuàng)建鏡像 rbd create cxk-image --image-feature layering --size 1G #方法二:指定池中創(chuàng)建鏡像 rbd create 池名/cxk-image --image-feature layering --size 1G
-
查看
#查看鏡像: rbd list 池名 #查看詳細(xì)信息: rbd info 池名/cxk-image
-
鏡像動(dòng)態(tài)調(diào)整
#擴(kuò)容容量 rbd resize --size 2G 池名/cxk-image #縮小容量 rbd resize --size 1G 池名/cxk-image --allow-shrink
-
刪除RBD塊設(shè)備
rbd rm 池名/cxk-image
-
快照操作
#給鏡像創(chuàng)建快照 rbd snap create 池名/cxk-image --snap cxk-snap1
#克隆快照 #保護(hù)快照不讓刪除: rbd snap protect 池名/cxk-image --snap cxk-snap1 #取消保護(hù): rbd snap unprotect 池名/cxk-image --snap cxk-snap1 rbd clone 池名/cxk-image --snap cxk-snap1 cxk-snap2 --image-feature layering
#還原快照: rbd snap rollback 池名/cxk-image --snap cxk-snap1
#把快照脫離父母獨(dú)立工作 rbd flatten cxk-snap1
#刪除快照: rbd snap rm 池名/cxk-image --snap cxk-snap1
#查看快照: #查看鏡像快照 rbd snap ls 池名/cxk-image #查看克隆鏡像與父鏡像快照的關(guān)系 rbd info 池名/cxk-clone
擴(kuò)容PG
ceph osd pool set {pool-name} pg_num 128
ceph osd pool set {pool-name} pgp_num 128
1、擴(kuò)容大小取跟它接近的2的N次方
2、在更改pool的PG數(shù)量時(shí),需同時(shí)更改PGP的數(shù)量。PGP是為了管理placement 而存在的專(zhuān)門(mén)的PG,它和PG的數(shù)量應(yīng)該保持一致。如果你增加pool的 pg_num,就需要同時(shí)增加pgp_num,保持它們大小一致,這樣集群才能正常 rebalancing。
Pool操作
-
列出存儲(chǔ)池
ceph osd lspools
-
創(chuàng)建存儲(chǔ)池
#命令格式: ceph osd pool create {pool-name} {pg-num} [{pgp-num}] #命令舉例: ceph osd pool create rbd 32 32
-
設(shè)置存儲(chǔ)池配額
#命令格式: ceph osd pool set-quota {pool-name} [max_objects {obj-count}] [max_bytes {bytes}] #命令舉例: ceph osd pool set-quota rbd max_objects 10000
-
刪除存儲(chǔ)池
在ceph.conf配置文件中添加如下內(nèi)容:
[global] ....... mon_allow_pool_delete = true
使用ceph-deploy推配置給所有節(jié)點(diǎn)
ceph-deploy --overwrite-conf config push cephnode1 cephnode2 cephnode3
重啟ceph-mon服務(wù)
systemctl restart ceph-mon.target
#執(zhí)行刪除pool命令 ceph osd pool delete {pool-name} [{pool-name} --yes-i-really-really-mean-it #命令舉例: ceph osd pool delete kube kube --yes-i-really-really-mean-it
-
重命名存儲(chǔ)池
ceph osd pool rename {current-pool-name} {new-pool-name}
-
查看存儲(chǔ)池統(tǒng)計(jì)信息
rados df
-
給存儲(chǔ)池做快照
ceph osd pool mksnap {pool-name} {snap-name}
-
刪除存儲(chǔ)池的快照
ceph osd pool rmsnap {pool-name} {snap-name}
-
獲取存儲(chǔ)池選項(xiàng)值
ceph osd pool get {pool-name} {key}
-
調(diào)整存儲(chǔ)池選項(xiàng)值
ceph osd pool set {pool-name} {key} {value} #size:設(shè)置存儲(chǔ)池中的對(duì)象副本數(shù),詳情參見(jiàn)設(shè)置對(duì)象副本數(shù)。僅適用于副本 存儲(chǔ)池。 #min_size:設(shè)置 I/O 需要的最小副本數(shù),詳情參見(jiàn)設(shè)置對(duì)象副本數(shù)。僅適用 于副本存儲(chǔ)池。 #pg_num:計(jì)算數(shù)據(jù)分布時(shí)的有效 PG 數(shù)。只能大于當(dāng)前 PG 數(shù)。 #pgp_num:計(jì)算數(shù)據(jù)分布時(shí)使用的有效 PGP 數(shù)量。小于等于存儲(chǔ)池的 PG 數(shù)。 #hashpspool:給指定存儲(chǔ)池設(shè)置/取消 HASHPSPOOL 標(biāo)志。 #target_max_bytes:達(dá)到 max_bytes 閥值時(shí)會(huì)觸發(fā) Ceph 沖洗或驅(qū)逐對(duì)象。 #target_max_objects:達(dá)到 max_objects 閥值時(shí)會(huì)觸發(fā) Ceph 沖洗或驅(qū)逐對(duì)象。 #scrub_min_interval:在負(fù)載低時(shí),洗刷存儲(chǔ)池的最小間隔秒數(shù)。如果是 0 , 就按照配置文件里的 osd_scrub_min_interval 。 #scrub_max_interval:不管集群負(fù)載如何,都要洗刷存儲(chǔ)池的最大間隔秒數(shù)。 如果是 0 ,就按照配置文件里的 osd_scrub_max_interval 。 #deep_scrub_interval:“深度”洗刷存儲(chǔ)池的間隔秒數(shù)。如果是 0 ,就按照配 置文件里的 osd_deep_scrub_interval 。
-
獲取對(duì)象副本數(shù)
ceph osd dump | grep 'replicated size'
用戶(hù)管理
Ceph 把數(shù)據(jù)以對(duì)象的形式存于各存儲(chǔ)池中。Ceph 用戶(hù)必須具有訪(fǎng)問(wèn)存儲(chǔ)池的權(quán)限才 能夠讀寫(xiě)數(shù)據(jù)。另外,Ceph 用戶(hù)必須具有執(zhí)行權(quán)限才能夠使用 Ceph 的管理命令。
-
查看用戶(hù)信息
#查看所有用戶(hù)信息 ceph auth list #獲取所有用戶(hù)的key與權(quán)限相關(guān)信息 ceph auth get client.admin #如果只需要某個(gè)用戶(hù)的key信息,可以使用pring-key子命令 ceph auth print-key client.admin
-
添加用戶(hù)
ceph auth add client.john mon 'allow r' osd 'allow rw pool=liverpool' ceph auth get-or-create client.paul mon 'allow r' osd 'allow rw pool=liverpool' ceph auth get-or-create client.george mon 'allow r' osd 'allow rw pool=liverpool' -o george.keyring ceph auth get-or-create-key client.ringo mon 'allow r' osd 'allow rw pool=liverpool' -o ringo.key
-
修改用戶(hù)權(quán)限
ceph auth caps client.john mon 'allow r' osd 'allow rw pool=liverpool' ceph auth caps client.paul mon 'allow rw' osd 'allow rwx pool=liverpool' ceph auth caps client.brian-manager mon 'allow *' osd 'allow *' ceph auth caps client.ringo mon ' ' osd ' '
-
刪除用戶(hù)
ceph auth del {TYPE}.{ID} #其中, {TYPE} 是 client,osd,mon 或 mds 的其中一種。{ID} 是用戶(hù)的名 字或守護(hù)進(jìn)程的 ID 。
常見(jiàn)錯(cuò)誤操作
1
health: HEALTH_WARN
1 daemons have recently crashed
#ceph報(bào)守護(hù)程序最近崩潰了的解決方法
ceph health detail
#新的崩潰可以通過(guò)以下方式列出
ceph crash ls-new
#有關(guān)特定崩潰的信息可以通過(guò)以下方法檢查
ceph crash info <crash-id>
#可以通過(guò)“存檔”崩潰(可能是在管理員檢查之后)來(lái)消除此警告,從而不會(huì)生成 此警告
ceph crash archive <crash-id>
#所有新的崩潰都可以通過(guò)以下方式存檔
ceph crash archive-all
#通過(guò)ceph crash ls仍然可以看到已存檔的崩潰
可以通過(guò)以下方式完全禁用這些警告
ceph config set mgr/crash/warn_recent_interval 0
2
health: HEALTH_WARN
mons are allowing insecure global_id reclaim
ceph health detail
ceph config set mon auth_allow_insecure_global_id_reclaim false
3
health: HEALTH_WARN
application not enabled on 1 pool(s)
ceph health detail
ceph osd pool application enable rbd rbd
4
HEALTH_WARN
Degraded data redundancy: 187/561 objects degraded (33.333%), 43 pgs degraded, 160 pgs undersized; OSD count 2 < osd_pool_default_size 3; mons are allowing insecure global_id reclaim
默認(rèn)3副本沒(méi)滿(mǎn)足
ceph共享節(jié)點(diǎn)擴(kuò)容
節(jié)點(diǎn)擴(kuò)容
擴(kuò)容mon
-
環(huán)境準(zhǔn)備
硬件配置:2C4G
另外每臺(tái)機(jī)器最少掛載三塊硬盤(pán) -
關(guān)閉防火墻:
systemctl stop firewalld systemctl disable firewalld
-
關(guān)閉selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config setenforce 0
-
關(guān)閉NetworkManager
systemctl disable NetworkManager systemctl stop NetworkManager
-
cephnode1操作機(jī)上主機(jī)名與IP對(duì)應(yīng)關(guān)系
vim /etc/hosts 192.168.66.10 cephnode1 192.168.66.11 cephnode2 192.168.66.12 cephnode3
-
設(shè)置文件描述符
echo "ulimit -SHn 102400" >> /etc/rc.local vim /etc/security/limits.conf * soft nofile 655360 * hard nofile 655360 root soft nofile 655360 root hard nofile 655360 * soft core unlimited * hard core unlimited root soft core unlimited
-
內(nèi)核參數(shù)優(yōu)化
vi /etc/sysctl.conf #僅在內(nèi)存不足的情況下--當(dāng)剩余空閑內(nèi)存低于vm.min_free_kbytes limit時(shí),使用交換空間。 vm.swappiness = 0 #單個(gè)進(jìn)程可分配的最大文件數(shù) fs.nr_open=2097152 #系統(tǒng)最大文件句柄數(shù) fs.file-max=1048576 #backlog 設(shè)置 net.core.somaxconn=32768 net.ipv4.tcp_max_syn_backlog=16384 net.core.netdev_max_backlog=16384 #TCP Socket 讀寫(xiě) Buffer 設(shè)置 net.core.rmem_default=262144 net.core.wmem_default=262144 net.core.rmem_max=16777216 net.core.wmem_max=16777216 net.core.optmem_max=16777216 net.ipv4.neigh.default.gc_stale_time=120 #TIME-WAIT Socket 最大數(shù)量、回收與重用設(shè)置 net.ipv4.tcp_max_tw_buckets=1048576 net.ipv4.tcp_tw_reuse=1 net.ipv4.tcp_tw_recycle=1 #TCP 連接追蹤設(shè)置 net.nf_conntrack_max=1000000 net.netfilter.nf_conntrack_max=1000000 net.netfilter.nf_conntrack_tcp_timeout_time_wait=30 # FIN-WAIT-2 Socket 超時(shí)設(shè)置 net.ipv4.tcp_fin_timeout=15 net.ipv4.ip_forward = 1 kernel.pid_max=4194303 sysctl -p
-
同步網(wǎng)絡(luò)時(shí)間和修改時(shí)區(qū)
yum -y install chrony vim /etc/chrony.conf systemctl restart chronyd systemctl enable chronyd chronyc sources
-
安裝createrepo和epel源(傳軟件包\安裝包到服務(wù)器上)
yum install createrepo -y yum install epel-release -y yum install lttng-ust -y
-
編輯yum源文件
vim /etc/yum.repos.d/ceph.repo [Ceph] name=Ceph packages for $basearch baseurl=http://192.168.0.6/ceph/rpm-nautilus/el7/$basearch gpgcheck=0 priority=1 [Ceph-noarch] name=Ceph noarch packages baseurl=http://192.168.0.6/ceph/rpm-nautilus/el7/noarch gpgcheck=0 priority=1 [ceph-source] name=Ceph source packages baseurl=http://192.168.0.6/ceph/rpm-nautilus/el7/SRPMS gpgcheck=0 priority=1 #執(zhí)行 yum makecache
-
傳軟件包\安裝包到服務(wù)器上
yum -y install ceph ceph -v
cephnode1操作節(jié)點(diǎn)上把新加mon加入集群
for i in 13 14; do ssh-copy-id root@192.168.66.$i; done
cd /my-cluster/
vim ceph.conf
mon_initial_members = cephnode1, cephnode2, cephnode3, cephnode4, cephnode5
mon_host = 192.168.66.10,192.168.66.11,192.168.66.12,192.168.66.13,192.168.66.14
public_network = 192.168.66.0/24
#配置文件推送到各各節(jié)點(diǎn)
ceph-deploy --overwrite-conf config push
cephnode1 cephnode2 cephnode3 cephnode4 cephnode5
ceph-deploy mon add cephnode4 --address 節(jié)點(diǎn)ip
ceph-deploy mon add cephnode5 --address 節(jié)點(diǎn)ip
cephnode1操作節(jié)點(diǎn)上安裝Ceph CLI,方便執(zhí)行一些管理命令
如前所示,我們執(zhí)行admin的命令,要提供admin的key(–keyring ceph.client.admin.keyring)以及配置文件(-c ceph.conf)。在后續(xù)的運(yùn)維中,我們經(jīng)常 需要在某個(gè)node上執(zhí)行admin命令。每次都提供這些參數(shù)比較麻煩。實(shí)際上,ceph 會(huì)默認(rèn)地從/etc/ceph/中找keyring和ceph.conf。因此,我們可以把 ceph.client.admin.keyring和ceph.conf放到每個(gè)node的/etc/ceph/。ceph-deploy可 以 幫做這些
ceph-deploy admin cephnode4 cephnode5
cephnode1操作節(jié)點(diǎn)上部署監(jiān)控配置mgr,用于管理集群
ceph-deploy mgr create cephnode4 cephnode5
cephnode1操作節(jié)點(diǎn)上部署MDS(CephFS)
ceph-deploy mds create cephnode4 cephnode5
cephnode1操作節(jié)點(diǎn)上添加osd(添加的磁盤(pán)必須是沒(méi)有被處理過(guò)的裸盤(pán))
ceph-deploy osd create --data /dev/sdb cephnode4
ceph-deploy osd create --data /dev/sdc cephnode4
ceph-deploy osd create --data /dev/sdb cephnode5
ceph-deploy osd create --data /dev/sdc cephnode5
檢查狀態(tài)
ceph osd tree
查看Ceph集群概況文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-403160.html
ceph -s
喜歡的親可以關(guān)注點(diǎn)贊評(píng)論哦!以后每天都會(huì)更新的哦!本文為小編原創(chuàng)文章; 文章中用到的文件、安裝包等可以加小編聯(lián)系方式獲得;
歡迎來(lái)交流小編聯(lián)系方式VX:CXKLittleBrother 進(jìn)入運(yùn)維交流群文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-403160.html
到了這里,關(guān)于ceph分布式存儲(chǔ)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!