ceph介紹和安裝


1、Ceph簡介

  Ceph提供了對象、塊、和文件存儲功能,同時在擴展性上又可支持數以千計的客戶端訪問到PB級EB級甚至更多的數據。它不但適應非結構化數據,並且客戶端可以同時使用當前及傳統的對象接口進行數據存取,被稱為是存儲的未來!

2、Ceph的特點

  • 高可用:Ceph中的數據副本數量可以由管理員自行定義,並可以通過CRUSH算法指定副本的物理存儲位置以分隔故障域, 可以忍受多種故障場景並自動嘗試並行修復。同時支持強一致副本,而副本又能夠垮主機、機架、機房、數據中心存放。所以安全可靠。存儲節點可以自管理、自動修復。無單點故障,有很強的容錯性;
  • 高擴展性:Ceph不同於swift,客戶端所有的讀寫操作都要經過代理節點。一旦集群並發量增大時,代理節點很容易成為單點瓶頸。Ceph本身並沒有主控節點,擴展起來比較容易,並且理論上,它的性能會隨着磁盤數量的增加而線性增長;
  • 特性豐富:Ceph支持三種調用接口:對象存儲,塊存儲,文件系統掛載。三種方式可以一同使用。Ceph統一存儲,雖然Ceph底層是一個分布式文件系統,但由於在上層開發了支持對象和塊的接口;
  • 統一的存儲:能同時提供對象存儲、文件存儲和塊存儲;
  • CRUSH算法:Ceph摒棄了傳統的集中式存儲元數據尋址的方案,轉而使用CRUSH算法完成數據的尋址操作。CRUSH在一致性哈希基礎上很好的考慮了容災域的隔離,能夠實現各類負載的副本放置規則,例如跨機房、機架感知等。Ceph會將CRUSH規則集分配給存儲池。當Ceph客戶端存儲或檢索存儲池中的數據時,Ceph會自動識別CRUSH規則集、以及存儲和檢索數據這一規則中的頂級bucket。當Ceph處理CRUSH規則時,它會識別出包含某個PG的主OSD,這樣就可以使客戶端直接與主OSD進行連接進行數據的讀寫。

3、Ceph的缺點

  • 需要比較強的技術能力和運維能力
  • 數據一致性問題。對於ORACLE RAC這一類對數據一致性要求比較高的應用場景,分布式存儲的性能可能就稍弱了,因為分布式的結構,數據同步是一個大問題,雖然現在技術一致在進步,但是也不如傳統存儲設備數據存儲方式可靠。
  • 穩定性問題,分布式存儲非常依賴網絡環境和帶寬,如果網絡發生抖動或者故障,都可能會影響分布式存儲系統運行。例如,一旦發生IP沖突,那么整體分布式存儲可能都無法訪問。傳統存儲一般使用專用SAN或IP網絡,穩定性方面,更可靠一些。

4、架構與組件

官網地址是:https://docs.ceph.com/en/nautilus/architecture/

4.1、組件介紹

  • Ceph的底層是RADOS,RADOS本身也是分布式存儲系統,CEPH所有的存儲功能都是基於RADOS實現。RADOS采用C++開發,所提供的原生Librados API包括C和C++兩種。Ceph的上層應用調用本機上的librados API,再由后者通過socket與RADOS集群中的其他節點通信並完成各種操作。
  • RADOS向外界暴露了調用接口,即LibRADOS,應用程序只需要調用LibRADOS的接口,就可以操縱Ceph了。這其中,RADOS GW用於對象存儲,RBD用於塊存儲,它們都屬於LibRADOS;CephFS是內核態程序,向外界提供了POSIX接口,用戶可以通過客戶端直接掛載使用。
  • RADOS GateWay、RBD其作用是在librados庫的基礎上提供抽象層次更高、更便於應用或客戶端使用的上層接口。其中,RADOS GW是一個提供與Amazon S3和Swift兼容的RESTful API的gateway,以供相應的對象存儲應用開發使用。RBD則提供了一個標准的塊設備接口,常用於在虛擬化的場景下為虛擬機創建volume。目前,Red Hat已經將RBD驅動集成在KVM/QEMU中,以提高虛擬機訪問性能。這兩種方式目前在雲計算中應用的比較多。
  • CEPHFS則提供了POSIX接口,用戶可直接通過客戶端掛載使用。它是內核態的程序,所以無需調用用戶空間的librados庫。它通過內核中的net模塊來與Rados進行交互。
  • RBD塊設備。對外提供塊存儲。可以像磁盤一樣被映射、格式化已經掛載到服務器上。支持snapshot

