分佈式存儲系統 Ceph 介紹與環境部署

語言: CN / TW / HK

一、概述

Ceph是當前非常流行的開源分佈式存儲系統,具有高擴展性、高性能、高可靠性等優點,同時提供塊存儲服務(rbd)、對象存儲服務(rgw)以及文件系統存儲服務(cephfs),Ceph在存儲的時候充分利用存儲節點的計算能力,在存儲每一個數據時都會通過計算得出該數據的位置,儘量的分佈均衡。目前也是OpenStack的主流後端存儲。

特點: - 高性能 - 摒棄了傳統的集中式存儲元數據尋址的方案,採用CRUSH算法,數據分佈均衡,並行度高。 - 考慮了容災域的隔離,能夠實現各類負載的副本放置規則,例如跨機房、機架感知等。 - 能夠支持上千個存儲節點的規模,支持TB到PB級的數據。 - 高可用性 - 副本數可以靈活控制。 - 支持故障域分隔,數據強一致性。 - 多種故障場景自動進行修復自愈。 - 沒有單點故障,自動管理。 - 高可擴展性 - 去中心化。 - 擴展靈活。 - 隨着節點增加而線性增長。 - 特性豐富 - 支持三種存儲接口:塊存儲、文件存儲、對象存儲。 - 支持自定義接口,支持多種語言驅動。

GitHub地址:http://github.com/ceph/ceph 官方文檔:http://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 http://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm -o cephadm chmod +x cephadm

或者:

curl http://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: http://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:

    http://docs.ceph.com/docs/master/mgr/telemetry/

``` 在這裏插入圖片描述

根據提示可知,有個web地址:http://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 介紹與環境部署就先到這了,怎麼使用,會放到下篇文章詳細介紹,小夥伴有任何疑問歡迎給我留言,後續會持續更新【雲原生+大數據】相關的文章,也可以關注我的公眾號【大數據與雲原生技術分享】