ceph-mimic版


Ceph架構介紹

Ceph使用RADOS提供對象存儲,通過librados封裝庫提供多種存儲方式的文件和對象轉換。外層通過RGW(Object,有原生的API,而且也兼容Swift和S3的API,適合單客戶端使用)、RBD(Block,支持精簡配置、快照、克隆,適合多客戶端有目錄結構)、CephFS(File,Posix接口,支持快照,社會和更新變動少的數據,沒有目錄結構不能直接打開)將數據寫入存儲。

  • 高性能 a. 摒棄了傳統的集中式存儲元數據尋址的方案,采用CRUSH算法,數據分布均衡,並行度高 b.考慮了容災域的隔離,能夠實現各類負載的副本放置規則,例如跨機房、機架感知等 c. 能夠支持上千個存儲節點的規模,支持TB到PB級的數據

  • 高可擴展性 a. 去中心化 b. 擴展靈活 c. 隨着節點增加而線性增長

  • 特性豐富 a. 支持三種存儲接口:塊存儲、文件存儲、對象存儲 b. 支持自定義接口,支持多種語言驅動

Ceph核心概念

RADOS

全稱Reliable Autonomic Distributed Object Store,即可靠的、自動化的、分布式對象存儲系統。RADOS是Ceph集群的精華,用戶實現數據分配、Failover等集群操作。

Librados

Rados提供庫,因為RADOS是協議很難直接訪問,因此上層的RBD、RGW和CephFS都是通過librados訪問的,目前提供PHP、Ruby、Java、Python、C和C++支持。

Crush

Crush算法是Ceph的兩大創新之一,通過Crush算法的尋址操作,Ceph得以摒棄了傳統的集中式存儲元數據尋址方案。而Crush算法在一致性哈希基礎上很好的考慮了容災域的隔離,使得Ceph能夠實現各類負載的副本放置規則,例如跨機房、機架感知等。同時,Crush算法有相當強大的擴展性,理論上可以支持數千個存儲節點,這為Ceph在大規模雲環境中的應用提供了先天的便利。

Pool

Pool是存儲對象的邏輯分區,它規定了數據冗余的類型和對應的副本分布策略,支持兩種類型:副本(replicated)和 糾刪碼( Erasure Code);

PG

PG( placement group)是一個放置策略組,它是對象的集合,該集合里的所有對象都具有相同的放置策略,簡單點說就是相同PG內的對象都會放到相同的硬盤上,PG是 ceph的邏輯概念,服務端數據均衡和恢復的最小粒度就是PG,一個PG包含多個OSD。引入PG這一層其實是為了更好的分配數據和定位數據;

Object

簡單來說塊存儲讀寫快,不利於共享,文件存儲讀寫慢,利於共享。能否弄一個讀寫快,利 於共享的出來呢。於是就有了對象存儲。最底層的存儲單元,包含元數據和原始數據。

Ceph核心組件

OSD

OSD是負責物理存儲的進程,一般配置成和磁盤一一對應,一塊磁盤啟動一個OSD進程。主要功能是存儲數據、復制數據、平衡數據、恢復數據,以及與其它OSD間進行心跳檢查,負責響應客戶端請求返回具體數據的進程等;

Pool、PG和OSD的關系:

  • 一個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服務依賴的元數據服務。負責保存文件系統的元數據,管理目錄結構。對象存儲和塊設備存儲不需要元數據服務;

Mgr

ceph 官方開發了 ceph-mgr,主要目標實現 ceph 集群的管理,為外界提供統一的入口。例如cephmetrics、zabbix、calamari、promethus

RGW

RGW全稱RADOS gateway,是Ceph對外提供的對象存儲服務,接口與S3和Swift兼容。

Admin

Ceph常用管理接口通常都是命令行工具,如rados、ceph、rbd等命令,另外Ceph還有可以有一個專用的管理節點,在此節點上面部署專用的管理工具來實現近乎集群的一些管理工作,如集群部署,集群組件管理等。

Ceph三種存儲類型

1、 塊存儲(RBD)
  • 優點:

    • 通過Raid與LVM等手段,對數據提供了保護;

    • 多塊廉價的硬盤組合起來,提高容量;

    • 多塊磁盤組合出來的邏輯盤,提升讀寫效率;

  • 缺點:

    • 采用SAN架構組網時,光纖交換機,造價成本高;

    • 主機之間無法共享數據;

  • 使用場景

    • docker容器、虛擬機磁盤存儲分配;

    • 日志存儲;

    • 文件存儲;