4.2、存儲過程

  • 無論使用哪種存儲方式(對象、塊、掛載),存儲的數據都會被切分成對象(Objects)。Objects size大小可以由管理員調整,通常為2M或4M。每個對象都會有一個唯一的OID,由ino與ono生成,雖然這些名詞看上去很復雜,其實相當簡單。ino即是文件的File ID,用於在全局唯一標示每一個文件,而ono則是分片的編號。比如:一個文件FileID為A,它被切成了兩個對象,一個對象編號0,另一個編號1,那么這兩個文件的oid則為A0與A1。Oid的好處是可以唯一標示每個不同的對象,並且存儲了對象與文件的從屬關系。由於ceph的所有數據都虛擬成了整齊划一的對象,所以在讀寫時效率都會比較高。 但是對象並不會直接存儲進OSD中,因為對象的size很小,在一個大規模的集群中可能有幾百到幾千萬個對象。這么多對象光是遍歷尋址,速度都是很緩慢的;並且如果將對象直接通過某種固定映射的哈希算法映射到osd上,當這個osd損壞時,對象無法自動遷移至其他osd上面(因為映射函數不允許)。為了解決這些問題,ceph引入了歸置組的概念,即PG
  • PG是一個邏輯概念,我們linux系統中可以直接看到對象,但是無法直接看到PG。它在數據尋址時類似於數據庫中的索引:每個對象都會固定映射進一個PG中,所以當我們要尋找一個對象時,只需要先找到對象所屬的PG,然后遍歷這個PG就可以了,無需遍歷所有對象。而且在數據遷移時,也是以PG作為基本單位進行遷移,ceph不會直接操作對象。 對象時如何映射進PG的?還記得OID么?首先使用靜態hash函數對OID做hash取出特征碼,用特征碼與PG的數量去模,得到的序號則是PGID。由於這種設計方式,PG的數量多寡直接決定了數據分布的均勻性,所以合理設置的PG數量可以很好的提升CEPH集群的性能並使數據均勻分布
  • 最后PG會根據管理員設置的副本數量進行復制,然后通過crush算法存儲到不同的OSD節點上(其實是把PG中的所有對象存儲到節點上),第一個osd節點即為主節點,其余均為從節點。

5、部署

本次使用的虛擬機部署(Ubuntu18.04)Ceph版本為目前最新的P版本
規划的主機如下

5.1 設置主機名、配置時間同步

172.31.1.100  ceph-deploy.example.local ceph-deploy #部署節點
172.31.1.101 ceph-mon1.example.local ceph-mon1 
172.31.1.102 ceph-mon2.example.local ceph-mon2 
172.31.1.103 ceph-mon3.example.local ceph-mon3 
172.31.1.104 ceph-mgr1.example.local ceph-mgr1 
172.31.1.105 ceph-mgr2.example.local ceph-mgr2 
172.31.1.106 ceph-node1.example.local ceph-node1 
172.31.1.107 ceph-node2.example.local ceph-node2 
172.31.1.108 ceph-node3.example.local ceph-node3
echo "*/5 *  *  *  * /usr/sbin/ntpdate ntp.aliyun.com &> /dev/null" | crontab

5.2 配置添加清華源

#allnode sudo wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | sudo apt-key add -
#allnode sudo echo "deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main" >> /etc/apt/sources.list

