分佈式存儲系統 Ceph 介紹與環境部署
一、概述
Ceph是當前非常流行的開源分佈式存儲系統,具有高擴展性、高性能、高可靠性等優點,同時提供塊存儲服務(
rbd
)、對象存儲服務(rgw
)以及文件系統存儲服務(cephfs
),Ceph在存儲的時候充分利用存儲節點的計算能力,在存儲每一個數據時都會通過計算得出該數據的位置,儘量的分佈均衡。目前也是OpenStack的主流後端存儲。
特點: - 高性能 - 摒棄了傳統的集中式存儲元數據尋址的方案,採用CRUSH算法,數據分佈均衡,並行度高。 - 考慮了容災域的隔離,能夠實現各類負載的副本放置規則,例如跨機房、機架感知等。 - 能夠支持上千個存儲節點的規模,支持TB到PB級的數據。 - 高可用性 - 副本數可以靈活控制。 - 支持故障域分隔,數據強一致性。 - 多種故障場景自動進行修復自愈。 - 沒有單點故障,自動管理。 - 高可擴展性 - 去中心化。 - 擴展靈活。 - 隨着節點增加而線性增長。 - 特性豐富 - 支持三種存儲接口:塊存儲、文件存儲、對象存儲。 - 支持自定義接口,支持多種語言驅動。
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,即可靠的、自動化的、分佈式對象存儲系統。RADOS是Ceph集羣的精華,用户實現數據分配、Failover等集羣操作。
- Librados
——Rados提供庫,因為RADOS是協議很難直接訪問,因此上層的RBD、RGW和CephFS都是通過librados訪問的,目前提供PHP、Ruby、Java、Python、C和C++支持。
- MDS
——存儲Ceph文件系統的元數據。
三、Ceph核心組件介紹
OSD
——OSD是負責物理存儲的進程,一般配置成和磁盤一一對應,一塊磁盤啟動一個OSD進程。主要功能是存儲數據、複製數據、平衡數據、恢復數據,以及與其它OSD間進行心跳檢查,負責響應客户端請求返回具體數據的進程等。OSD 是Ceph集羣中存儲實際用户數據的惟一組件,通常,一個OSD守護進程綁定到集羣中的一個物理磁盤。因此,通常來説,Ceph集羣中物理磁盤的總數與在每個物理磁盤上存儲用户數據的OSD守護進程的總數相同。
PG
——ceph中引入了PG(placement group)的概念,PG是一個虛擬的概念而已,並不對應什麼實體。ceph先將object映射成PG,然後從PG映射成OSD。
-
Pool
——Pool是存儲對象的邏輯分區,它規定了數據宂餘的類型和對應的副本分佈策略,支持兩種類型:副本(replicated)和 糾刪碼( Erasure Code)。
Pool、PG和OSD的關係:
bash
一個Pool裏有很多PG;
一個PG裏包含一堆對象,一個對象只能屬於一個PG;
PG有主從之分,一個PG分佈在不同的OSD上(針對三副本類型);
- Monitor監控
——一個Ceph集羣需要多個Monitor組成的小集羣,它們通過Paxos同步數據,用來保存OSD的元數據。負責監控整個Ceph集羣運行的Map視圖(如OSD Map、Monitor Map、PG Map和CRUSH Map),維護集羣的健康狀態,維護展示集羣狀態的各種圖表,管理集羣客户端認證與授權。
- MDS
——MDS全稱Ceph Metadata Server,是CephFS服務依賴的元數據服務。負責保存文件系統的元數據,管理目錄結構。對象存儲和塊設備存儲不需要元數據服務; 如果不使用CephFS可以不安裝。
- Mgr
——ceph 官方開發了 ceph-mgr,主要目標實現 ceph 集羣的管理,為外界提供統一的入口。例如cephmetrics、zabbix、calamari、prometheus。
Ceph manager守護進程(Ceph -mgr)是在Kraken版本中引入的,它與monitor守護進程一起運行,為外部監視和管理系統提供額外的監視和接口。
- RGW
——RGW全稱RADOS gateway,是Ceph對外提供的對象存儲服務,接口與S3和Swift兼容。
- CephFS
——ceph文件系統提供了一個符合posix標準的文件系統,它使用Ceph存儲集羣在文件系統上存儲用户數據。與RBD(塊存儲)和RGW(對象存儲)一樣,CephFS服務也作為librados的本機接口實現。
四、Ceph 三種存儲類型
1)塊存儲服務(RBD)
塊是一個字節序列(通常為 512)。 基於塊的存儲接口是一種成熟且常見的數據存儲方式 介質包括硬盤、固態硬盤、CD、軟盤,甚至磁帶。 塊設備接口的無處不在非常適合交互 具有包括 Ceph 在內的海量數據存儲。Ceph 數據塊設備可精簡配置、可調整大小,並按條帶方式存儲數據在多個 OSD。
優點: - 通過Raid與LVM等手段,對數據提供了保護; - 多塊廉價的硬盤組合起來,提高容量; - 多塊磁盤組合出來的邏輯盤,提升讀寫效率;
缺點: - 採用SAN架構組網時,光纖交換機,造價成本高; - 主機之間無法共享數據;
使用場景: - docker容器、虛擬機磁盤存儲分配; - 日誌存儲; - 文件存儲;
總結: 一個Linux內核級的塊設備,允許用户像任何其他Linux塊設備一樣訪問Ceph。
2)文件系統存儲服務(CephFS)
Ceph 文件系統(CephFS),是建立在 Ceph 分佈式對象存儲的頂部, CephFS提供了最先進的、多用途、高度可用且高性能的文件存儲在各種場景應用,包括共享home目錄、FTP和NFS 共享存儲等等。
Ceph有了塊存儲,為什麼還需要文件系統接口呢?
主要是因為應用場景的不同,Ceph的塊設備具有優異的讀寫性能,但不能多處掛載同時讀寫,目前主要用在OpenStack上作為虛擬磁盤,而Ceph的文件系統接口讀寫性能較塊設備接口差,但具有優異的 共享性。
優點: - 造價低,隨便一台機器就可以了。 - 方便文件共享。
缺點: - 讀寫速率低。 - 傳輸速率慢。
使用場景: - 日誌存儲。 - 有目錄結構的文件存儲。
3)對象存儲服務(RGW)
Ceph 對象網關 是構建在 librados.它在應用程序和 Ceph 之間提供了一個 RESTful 網關。 存儲集羣。 Ceph 對象存儲 支持兩種接口:
- S3 兼容: 通過接口提供對象存儲功能 與 Amazon S3 RESTful API 的大部分子集兼容。
- 快速兼容: 通過接口提供對象存儲功能 與 OpenStack Swift API 的一大塊子集兼容。
優點: - 具備塊存儲的讀寫高速。 - 具備文件存儲的共享等特性。
使用場景: - 圖片存儲。 - 視頻存儲。
五、Ceph版本發行生命週期
Ceph從Nautilus
版本(14.2.0)開始,每年都會有一個新的穩定版發行,預計是每年的3月份發佈,每年的新版本都會起一個新的名稱(例如,“Mimic”)和一個主版本號(例如,13 代表 Mimic
,因為“M”是字母表的第 13 個字母)。
版本號的格式為x.y.z
,x表示發佈週期(例如,13 代表 Mimic,17代表Quincy),y表示發佈版本類型,即
- x.0.z - y等於0,表示開發版本
- x.1.z - y等於1,表示發佈候選版本(用於測試集羣)
- x.2.z - y等於2,表示穩定/錯誤修復版本(針對用户)
在Octopus
版本後使用cephadm來部署ceph集羣,如果使用cephadm部署,在後期新的版本升級時,可以做到完全自動化,並可以通過ceph -W cephadm查看升級進度,升級完成後,無法降級,升級時請不要跨版本升級,例如:當前使用Octopus升級到Quincy,要先把Octopus升級到Pacific,然後在升級至Quincy,這是最穩妥的方式。
穩定版本的生命週期在第一個發佈月份後,大約2年時間將停止該版本的更新維護,具體版本發佈時間見下表。
六、Ceph 集羣部署
Ceph的部署工具:
- ceph-deploy
:官方的部署工具,不再積極維護ceph-deploy。它不支持RHEL8,CentOS 8或更新的操作系統。
- ceph-ansible
:紅帽的部署工具
- ceph-chef
:利用chef進行自動部署Ceph的工具
- puppet-ceph
:puppet的ceph模塊
- cephadm
——cephadm 僅支援 Octopus 及更新版本(推薦)。
1)集羣部署規劃
| IP | hostname | 角色 | 磁盤 | 操作系統 | |--|--|--|--|--| | 192.168.182.130 | local-168-182-130 | monitor,mgr,rgw,mds,osd | 220G | centos7 | | 192.168.182.131 | local-168-182-131 | monitor,mgr,rgw,mds,osd| 220G | centos7 | | 192.168.182.132 | local-168-182-132 | monitor,mgr,rgw,mds,osd | 2*20G | centos7 |
monitor
:Ceph監視管理節點,承擔Ceph集羣重要的管理任務,一般需要3或5個節點。mgr
: Ceph 集羣管理節點(manager),為外界提供統一的入口。rgw
: Ceph對象網關,是一種服務,使客户端能夠利用標準對象存儲API來訪問Ceph集羣。mds
:Ceph元數據服務器,MetaData Server,主要保存的文件系統服務的元數據,使用文件存儲時才需要該組件。osd
:Ceph存儲節點Object Storage Daemon,實際負責數據存儲的節點。
2)前期準備
1、關閉filewalld服務
bash
systemctl stop firewalld.service
systemctl disable firewalld.service
2、關閉並禁用SELinux
bash
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
setenforce 0
3、配置hosts
bash
192.168.182.130 local-168-182-130
192.168.182.131 local-168-182-131
192.168.182.132 local-168-182-132
4、ssh免密配置
```bash ssh-keygen
...一路Enter
ssh-copy-id root@local-168-182-130 //會有一次密碼輸入 ssh-copy-id root@local-168-182-131 ssh-copy-id root@local-168-182-132 ```
4、配置時間同步
bash
yum install -y chrony
systemctl enable --now chronyd
3)添加磁盤
如果添加完磁盤,看不到,可以執行以下命令: ```bash
重新掃描SCSI總線添加設備
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan
```
4)安裝docker :(所有節點操作,包括新增)
```bash
centos7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
安裝yum-config-manager配置工具
yum -y install yum-utils
設置yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安裝docker-ce版本
yum install -y docker-ce
啟動docker服務並開機自啟
systemctl enable --now docker
查看版本號
docker --version
查看版本具體信息
docker version
Docker鏡像源設置
修改文件 /etc/docker/daemon.json,沒有這個文件就創建
添加以下內容後,重啟docker服務:
cat >/etc/docker/daemon.json<<EOF { "registry-mirrors": ["http://hub-mirror.c.163.com"] } EOF
systemctl restart docker ```
5)安裝cephadm
下載cephadm腳本: (只在主節點操作) ```bash mkdir -p /opt/ceph/my-cluster ; cd /opt/ceph/my-cluster curl --silent --remote-name --location https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm -o cephadm chmod +x cephadm
或者:
curl https://raw.githubusercontent.com/ceph/ceph/v15.2.1/src/cephadm/cephadm -o cephadm
chmod +x cephadm
//**//下載出錯:配置/etc/hosts 文件--—> 199.232.28.133 raw.githubusercontent.com
安裝python3:(所有節點執行)
yum install python3 -y
配置ceph存儲庫 :(或指定版本)
./cephadm add-repo --release octopus
或
./cephadm add-repo --version 15.2.1
開始安裝ceph-common,ceph工具
./cephadm install ceph-common ceph
安裝cephadm工具
./cephadm install which cephadm which ceph ```
6)初始化 ceph 集羣
當前節點安裝 mon、 mgr 角色,部署 prometheus、 grafana、 alertmanager、 node-exporter等服務。 ```bash
先安裝一個節點,其它節點通過後面的命令添加到集羣中即可
您需要知道用於集羣的第一個監視器守護程序的IP地址。
如果有多個網絡和接口,要確保選擇任何可供訪問Ceph羣集的主機訪問的網絡和接口。
cephadm bootstrap --mon-ip 192.168.182.130
命令特點:
在本地主機上為新集羣創建監視和管理器守護程序。
為Ceph集羣生成一個新的SSH密鑰,並將其添加到root用户的/root/.ssh/authorized_keys文件中。
將與新集羣進行通信所需的最小配置文件編寫為/etc/ceph/ceph.conf。
將client.admin管理密鑰的副本寫入/etc/ceph/ceph.client.admin.keyring。
將公用密鑰的副本寫入 /etc/ceph/ceph.pub。
查看部署的服務
docker ps
=======輸出信息=======
Ceph Dashboard is now available at:
URL: https://local-168-182-130:8443/
User: admin
Password: 0ard2l57ji
You can access the Ceph CLI with:
sudo /usr/sbin/cephadm shell --fsid d1e9b986-89b8-11ed-bec2-000c29ca76a9 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring
Please consider enabling telemetry to help improve Ceph:
ceph telemetry on
For more information see:
https://docs.ceph.com/docs/master/mgr/telemetry/
```
根據提示可知,有個web地址:https://ip:8443/
,這裏的截圖是部署完之後的截圖。
通過ceph命令查看集羣狀態
bash
ceph -s
7)添加新節點
在新主機的根用户authorized_keys文件中安裝羣集的公共SSH密鑰 :
bash
ssh-copy-id -f -i /etc/ceph/ceph.pub root@local-168-182-131
ssh-copy-id -f -i /etc/ceph/ceph.pub root@local-168-182-132
配置新節點
```bash ceph orch host add local-168-182-131 ceph orch host add local-168-182-132
第一次部署新節點時直接用上邊的命令即可:
但是之後的節點新增有可能上述命令出錯:
ceph orch host add local-168-182-131 192.168.182.133 #後邊跟上對應的IP
查看節點
ceph orch host ls
```
8)部署監視器(monitor)
```bash
ceph orch apply mon
確保在此列表中包括第一台(引導)主機。
ceph orch apply mon local-168-182-130,local-168-182-131,local-168-182-132 ```
9)部署 osd
存儲設備清單可以顯示為:
bash
ceph orch device ls
可用存儲設備的條件: - 設備必須沒有分區。 - 設備不得具有任何LVM狀態。 - 不得安裝設備。 - 該設備不得包含文件系統。 - 該設備不得包含Ceph BlueStore OSD。 - 設備必須大於5 GB。
創建osd的方式: ```bash
【第一種方式】告訴Ceph使用任何可用和未使用的存儲設備:
ceph orch apply osd --all-available-devices
【第二種方式】或者使用下面命令指定使用的磁盤(推薦使用這種方式吧)
1. ceph orch daemon add osd :
例如:
從特定主機上的特定設備創建OSD:
ceph orch daemon add osd local-168-182-130:/dev/sdb ceph orch daemon add osd local-168-182-130:/dev/sdc
ceph orch daemon add osd local-168-182-131:/dev/sdb ceph orch daemon add osd local-168-182-131:/dev/sdc
ceph orch daemon add osd local-168-182-132:/dev/sdb ceph orch daemon add osd local-168-182-132:/dev/sdc ``` 刪除OSD節點:(安全)
```bash
1.停止osd進程
ceph osd stop x //(x 可以通過ceph osd ls 查看)
停止osd的進程,這個是通知集羣這個osd進程不在了,不提供服務了,因為本身沒權重,就不會影響到整體的分佈,也就沒有遷移
2.將節點狀態標記為out
ceph osd out osd.x
停止到osd的進程,這個是通知集羣這個osd不再映射數據了,不提供服務了,因為本身沒權重,就不會影響到整體的分佈,也就沒有遷移
3. 從crush中移除節點
ceph osd crush remove osd.x 這個是從crush中刪除,
4. 刪除節點
ceph osd rm osd.x 這個是從集羣裏面刪除這個節點的記錄ls
5. 刪除節點認證(不刪除編號會佔住)
ceph auth del osd.x 這個是從認證當中去刪除這個節點的信息 ```
10)部署mds(cephFS元數據守護程序)
```bash
ceph orch apply mds --placement=" [ ...]"
ceph orch apply mds myfs --placement="3 local-168-182-130 local-168-182-131 local-168-182-132" ```
11)部署RGW
```bash
為特定領域和區域部署一組radosgw守護程序:
ceph orch apply rgw --placement=" [ ...]"
ceph orch apply rgw myorg us-east-1 --placement="3 local-168-182-130 local-168-182-131 local-168-182-132"
説明:
myorg : 領域名 (realm-name)
us-east-1: 區域名 (zone-name)myrgw
Cephadm將等待運行正常的羣集,並在部署rgw守護程序之前自動創建所提供的領域和區域(realm-name和zone-name不存在的情況)
``` 查看集羣狀態
bash
ceph -s
12)添加專用的ceph-mgr節點
```bash
ceph-mgr節點默認會挑選一主一備
添加新節點
ceph orch host add local-168-182-131 192.168.182.133
部署ceph-mgr
ceph orch apply mgr local-168-182-130,local-168-182-131,local-168-182-132
ceph orch apply mgr local-168-182-130,local-168-182-131,local-168-182-132,local-168-182-133
```
分佈式存儲系統 Ceph 介紹與環境部署就先到這了,怎麼使用,會放到下篇文章詳細介紹,小夥伴有任何疑問歡迎給我留言,後續會持續更新【雲原生+大數據】相關的文章,也可以關注我的公眾號【大數據與雲原生技術分享】
- Python Flask 介紹
- Python 基礎語法介紹(二)
- Python 高級編程之IO模型與協程(四)
- 分佈式存儲系統 Ceph 介紹與環境部署
- 【雲原生】Grafana Alerting 告警模塊介紹與實戰操作
- 【雲原生】Minio on k8s 講解與實戰操作
- 高性能分佈式對象存儲——MinIO(環境部署)
- 【雲原生】Flink on k8s 講解與實戰操作
- 【雲原生】Presto/Trino on k8s 環境部署
- 【雲原生】Hadoop on k8s 環境部署
- 【雲原生】Hadoop HA on k8s 環境部署
- 【雲原生】Azkaban on k8s 講解與實戰操作
- 【雲原生】zookeeper kafka on k8s 環境部署
- 【雲原生】MySQL on k8s 環境部署
- 【雲原生】Hive on k8s 環境部署
- 企業級日誌系統架構——ELK(Elasticsearch、Filebeat、Kafka、Logstash、Kibana)
- Kubernetes(k8s)權限管理RBAC詳解
- Kubernetes(k8s)kube-proxy、Service詳解
- Linux防火牆——Firewalld原理與實戰操作
- Kubernetes(k8s)基礎概念介紹