2、文件存儲(CephFS)
  • 優點:

    • 造價低,隨便一台機器就可以了;

    • 方便文件共享;

  • 缺點:

    • 讀寫速率低;

    • 傳輸速率慢;

  • 使用場景

    • 日志存儲;

    • FTP、NFS;

    • 其它有目錄結構的文件存儲

3、對象存儲(Object)(適合更新變動較少的數據)
  • 優點:

    • 具備塊存儲的讀寫高速;

    • 具備文件存儲的共享等特性;

  • 使用場景

    • 圖片存儲;

    • 視頻存儲;

Ceph版本選擇

Ceph 社區最新版本是 14,而 Ceph 12 是市面用的最廣的穩定版本。 第一個 Ceph 版本是 0.1 ,要回溯到 2008 年 1 月。多年來,版本號方案一直沒變,直到 2015 年 4 月 0.94.1 ( Hammer 的第一個修正版)發布后,為了避免 0.99 (以及 0.100 或 1.00 ?),制定了新策略。

x.0.z - 開發版(給早期測試者和勇士們)

x.1.z - 候選版(用於測試集群、高手們)

x.2.z - 穩定、修正版(給用戶們)

x 將從 9 算起,它代表 Infernalis ( I 是第九個字母),這樣第九個發布周期的第一個開發版就是 9.0.0 ;后續的開發版依次是 9.0.1 、 9.0.2 等等。

版本名稱 版本號 發布時間
Argonaut 0.48版本(LTS) 2012年6月3日
Bobtail 0.56版本(LTS) 2013年5月7日
Cuttlefish 0.61版本 2013年1月1日
Dumpling 0.67版本(LTS) 2013年8月14日
Emperor 0.72版本 2013年11月9
Firefly 0.80版本(LTS) 2014年5月
Giant Giant October 2014 - April 2015
Hammer Hammer April 2015 - November 2016
Infernalis Infernalis November 2015 - June 2016
Jewel 10.2.9 2016年4月
Kraken 11.2.1 2017年10月
Luminous 12.2.12 2017年10月
mimic 13.2.7 2018年5月
nautilus 14.2.5 2019年2月

mimic新版本特性

  • Bluestore

    • ceph-osd的新后端存儲BlueStore已經穩定,是新創建的OSD的默認設置。 BlueStore通過直接管理物理HDD或SSD而不使用諸如XFS的中間文件系統,來管理每個OSD存儲的數據,這提供了更大的性能和功能。

    • BlueStore支持Ceph存儲的所有的完整的數據和元數據校驗。

    • BlueStore內嵌支持使用zlib,snappy或LZ4進行壓縮。(Ceph還支持zstd進行RGW壓縮,但由於性能原因,不為BlueStore推薦使用zstd)

  • 集群的總體可擴展性有所提高。我們已經成功測試了多達10,000個OSD的集群。

  • ceph-mgr

    • ceph-mgr是一個新的后台進程,這是任何Ceph部署的必須部分。雖然當ceph-mgr停止時,IO可以繼續,但是度量不會刷新,並且某些與度量相關的請求(例如,ceph df)可能會被阻止。我們建議您多部署ceph-mgr的幾個實例來實現可靠性。

    • ceph-mgr守護進程daemon包括基於REST的API管理。注:API仍然是實驗性質的,目前有一些限制,但未來會成為API管理的基礎。

    • ceph-mgr還包括一個Prometheus插件。

    • ceph-mgr現在有一個Zabbix插件。使用zabbix_sender,它可以將集群故障事件發送到Zabbix Server主機。這樣可以方便地監視Ceph群集的狀態,並在發生故障時發送通知。

安裝前准備
  • 最少三台Centos7系統虛擬機用於部署Ceph集群。硬件配置:2C4G,另外每台機器最少掛載三塊硬盤(每塊盤5G) cephnode01 192.168.0.132 cephnode02 192.168.0.133 cephnode03 192.168.0.134

環境准備(在Ceph三台機器上操作)