5.3 初始化ceph用戶

#deploy-node groupadd  -r -g 2023 magedu  && useradd -r -m  -s /bin/bash  -u 2023 -g 2023 magedu && echo magedu:123456 | chpasswd
#all-node groupadd  -r -g 2021 ceph  && useradd -r -m  -s /bin/bash  -u 2021 -g 2021 ceph && echo ceph:123456 | chpasswd
#deploy-node echo "magedu ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

5.4 設置免密登錄

root@ceph-deploy:~# su - magedu
magedu@ceph-deploy:~$ ssh-keygen
magedu@ceph-deploy:~$ ssh-copy-id magedu@172.31.1.100
magedu@ceph-deploy:~$ ssh-copy-id magedu@172.31.1.101
magedu@ceph-deploy:~$ ssh-copy-id magedu@172.31.1.102
magedu@ceph-deploy:~$ ssh-copy-id magedu@172.31.1.103
magedu@ceph-deploy:~$ ssh-copy-id magedu@172.31.1.104
magedu@ceph-deploy:~$ ssh-copy-id magedu@172.31.1.105
magedu@ceph-deploy:~$ ssh-copy-id magedu@172.31.1.106
magedu@ceph-deploy:~$ ssh-copy-id magedu@172.31.1.107
magedu@ceph-deploy:~$ ssh-copy-id magedu@172.31.1.108

5.5 校驗源是否生效

root@ceph-deploy:~# apt-cache madison ceph-deploy  #查看添加的清華源是否生效,如果出現報錯無法識別清華源需執行以下操作
	sudo gpg --keyserver keyserver.ubuntu.com --recv E84AC2C0460F3994
	sudo gpg --export --armor E84AC2C0460F3994 | sudo apt-key add -
 	sudo apt-get update
root@ceph-deploy:~# sudo apt install ceph-deploy
root@ceph-deploy:~# su - magedu 
magedu@ceph-deploy:~$ mkdir ceph-cluster
magedu@ceph-deploy:~$ cd ceph-cluster/
magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy --help

5.6 初始化ceph的配置文件

magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy new --cluster-network 172.31.1.0/24 --public-network 192.168.43.0/24 ceph-mon1

5.7 選擇性安裝ceph-common

#allnode  apt install -y ceph-common
# apt install ceph-mon #在mon節點安裝,使用root或者具備sudo權限的普通用戶
# apt install ceph-mgr #在mgr節點安裝

5.8 初始化ceph-node節點

在添加 osd 之前,對node節點安裝基本環境: (以下倆條2選一執行)

magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy install --no-adjust-repos --nogpgcheck ceph-node1 ceph-node2 #這留一個ceph-node3一會添加
magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy install --release pacific ceph-node1 #擦除磁盤之前通過 deploy 節點對 node 節點執行安裝 ceph 基本運行環境

5.9 對mon節點進行初始化:

magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy mon create-initial

5.10 分發admin的密鑰

magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy admin ceph-mon1 ceph-node1 ceph-node2 
#allnode chown -R ceph.ceph /etc/ceph/*

5.11 配置mgr節點

magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy mgr create ceph-mgr1

5.12 推動證書給部署節點

magedu@ceph-deploy:~/ceph-cluster$ apt install ceph-common
magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy admin ceph-deploy #推送證書 給自己
root@ceph-deploy:~# chown -R magedu.magedu /etc/ceph/*
magedu@ceph-deploy:~/ceph-cluster$ ceph -s  #這里就能看到集群狀態了

5.13 列出 ceph node 節點磁盤

magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy disk list ceph-node1

5.14 擦除磁盤:

ceph-deploy  disk zap ceph-node1  /dev/sdb
ceph-deploy  disk zap ceph-node1  /dev/sdc
ceph-deploy  disk zap ceph-node2  /dev/sdb
ceph-deploy  disk zap ceph-node2  /dev/sdc
# 以下未執行初始化過的就不能執行磁盤格式化
ceph-deploy  disk zap ceph-node3  /dev/sdb
ceph-deploy  disk zap ceph-node3  /dev/sdc

