分布式存儲系統(tǒng) Ceph 介紹與環(huán)境部署
一、概述
Ceph是當前非常流行的開源分布式存儲系統(tǒng),具有高擴展性、高性能、高可靠性等優(yōu)點,同時提供塊存儲服務(rbd)、對象存儲服務(rgw)以及文件系統(tǒng)存儲服務(cephfs),Ceph在存儲的時候充分利用存儲節(jié)點的計算能力,在存儲每一個數(shù)據(jù)時都會通過計算得出該數(shù)據(jù)的位置,盡量的分布均衡。目前也是OpenStack的主流后端存儲。
特點:
- 高性能摒棄了傳統(tǒng)的集中式存儲元數(shù)據(jù)尋址的方案,采用CRUSH算法,數(shù)據(jù)分布均衡,并行度高??紤]了容災域的隔離,能夠實現(xiàn)各類負載的副本放置規(guī)則,例如跨機房、機架感知等。能夠支持上千個存儲節(jié)點的規(guī)模,支持TB到PB級的數(shù)據(jù)。
- 高可用性副本數(shù)可以靈活控制。支持故障域分隔,數(shù)據(jù)強一致性。多種故障場景自動進行修復自愈。沒有單點故障,自動管理。
- 高可擴展性去中心化。擴展靈活。隨著節(jié)點增加而線性增長。
- 特性豐富支持三種存儲接口:塊存儲、文件存儲、對象存儲。支持自定義接口,支持多種語言驅動。
GitHub地址:https://github.com/ceph/ceph
官方文檔:https://docs.ceph.com/en/latest/start/intro/
二、Ceph 架構
支持三種接口:
- Object:有原生的API,而且也兼容Swift和S3的API。
- Block:支持精簡配置、快照、克隆。
- File:Posix接口,支持快照。
- RADOS——全稱Reliable Autonomic Distributed Object Store,即可靠的、自動化的、分布式對象存儲系統(tǒng)。RADOS是Ceph集群的精華,用戶實現(xiàn)數(shù)據(jù)分配、Failover等集群操作。
- Librados——Rados提供庫,因為RADOS是協(xié)議很難直接訪問,因此上層的RBD、RGW和CephFS都是通過librados訪問的,目前提供PHP、Ruby、Java、Python、C和C++支持。
- MDS——存儲Ceph文件系統(tǒng)的元數(shù)據(jù)。
三、Ceph核心組件介紹
- OSD——OSD是負責物理存儲的進程,一般配置成和磁盤一一對應,一塊磁盤啟動一個OSD進程。主要功能是存儲數(shù)據(jù)、復制數(shù)據(jù)、平衡數(shù)據(jù)、恢復數(shù)據(jù),以及與其它OSD間進行心跳檢查,負責響應客戶端請求返回具體數(shù)據(jù)的進程等。
OSD 是Ceph集群中存儲實際用戶數(shù)據(jù)的惟一組件,通常,一個OSD守護進程綁定到集群中的一個物理磁盤。因此,通常來說,Ceph集群中物理磁盤的總數(shù)與在每個物理磁盤上存儲用戶數(shù)據(jù)的OSD守護進程的總數(shù)相同。
- PG——ceph中引入了PG(placement group)的概念,PG是一個虛擬的概念而已,并不對應什么實體。ceph先將object映射成PG,然后從PG映射成OSD。
- Pool——Pool是存儲對象的邏輯分區(qū),它規(guī)定了數(shù)據(jù)冗余的類型和對應的副本分布策略,支持兩種類型:副本(replicated)和 糾刪碼( Erasure Code)。
Pool、PG和OSD的關系:
- Monitor監(jiān)控——一個Ceph集群需要多個Monitor組成的小集群,它們通過Paxos同步數(shù)據(jù),用來保存OSD的元數(shù)據(jù)。負責監(jiān)控整個Ceph集群運行的Map視圖(如OSD Map、Monitor Map、PG Map和CRUSH Map),維護集群的健康狀態(tài),維護展示集群狀態(tài)的各種圖表,管理集群客戶端認證與授權。
- MDS——MDS全稱Ceph Metadata Server,是CephFS服務依賴的元數(shù)據(jù)服務。負責保存文件系統(tǒng)的元數(shù)據(jù),管理目錄結構。對象存儲和塊設備存儲不需要元數(shù)據(jù)服務; 如果不使用CephFS可以不安裝。
- Mgr——ceph 官方開發(fā)了 ceph-mgr,主要目標實現(xiàn) ceph 集群的管理,為外界提供統(tǒng)一的入口。例如cephmetrics、zabbix、calamari、prometheus。
Ceph manager守護進程(Ceph -mgr)是在Kraken版本中引入的,它與monitor守護進程一起運行,為外部監(jiān)視和管理系統(tǒng)提供額外的監(jiān)視和接口。
- RGW——RGW全稱RADOS gateway,是Ceph對外提供的對象存儲服務,接口與S3和Swift兼容。
- CephFS——ceph文件系統(tǒng)提供了一個符合posix標準的文件系統(tǒng),它使用Ceph存儲集群在文件系統(tǒng)上存儲用戶數(shù)據(jù)。與RBD(塊存儲)和RGW(對象存儲)一樣,CephFS服務也作為librados的本機接口實現(xiàn)。
四、Ceph 三種存儲類型
1)塊存儲服務(RBD)
塊是一個字節(jié)序列(通常為 512)。 基于塊的存儲接口是一種成熟且常見的數(shù)據(jù)存儲方式 介質包括硬盤、固態(tài)硬盤、CD、軟盤,甚至磁帶。 塊設備接口的無處不在非常適合交互 具有包括 Ceph 在內(nèi)的海量數(shù)據(jù)存儲。Ceph 數(shù)據(jù)塊設備可精簡配置、可調(diào)整大小,并按條帶方式存儲數(shù)據(jù)在多個 OSD。
優(yōu)點:
- 通過Raid與LVM等手段,對數(shù)據(jù)提供了保護;
- 多塊廉價的硬盤組合起來,提高容量;
- 多塊磁盤組合出來的邏輯盤,提升讀寫效率;
缺點:
- 采用SAN架構組網(wǎng)時,光纖交換機,造價成本高;
- 主機之間無法共享數(shù)據(jù);
使用場景:
- docker容器、虛擬機磁盤存儲分配;
- 日志存儲;
- 文件存儲;
總結: 一個Linux內(nèi)核級的塊設備,允許用戶像任何其他Linux塊設備一樣訪問Ceph。
2)文件系統(tǒng)存儲服務(CephFS)
Ceph 文件系統(tǒng)(CephFS),是建立在 Ceph 分布式對象存儲的頂部, CephFS提供了最先進的、多用途、高度可用且高性能的文件存儲在各種場景應用,包括共享home目錄、FTP和NFS 共享存儲等等。
Ceph有了塊存儲,為什么還需要文件系統(tǒng)接口呢?
主要是因為應用場景的不同,Ceph的塊設備具有優(yōu)異的讀寫性能,但不能多處掛載同時讀寫,目前主要用在OpenStack上作為虛擬磁盤,而Ceph的文件系統(tǒng)接口讀寫性能較塊設備接口差,但具有優(yōu)異的 共享性。
優(yōu)點:
- 造價低,隨便一臺機器就可以了。
- 方便文件共享。
缺點:
- 讀寫速率低。
- 傳輸速率慢。
使用場景:
- 日志存儲。
- 有目錄結構的文件存儲。
3)對象存儲服務(RGW)
Ceph 對象網(wǎng)關 是構建在 librados.它在應用程序和 Ceph 之間提供了一個 RESTful 網(wǎng)關。 存儲集群。 Ceph 對象存儲 支持兩種接口:
- S3 兼容: 通過接口提供對象存儲功能 與 Amazon S3 RESTful API 的大部分子集兼容。
- 快速兼容: 通過接口提供對象存儲功能 與 OpenStack Swift API 的一大塊子集兼容。
優(yōu)點:
- 具備塊存儲的讀寫高速。
- 具備文件存儲的共享等特性。
使用場景:
- 圖片存儲。
- 視頻存儲。
五、Ceph版本發(fā)行生命周期
Ceph從Nautilus版本(14.2.0)開始,每年都會有一個新的穩(wěn)定版發(fā)行,預計是每年的3月份發(fā)布,每年的新版本都會起一個新的名稱(例如,“Mimic”)和一個主版本號(例如,13 代表 Mimic,因為“M”是字母表的第 13 個字母)。
版本號的格式為x.y.z,x表示發(fā)布周期(例如,13 代表 Mimic,17代表Quincy),y表示發(fā)布版本類型,即
- x.0.z - y等于0,表示開發(fā)版本
- x.1.z - y等于1,表示發(fā)布候選版本(用于測試集群)
- x.2.z - y等于2,表示穩(wěn)定/錯誤修復版本(針對用戶)
在Octopus版本后使用cephadm來部署ceph集群,如果使用cephadm部署,在后期新的版本升級時,可以做到完全自動化,并可以通過ceph -W cephadm查看升級進度,升級完成后,無法降級,升級時請不要跨版本升級,例如:當前使用Octopus升級到Quincy,要先把Octopus升級到Pacific,然后在升級至Quincy,這是最穩(wěn)妥的方式。
穩(wěn)定版本的生命周期在第一個發(fā)布月份后,大約2年時間將停止該版本的更新維護,具體版本發(fā)布時間見下表。
六、Ceph 集群部署
Ceph的部署工具:
- ceph-deploy:官方的部署工具,不再積極維護ceph-deploy。它不支持RHEL8,CentOS 8或更新的操作系統(tǒng)。
- ceph-ansible:紅帽的部署工具
- ceph-chef:利用chef進行自動部署Ceph的工具
- puppet-ceph:puppet的ceph模塊
- cephadm——cephadm 僅支援 Octopus 及更新版本(推薦)。
1)集群部署規(guī)劃
IP | hostname | 角色 | 磁盤 | 操作系統(tǒng) |
192.168.182.130 | local-168-182-130 | monitor,mgr,rgw,mds,osd | 2*20G | centos7 |
192.168.182.131 | local-168-182-131 | monitor,mgr,rgw,mds,osd | 2*20G | centos7 |
192.168.182.132 | local-168-182-132 | monitor,mgr,rgw,mds,osd | 2*20G | centos7 |
- monitor:Ceph監(jiān)視管理節(jié)點,承擔Ceph集群重要的管理任務,一般需要3或5個節(jié)點。
- mgr: Ceph 集群管理節(jié)點(manager),為外界提供統(tǒng)一的入口。
- rgw: Ceph對象網(wǎng)關,是一種服務,使客戶端能夠利用標準對象存儲API來訪問Ceph集群。
- mds:Ceph元數(shù)據(jù)服務器,MetaData Server,主要保存的文件系統(tǒng)服務的元數(shù)據(jù),使用文件存儲時才需要該組件。
- osd:Ceph存儲節(jié)點Object Storage Daemon,實際負責數(shù)據(jù)存儲的節(jié)點。
2)前期準備
- 關閉filewalld服務
- 2、關閉并禁用SELinux
- 3、配置hosts
- 4、ssh免密配置
- 4、配置時間同步
3)添加磁盤
如果添加完磁盤,看不到,可以執(zhí)行以下命令:
4)安裝docker :(所有節(jié)點操作,包括新增)
5)安裝cephadm
下載cephadm腳本: (只在主節(jié)點操作)
6)初始化 ceph 集群
當前節(jié)點安裝 mon、 mgr 角色,部署 prometheus、 grafana、 alertmanager、 node-exporter等服務。
根據(jù)提示可知,有個web地址:https://ip:8443/,這里的截圖是部署完之后的截圖。
通過ceph命令查看集群狀態(tài)
7)添加新節(jié)點
在新主機的根用戶authorized_keys文件中安裝群集的公共SSH密鑰 :
配置新節(jié)點
8)部署監(jiān)視器(monitor)
9)部署 osd
存儲設備清單可以顯示為:
可用存儲設備的條件:
- 設備必須沒有分區(qū)。
- 設備不得具有任何LVM狀態(tài)。
- 不得安裝設備。
- 該設備不得包含文件系統(tǒng)。
- 該設備不得包含Ceph BlueStore OSD。
- 設備必須大于5 GB。
創(chuàng)建osd的方式:
刪除OSD節(jié)點:(安全)
10)部署mds(cephFS元數(shù)據(jù)守護程序)
11)部署RGW
查看集群狀態(tài)