1)關閉防火牆:
systemctl stop firewalld
systemctl disable firewalld
(2)關閉selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 03)關閉NetworkManager
systemctl disable NetworkManager && systemctl stop NetworkManager
(4)添加主機名與IP對應關系:
vim /etc/hosts
192.168.0.201 cephnode01
192.168.0.202 cephnode02
192.168.0.203 cephnode03
(5)設置主機名:
hostnamectl set-hostname cephnode01
hostnamectl set-hostname cephnode02
hostnamectl set-hostname cephnode03
(6)同步網絡時間和修改時區
systemctl restart chronyd.service && systemctl enable chronyd.service
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
(7)設置文件描述符
echo "ulimit -SHn 102400" >> /etc/rc.local
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
EOF
(8)內核參數優化
cat >> /etc/sysctl.conf << EOF
kernel.pid_max = 4194303
vm.swappiness = 0 
EOF
sysctl -p
(9)在cephnode01上配置免密登錄到cephnode02、cephnode03
ssh-copy-id root@cephnode02
ssh-copy-id root@cephnode03
(10)read_ahead,通過數據預讀並且記載到隨機訪問內存方式提高磁盤讀操作
echo "8192" > /sys/block/sda/queue/read_ahead_kb
(11) I/O Scheduler,SSD要用noop,SATA/SAS使用deadline
echo "deadline" >/sys/block/sd[x]/queue/scheduler
echo "noop" >/sys/block/sd[x]/queue/scheduler
安裝Ceph集群

編輯內網yum源,將yum源同步到其它節點並提前做好yum makecache

# vim /etc/yum.repos.d/ceph.repo 
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/$basearch
gpgcheck=0
priority=1

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch
gpgcheck=0
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS
gpgcheck=0
priority=1

安裝ceph-deploy,在node01執行(確認ceph-deploy版本是否為2.0.1,)

# yum install -y ceph-deploy

# ceph-deploy --version
Traceback (most recent call last):
  File "/usr/bin/ceph-deploy", line 18, in <module>
    from ceph_deploy.cli import main
  File "/usr/lib/python2.7/site-packages/ceph_deploy/cli.py", line 1, in <module>
    import pkg_resources
ImportError: No module named pkg_resources

解決報錯
# yum install ceph-deploy python-pip python-setuptools -y
# ceph-deploy --version
2.0.1

創建一個my-cluster目錄,所有命令在此目錄下進行,在node01執行(文件位置和名字可以隨意)

# mkdir /my-cluster
# cd /my-cluster

創建一個Ceph集群,在node01執行

# ceph-deploy new cephnode01 cephnode02 cephnode03 

安裝Ceph軟件(每個節點執行)

# yum -y install epel-release
# yum install -y ceph

生成monitor檢測集群所使用的的秘鑰

# ceph-deploy mon create-initial

安裝Ceph CLI,方便執行一些管理命令

# ceph-deploy admin cephnode01 cephnode02 cephnode03

配置mgr,用於管理集群

# ceph-deploy mgr create cephnode01 cephnode02 cephnode03

部署rgw

# yum install -y ceph-radosgw
# ceph-deploy rgw create cephnode01

部署MDS(CephFS)

# ceph-deploy mds create cephnode01 cephnode02 cephnode03 

添加osd

for dev in /dev/sdb /dev/sdc /dev/sdd
do
  ceph-deploy osd create cephnode01 --data $dev
  ceph-deploy osd create cephnode02 --data $dev
  ceph-deploy osd create cephnode03 --data $dev
done

查看

[root@cephnode01 my-cluster]# ceph -s
cluster:
id: f23ede63-7119-47b2-8f3b-d52797d16a03
health: HEALTH_OK

services:
mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03
mgr: cephnode01(active), standbys: cephnode02, cephnode03
osd: 9 osds: 9 up, 9 in

data:
pools: 5 pools, 96 pgs
objects: 187 objects, 1.1 KiB
usage: 9.1 GiB used, 171 GiB / 180 GiB avail
pgs: 96 active+clean

[root@cephnode01 my-cluster]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.17537 root default
-3 0.05846 host cephnode01
0 hdd 0.01949 osd.0 up 1.00000 1.00000
3 hdd 0.01949 osd.3 up 1.00000 1.00000
6 hdd 0.01949 osd.6 up 1.00000 1.00000
-5 0.05846 host cephnode02
1 hdd 0.01949 osd.1 up 1.00000 1.00000
4 hdd 0.01949 osd.4 up 1.00000 1.00000
7 hdd 0.01949 osd.7 up 1.00000 1.00000
-7 0.05846 host cephnode03
2 hdd 0.01949 osd.2 up 1.00000 1.00000
5 hdd 0.01949 osd.5 up 1.00000 1.00000
8 hdd 0.01949 osd.8 up 1.00000 1.00000