5.15 添加主機的磁盤osd:

osd的id從0開始順序使用 0-1
ceph-deploy osd create ceph-node1 --data /dev/sdb
ceph-deploy osd create ceph-node1 --data /dev/sdc

2-3
ceph-deploy osd create ceph-node2 --data /dev/sdb
ceph-deploy osd create ceph-node2 --data /dev/sdc

4-5
ceph-deploy osd create ceph-node3 --data /dev/sdb
ceph-deploy osd create ceph-node3 --data /dev/sdc
magedu@ceph-deploy:~/ceph-cluster$ ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME            STATUS  REWEIGHT  PRI-AFF
-1         0.03918  root default                                  
-3         0.01959      host ceph-node1                           
 0    hdd  0.00980          osd.0            up   1.00000  1.00000
 1    hdd  0.00980          osd.1            up   1.00000  1.00000
-5         0.01959      host ceph-node2                           
 2    hdd  0.00980          osd.2            up   1.00000  1.00000
 3    hdd  0.00980          osd.3            up   1.00000  1.00000

5.16 禁用非安全模式通信

magedu@ceph-deploy:~/ceph-cluster$ ceph config set mon auth_allow_insecure_global_id_reclaim false
magedu@ceph-deploy:~/ceph-cluster$ ceph -s
  cluster:
    id:     cce50457-e522-4841-9986-a09beefb2d65
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum ceph-mon1 (age 30m)
    mgr: ceph-mgr1(active, since 20m)
    osd: 4 osds: 4 up (since 4m), 4 in (since 4m); 1 remapped pgs
 
  data:
    pools:   1 pools, 1 pgs
    objects: 0 objects, 0 B
    usage:   20 MiB used, 40 GiB / 40 GiB avail
    pgs:     1 active+clean

magedu@ceph-deploy:~/ceph-cluster$ ceph health
HEALTH_OK

5.17 mon服務器的高可用:

mon_node apt install ceph-mon
magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy mon add ceph-mon2
magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy mon add ceph-mon3
magedu@ceph-deploy:~/ceph-cluster$ ceph quorum_status --format json-pretty

5.18 mgr服務器的高可用:

mon_node apt install ceph-mgr
magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy mgr create ceph-mgr2
magedu@ceph-deploy:~/ceph-cluster$ ceph -s 
  cluster:
    id:     cce50457-e522-4841-9986-a09beefb2d65
    health: HEALTH_WARN
            clock skew detected on mon.ceph-mon2, mon.ceph-mon3
 
  services:
    mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 11m)
    mgr: ceph-mgr1(active, since 35m), standbys: ceph-mgr2
    osd: 4 osds: 4 up (since 18m), 4 in (since 18m); 1 remapped pgs
 
  data:
    pools:   1 pools, 1 pgs
    objects: 0 objects, 0 B
    usage:   20 MiB used, 40 GiB / 40 GiB avail
    pgs:     1 active+clean

5.19 osd添加

magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy install --no-adjust-repos --nogpgcheck ceph-node1 ceph-node3
magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy  disk zap ceph-node3  /dev/sdb
magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy  disk zap ceph-node3  /dev/sdc
magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node3 --data /dev/sdb
magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node3 --data /dev/sdc

5.20 模擬osd下線