ceph.conf

1、該配置文件采用init文件語法,#和;為注釋,ceph集群在啟動的時候會按照順序加載所有的conf配置文件。 配置文件分為以下幾大塊配置。

global:全局配置。
osd:osd專用配置,可以使用osd.N,來表示某一個OSD專用配置,N為osd的編號,如0、2、1等。
mon:mon專用配置,也可以使用mon.A來為某一個monitor節點做專用配置,其中A為該節點的名稱,ceph-monitor-2、ceph-monitor-1等。使用命令 ceph mon dump可以獲取節點的名稱。
client:客戶端專用配置。

2、配置文件可以從多個地方進行順序加載,如果沖突將使用最新加載的配置,其加載順序為。

$CEPH_CONF環境變量
-c 指定的位置
/etc/ceph/ceph.conf
~/.ceph/ceph.conf
./ceph.conf

3、配置文件還可以使用一些元變量應用到配置文件,如。

$cluster:當前集群名。
$type:當前服務類型。
$id:進程的標識符。
$host:守護進程所在的主機名。
$name:值為$type.$id。

4、ceph.conf詳細參數

[global]#全局設置
fsid = xxxxxxxxxxxxxxx                           #集群標識ID 
mon host = 10.0.1.1,10.0.1.2,10.0.1.3            #monitor IP 地址
auth cluster required = cephx                    #集群認證
auth service required = cephx                           #服務認證
auth client required = cephx                            #客戶端認證
osd pool default size = 3                             #最小副本數 默認是3
osd pool default min size = 1                           #PG 處於 degraded 狀態不影響其 IO 能力,min_size是一個PG能接受IO的最小副本數
public network = 10.0.1.0/24                            #公共網絡(monitorIP段) 
cluster network = 10.0.2.0/24                           #集群網絡
max open files = 131072                                 #默認0#如果設置了該選項,Ceph會設置系統的max open fds
mon initial members = node1, node2, node3               #初始monitor (由創建monitor命令而定)
##############################################################
[mon]
mon data = /var/lib/ceph/mon/ceph-$id
mon clock drift allowed = 1                             #默認值0.05#monitor間的clock drift
mon osd min down reporters = 13                         #默認值1#向monitor報告down的最小OSD數
mon osd down out interval = 600      #默認值300      #標記一個OSD狀態為down和out之前ceph等待的秒數
##############################################################
[osd]
osd data = /var/lib/ceph/osd/ceph-$id
osd mkfs type = xfs                                     #格式化系統類型
osd max write size = 512 #默認值90                   #OSD一次可寫入的最大值(MB)
osd client message size cap = 2147483648 #默認值100    #客戶端允許在內存中的最大數據(bytes)
osd deep scrub stride = 131072 #默認值524288         #在Deep Scrub時候允許讀取的字節數(bytes)
osd op threads = 16 #默認值2                         #並發文件系統操作數
osd disk threads = 4 #默認值1                        #OSD密集型操作例如恢復和Scrubbing時的線程
osd map cache size = 1024 #默認值500                 #保留OSD Map的緩存(MB)
osd map cache bl size = 128 #默認值50                #OSD進程在內存中的OSD Map緩存(MB)
osd mount options xfs = "rw,noexec,nodev,noatime,nodiratime,nobarrier" #默認值rw,noatime,inode64  #Ceph OSD xfs Mount選項
osd recovery op priority = 2 #默認值10              #恢復操作優先級,取值1-63,值越高占用資源越高
osd recovery max active = 10 #默認值15              #同一時間內活躍的恢復請求數 
osd max backfills = 4  #默認值10                  #一個OSD允許的最大backfills數
osd min pg log entries = 30000 #默認值3000           #修建PGLog是保留的最大PGLog數
osd max pg log entries = 100000 #默認值10000         #修建PGLog是保留的最大PGLog數
osd mon heartbeat interval = 40 #默認值30            #OSD ping一個monitor的時間間隔(默認30s)
ms dispatch throttle bytes = 1048576000 #默認值 104857600 #等待派遣的最大消息數
objecter inflight ops = 819200 #默認值1024           #客戶端流控,允許的最大未發送io請求數,超過閥值會堵塞應用io,為0表示不受限
osd op log threshold = 50 #默認值5                  #一次顯示多少操作的log
osd crush chooseleaf type = 0 #默認值為1              #CRUSH規則用到chooseleaf時的bucket的類型
##############################################################
[client]
rbd cache = true #默認值 true      #RBD緩存
rbd cache size = 335544320 #默認值33554432           #RBD緩存大小(bytes)
rbd cache max dirty = 134217728 #默認值25165824      #緩存為write-back時允許的最大dirty字節數(bytes),如果為0,使用write-through
rbd cache max dirty age = 30 #默認值1                #在被刷新到存儲盤前dirty數據存在緩存的時間(seconds)
rbd cache writethrough until flush = false #默認值true  #該選項是為了兼容linux-2.6.32之前的virtio驅動,避免因為不發送flush請求,數據不回寫
              #設置該參數后,librbd會以writethrough的方式執行io,直到收到第一個flush請求,才切換為writeback方式。
rbd cache max dirty object = 2 #默認值0              #最大的Object對象數,默認為0,表示通過rbd cache size計算得到,librbd默認以4MB為單位對磁盤Image進行邏輯切分
      #每個chunk對象抽象為一個Object;librbd中以Object為單位來管理緩存,增大該值可以提升性能
rbd cache target dirty = 235544320 #默認值16777216    #開始執行回寫過程的臟數據大小,不能超過 rbd_cache_max_dirty

 RBD

RBD即RADOS Block Device的簡稱,RBD塊存儲是最穩定且最常用的存儲類型。RBD塊設備類似磁盤可以被掛載。 RBD塊設備具有快照、多副本、克隆和一致性等特性,數據以條帶化的方式存儲在Ceph集群的多個OSD中。如下是對Ceph RBD的理解。

  • RBD 就是 Ceph 里的塊設備,一個 4T 的塊設備的功能和一個 4T 的 SATA 類似,掛載的 RBD 就可以當磁盤用;

  • resizable:這個塊可大可小;

  • data striped:這個塊在Ceph里面是被切割成若干小塊來保存,不然 1PB 的塊怎么存的下;

  • thin-provisioned:精簡置備,1TB 的集群是能創建無數 1PB 的塊的。其實就是塊的大小和在 Ceph 中實際占用大小是沒有關系的,剛創建出來的塊是不占空間,今后用多大空間,才會在 Ceph 中占用多大空間。舉例:你有一個 32G 的 U盤,存了一個2G的電影,那么 RBD 大小就類似於 32G,而 2G 就相當於在 Ceph 中占用的空間 ;

塊存儲本質就是將裸磁盤或類似裸磁盤(lvm)設備映射給主機使用,主機可以對其進行格式化並存儲和讀取數據,塊設備讀取速度快但是不支持共享。

ceph可以通過內核模塊和librbd庫提供塊設備支持。客戶端可以通過內核模塊掛在rbd使用,客戶端使用rbd塊設備就像使用普通硬盤一樣,可以對其就行格式化然后使用;客戶應用也可以通過librbd使用ceph塊,典型的是雲平台的塊存儲服務,雲平台可以使用rbd作為雲的存儲后端提供鏡像存儲、volume塊或者客戶的系統引導盤等。

使用場景:

  • 雲平台(OpenStack做為雲的存儲后端提供鏡像存儲)

  • K8s容器

  • map成塊設備直接使用

  • ISCIS,安裝Ceph客戶端

RBD常用命令
命令 功能
rbd create 創建塊設備映像
rbd ls 列出 rbd 存儲池中的塊設備
rbd info 查看塊設備信息
rbd diff 可以統計 rbd 使用量
rbd map 映射塊設備
rbd showmapped 查看已映射塊設備
rbd remove 刪除塊設備
rbd resize 更改塊設備的大小
RBD配置操作
RBD掛載到操作系統
1、創建rbd使用的pool
# ceph osd pool create rbd  32 32
# ceph osd pool application enable rbd rbd 

2、創建一個塊設備
# rbd create --size 10240 image01 

3、查看塊設備
# rbd ls
# rbd info image01

4、將塊設備映射到系統內核
# rbd map image01 

5、禁用當前系統內核不支持的feature
# rbd feature disable foo_image exclusive-lock, object-map, fast-diff, deep-flatten

6、再次映射
# rbd map image01 

7、格式化塊設備鏡像
# mkfs.xfs /dev/rbd0

8、mount到本地
# mount /dev/rbd0 /mnt
# umount /mnt

9、取消塊設備和內核映射
# rbd unmap image01 