magedu@ceph-deploy:~/ceph-cluster$ ceph osd df 
ID  CLASS  WEIGHT   REWEIGHT  SIZE    RAW USE  DATA     OMAP  META     AVAIL   %USE  VAR   PGS  STATUS
 0    hdd  0.00980   1.00000  10 GiB  5.4 MiB  296 KiB   0 B  5.1 MiB  10 GiB  0.05  1.01    1      up
 1    hdd  0.00980   1.00000  10 GiB  5.4 MiB  296 KiB   0 B  5.1 MiB  10 GiB  0.05  1.01    0      up
 2    hdd  0.00980   1.00000  10 GiB  5.4 MiB  296 KiB   0 B  5.1 MiB  10 GiB  0.05  1.00    0      up
 3    hdd  0.00980   1.00000  10 GiB  5.4 MiB  296 KiB   0 B  5.1 MiB  10 GiB  0.05  1.00    1      up
 4    hdd  0.00980   1.00000  10 GiB  5.3 MiB  296 KiB   0 B    5 MiB  10 GiB  0.05  0.99    0      up
 5    hdd  0.00980   1.00000  10 GiB  5.2 MiB  296 KiB   0 B  4.9 MiB  10 GiB  0.05  0.98    1      up
                       TOTAL  60 GiB   32 MiB  1.7 MiB   0 B   30 MiB  60 GiB  0.05                   
MIN/MAX VAR: 0.98/1.01  STDDEV: 0
1. 停用設備:ceph osd out {osd-num} 
magedu@ceph-deploy:~/ceph-cluster$ ceph osd out 0
marked out osd.0.
2. 停止進程:sudo systemctl stop ceph-osd@{osd-num} 
root@ceph-node1:~# systemctl stop ceph-osd@0
root@ceph-node1:~# systemctl status -l ceph-osd@0
● ceph-osd@0.service - Ceph object storage daemon osd.0
   Loaded: loaded (/lib/systemd/system/ceph-osd@.service; indirect; vendor preset: enabled)
   Active: inactive (dead) since Sun 2021-08-15 19:07:15 CST; 9s ago
  Process: 24575 ExecStart=/usr/bin/ceph-osd -f --cluster ${CLUSTER} --id 0 --setuser ceph --setgroup ceph (code=exited, status=0/SUCCESS)
 Main PID: 24575 (code=exited, status=0/SUCCESS)
3. 移除設備:ceph osd purge {id} --yes-i-really-mean-it
magedu@ceph-deploy:~/ceph-cluster$ ceph osd purge 0 --yes-i-really-mean-it
purged osd.0
4. 驗證是否執行成功
magedu@ceph-deploy:~/ceph-cluster$ ceph osd df 
ID  CLASS  WEIGHT   REWEIGHT  SIZE    RAW USE  DATA     OMAP  META     AVAIL   %USE  VAR   PGS  STATUS
 1    hdd  0.00980   1.00000  10 GiB  5.5 MiB  328 KiB   0 B  5.2 MiB  10 GiB  0.05  1.02    1      up
 2    hdd  0.00980   1.00000  10 GiB  5.5 MiB  328 KiB   0 B  5.1 MiB  10 GiB  0.05  1.00    0      up
 3    hdd  0.00980   1.00000  10 GiB  5.5 MiB  328 KiB   0 B  5.1 MiB  10 GiB  0.05  1.00    1      up
 4    hdd  0.00980   1.00000  10 GiB  5.4 MiB  328 KiB   0 B  5.1 MiB  10 GiB  0.05  0.99    0      up
 5    hdd  0.00980   1.00000  10 GiB  5.3 MiB  328 KiB   0 B    5 MiB  10 GiB  0.05  0.98    1      up
                       TOTAL  50 GiB   27 MiB  1.6 MiB   0 B   26 MiB  50 GiB  0.05                   
MIN/MAX VAR: 0.98/1.02  STDDEV: 0

5.21 模擬osd 上線

擦除磁盤
magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy  disk zap ceph-node1  /dev/sdd
添加osd
magedu@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node1 --data /dev/sdd
創建rdb
magedu@ceph-deploy:~/ceph-cluster$ ceph osd pool create myrbd1 64 64 #創建存儲池,指定 pg 和 pgp 的數量,pgp 是對存在 於 pg 的數據進行組合存儲,pgp 通常等於 pg 的值
magedu@ceph-deploy:~/ceph-cluster$ ceph osd pool application enable myrbd1 rbd #對存儲池啟用 RBD 功能 
magedu@ceph-deploy:~/ceph-cluster$ rbd pool init -p myrbd1 #通過 RBD 命令對存儲池初始化
magedu@ceph-deploy:~/ceph-cluster$ rbd pool stats myrbd1
Total Images: 0
Total Snapshots: 0
Provisioned Size: 0 B
創建並驗證img
magedu@ceph-deploy:~/ceph-cluster$ rbd create myimg1 --size 5G --pool myrbd1
magedu@ceph-deploy:~/ceph-cluster$ rbd create myimg2 --size 3G --pool myrbd1 --image-format 2 --image-feature layering
magedu@ceph-deploy:~/ceph-cluster$ rbd ls --pool myrbd1  #列出指定的 pool 中所有的 img myimg1 myimg2
myimg1
myimg2
magedu@ceph-deploy:~/ceph-cluster$ rbd pool stats myrbd1 #查看對應池的狀態
Total Images: 2
Total Snapshots: 0
Provisioned Size: 8 GiB
magedu@ceph-deploy:~/ceph-cluster$ rbd --image myimg1 --pool myrbd1 info  #查看指定 rdb 的信息 
rbd image 'myimg1':
	size 5 GiB in 1280 objects
	order 22 (4 MiB objects)
	snapshot_count: 0
	id: 152dda69d7fb
	block_name_prefix: rbd_data.152dda69d7fb
	format: 2
	features: layering, exclusive-lock, object-map, fast-diff, deep-flatten  #由於我OS的kernel只支持layering,其他都不支持,所以需要把部分不支持的特性disable掉
	op_features: 
	flags: 
	create_timestamp: Sun Aug 15 20:43:04 2021
	access_timestamp: Sun Aug 15 20:43:04 2021
	modify_timestamp: Sun Aug 15 20:43:04 2021

5.22 客戶端使用塊存儲

[root@ceph-client ceph]# rbd -p myrbd1 map myimg2 #這個只有layering所以可以直接掛載成功
/dev/rbd0 
[root@ceph-client ceph]# rbd -p myrdb1 map myimg1 #這個需要關閉除了layering的其他特性
* 方式1
magedu@ceph-deploy:~/ceph-cluster$ rbd --image myimg1 --pool myrbd1 feature disable exclusive-lock object-map fast-diff deep-flatten
magedu@ceph-deploy:~/ceph-cluster$ rbd --image myimg1 --pool myrbd1 info
* 方式2
修改Ceph配置文件/etc/ceph/ceph.conf,在global section下,增加
rbd_default_features = 1 
#再創建rdb鏡像。
rbd create ceph-client1-rbd1 --size 10240 
[root@ceph-client ~]# lsblk 

#mkfs.xfs /dev/rdb0
#mkdir /data
#mount /dev/rdb0 /data/
#cp /etc/passwd /data
#ll /data
[root@ceph-client data]# dd if=/dev/zero of=/data/ceph-test-file bs=1MB count=300
[root@ceph-client ~]# ll -h /data/ceph-test-file

驗證數據
[root@ceph-node2 ~]# ceph df

5.23 取消映射塊設備

root@ceph-mon1:~# umount /mnt/ceph-vol1#取消掛載
root@ceph-mon1:~# rbd unmap /dev/rbd/myrbd1/myimg2#取消映射
root@ceph-mon1:~# rbd showmapped #查看是否取消成功,如沒有任何輸出則表示取消映射成功

5.24 刪除塊設備,執行以下命令

magedu@ceph-deploy:~/ceph-cluster$ rbd ls --pool myrbd1
magedu@ceph-deploy:~/ceph-cluster$ rbd --pool myrbd1 rm myimg1
magedu@ceph-deploy:~/ceph-cluster$ rbd --pool myrbd1 rm myimg2 #需要所以節點都卸載才能刪除
        Removing image: 100% complete...done.
magedu@ceph-deploy:~/ceph-cluster$ rbd ls --pool myrbd1


免責聲明!

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



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