10、刪除RBD塊設備
# rbd rm image01
快照配置
創建快照
rbd create --size 10240 image02
rbd snap create image02@image02_snap01

列出創建的快照
# rbd snap list image02
# rbd ls -l

查看快照信息
# rbd info image02@image02_snap01

克隆快照(快照必須處於被保護狀態才能被克隆)
# rbd snap protect image02@image02_snap01
# rbd clone rbd/image02@image02_snap01 kube/image02_clone01

查看快照的children
# rbd children image02

去掉快照的parent
# rbd flatten kube/image02_clone01

恢復快照
# rbd snap rollback image02@image02_snap01

刪除快照
# rbd snap unprotect image02@image02_snap01
# rbd snap remove image02@image02_snap01
導出導入RBD鏡像
導出rbd鏡像
# rbd export image02 /tmp/image02

導入
# rbd import /tmp/image02 rbd/image02 --image-format 2

CephFs

Ceph File System (CephFS) 是與 POSIX 標准兼容的文件系統, 能夠提供對 Ceph 存儲集群上的文件訪問. Jewel 版本 (10.2.0) 是第一個包含穩定 CephFS 的 Ceph 版本. CephFS 需要至少一個元數據服務器 (Metadata Server - MDS) daemon (ceph-mds) 運行, MDS daemon 管理着與存儲在 CephFS 上的文件相關的元數據, 並且協調着對 Ceph 存儲系統的訪問。

對象存儲的成本比起普通的文件存儲還是較高,需要購買專門的對象存儲軟件以及大容量硬盤。如果對數據量要求不是海量,只是為了做文件共享的時候,直接用文件存儲的形式好了,性價比高。

二、CephFS 架構

底層是核心集群所依賴的, 包括:

  • OSDs (ceph-osd): CephFS 的數據和元數據就存儲在 OSDs 上

  • MDS (ceph-mds): Metadata Servers, 管理着 CephFS 的元數據

  • Mons (ceph-mon): Monitors 管理着集群 Map 的主副本 Ceph 存儲集群的協議層是 Ceph 原生的 librados 庫, 與核心集群交互.

CephFS 庫層包括 CephFS 庫 libcephfs, 工作在 librados 的頂層, 代表着 Ceph 文件系統.最上層是能夠訪問 Ceph 文件系統的兩類客戶端.

三、配置 CephFS MDS

要使用 CephFS, 至少就需要一個 metadata server 進程。可以手動創建一個 MDS, 也可以使用 ceph-deploy 或者 ceph-ansible 來部署 MDS。

登錄到ceph-deploy工作目錄執行
# ceph-deploy mds create $hostname
四、部署Ceph文件系統

部署一個 CephFS, 步驟如下:

  1. 在一個 Mon 節點上創建 Ceph 文件系統.

  2. 若使用 CephX 認證,需要創建一個訪問 CephFS 的客戶端

  3. 掛載 CephFS 到一個專用的節點.

    • 以 kernel client 形式掛載 CephFS

    • 以 FUSE client 形式掛載 CephFS

1、創建一個 Ceph 文件系統

1、CephFS 需要兩個 Pools - cephfs-data 和 cephfs-metadata, 分別存儲文件數據和文件元數據

# ceph osd pool create cephfs-data 16 16
# ceph osd pool create cephfs-metadata 16 16

注:一般 metadata pool 可以從相對較少的 PGs 啟動, 之后可以根據需要增加 PGs. 因為 metadata pool 存儲着 CephFS 文件的元數據, 為了保證安全, 最好有較多的副本數. 為了能有較低的延遲, 可以考慮將 metadata 存儲在 SSDs 上.

2、創建一個 CephFS, 名字為 cephfs:

# ceph fs new cephfs cephfs-metadata cephfs-data

3、驗證至少有一個 MDS 已經進入 Active 狀態

ceph fs status cephfs

4、在 Monitor 上, 創建一個用戶,用於訪問CephFs

# ceph auth get-or-create client.cephfs mon 'allow r' mds 'allow rw' osd 'allow rw pool=cephfs-data, allow rw pool=cephfs-metadata'

5、驗證key是否生效

ceph auth get client.cephfs

6、檢查CephFs和mds狀態

ceph mds stat
ceph fs ls
ceph fs status
以 kernel client 形式掛載 CephFS

創建掛載目錄 cephfs

# mkdir /cephfs

掛載目錄

# mount -t ceph 192.168.0.132:6789,192.168.0.133:6789,192.168.0.134:6789:/ /cephfs/ -o name=cephfs,secret=AQDHjeddHlktJhAAxDClZh9mvBxRea5EI2xD9w==

自動掛載

# echo "mon1:6789,mon2:6789,mon3:6789:/ /cephfs ceph name=cephfs,secretfile=/etc/ceph/cephfs.key,_netdev,noatime 0 0" | sudo tee -a /etc/fstab

驗證

# stat -f /cephfs
以 FUSE client 形式掛載 CephFS
安裝ceph-common
yum install -y ceph-common

安裝ceph-fuse
yum install -y ceph-fuse

將集群的ceph.conf拷貝到客戶端
scp root@192.168.0.132:/etc/ceph/ceph.conf /etc/ceph/
chmod 644 /etc/ceph/ceph.conf

使用 ceph-fuse 掛載 CephFS
ceph-fuse --keyring  /etc/ceph/ceph.client.cephfs.keyring  --name client.cephfs -m 192.168.0.132:6789,192.168.0.133:6789,192.168.0.134:6789  /cephfs/

驗證 CephFS 已經成功掛載
stat -f /cephfs

自動掛載
echo "none /cephfs fuse.ceph ceph.id=cephfs[,ceph.conf=/etc/ceph/ceph.conf],_netdev,defaults 0 0"| sudo tee -a /etc/fstab
或
echo "id=cephfs,conf=/etc/ceph/ceph.conf /mnt/ceph2  fuse.ceph _netdev,defaults 0 0"| sudo tee -a /etc/fstab

卸載
fusermount -u /cephfs

MDS主備與主主切換

配置主主模式
  • 當cephfs的性能出現在MDS上時,就應該配置多個活動的MDS。通常是多個客戶機應用程序並行的執行大量元數據操作,並且它們分別有自己單獨的工作目錄。這種情況下很適合使用多主MDS模式。

  • 配置MDS多主模式 每個cephfs文件系統都有一個max_mds設置,可以理解為它將控制創建多少個主MDS。注意只有當實際的MDS個數大於或等於max_mds設置的值時,mdx_mds設置才會生效。例如,如果只有一個MDS守護進程在運行,並且max_mds被設置為兩個,則不會創建第二個主MDS。

# ceph fs set cephfs max_mds 2

配置備用MDS 即使有多個活動的MDS,如果其中一個MDS出現故障,仍然需要備用守護進程來接管。因此,對於高可用性系統,實際配置max_mds時,最好比系統中MDS的總數少一個。

但如果你確信你的MDS不會出現故障,可以通過以下設置來通知ceph不需要備用MDS,否則會出現insufficient standby daemons available告警信息:

# ceph fs set <fs> standby_count_wanted 0 
還原單主MDS
設置max_mds
# ceph fs set max_mds 1

刪除不需要的rank
ceph mds deactivate cephfs:2

Ceph Dashboard介紹

Ceph 的監控可視化界面方案很多----grafana、Kraken。但是從Luminous開始,Ceph 提供了原生的Dashboard功能,通過Dashboard可以獲取Ceph集群的各種基本狀態信息。 mimic版 (nautilus版) dashboard 安裝。如果是 (nautilus版) 需要安裝 ceph-mgr-dashboard

配置Ceph Dashboard
1、在每個mgr節點安裝
# yum install ceph-mgr-dashboard 
2、開啟mgr功能
# ceph mgr module enable dashboard
3、生成並安裝自簽名的證書
# ceph dashboard create-self-signed-cert  
4、創建一個dashboard登錄用戶名密碼
# ceph dashboard set-login-credentials admin admin 
5、查看服務訪問方式
# ceph mgr services
修改默認配置命令
指定集群dashboard的訪問端口
# ceph config-key set mgr/dashboard/server_port 7000
指定集群 dashboard的訪問IP
# ceph config-key set mgr/dashboard/server_addr $IP
開啟Object Gateway管理功能
1、創建rgw用戶
# radosgw-admin user create --uid=user01 --display-name=user01 --system
2、提供Dashboard證書
# ceph dashboard set-rgw-api-access-key $access_key
# ceph dashboard set-rgw-api-secret-key $secret_key
3、配置rgw主機名和端口
# ceph dashboard set-rgw-api-host 192.168.0.132
# ceph dashboard set-rgw-api-port 7480
4、刷新web頁面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM