CEPH簡介
CEPH是一個開源的項目,它是軟件定義的、同一的存儲解決方案。CEPH是一個可大規模擴展、高性能並且無單點故障的分佈式存儲系統。從一開始它就運行在通用的商用的硬件上,具有高度的可伸縮性,容量可擴展至EB界別,甚至更大
CEPH架構
1、相關名詞解釋
- RADOS:Reliable Autonomic Distributed Object Store(可靠的,自主的,分佈式的對象存儲)。在 ceph 中這個名詞經常出現,有時會以 R 表示 RADOS。實際上這個詞僅僅是對 ceph 的一個修飾詞,並不代表 ceph 的組件什麼的。粗暴的認爲, RADOS = ceph 對象存儲集羣即可
- RGW:對象存儲網關,也就是對象存儲接口
- RBD:塊設備,也就是塊存儲接口
- CEPH FS:ceph 文件系統,也就是文件級存儲接口
2、CEPH基礎架構
- CEPH組件主要分分爲兩部分:
Ceph Node:構成Ceph集羣的基礎組件
Ceph Client:對外提供多種方式使用Ceph存儲的組件
3、CEPH基礎組件
- OSD(ceph-osd):object storage daemon,對象存儲進程。ceph 管理物理硬盤時,引入了OSD概念,每一塊盤都會針對的運行一個OSD進程。換句話說,ceph 集羣通過管理 OSD 來管理物理硬盤。OSD 一般功能爲:存儲數據、維護數據副本、數據恢復、數據再平衡以及對ceph monitor組件提供相關監控信息
- Manager(ceph-mgr):用於收集ceph集羣狀態、運行指標,比如存儲利用率、當前性能指標和系統負載。對外提供 ceph dashboard(ceph ui)和 resetful api。Manager組件開啓高可用時,至少2個
- MDS(ceph-mds):Metadata server,元數據服務。爲ceph 文件系統提供元數據服務(ceph 對象存儲和塊存儲不需要MDS)。爲 posix 文件系統用戶提供性能良好的基礎命令(ls,find等)
- Monitor(ceph-mon):維護集羣的狀態,包含monitor組件信息,manger 組件信息,osd組件信息,mds組件信息,crush 算法信息。還負責ceph集羣的身份驗證功能,client在連接ceph集羣時通過此組件進行驗證。Monitor組件開啓高可用時,至少3個
4、Ceph Clients
此部分介紹 ceph 對外提供各種功能的組件。其中包含:Block Device、Object Storage、Filesystem
- Block Device:塊存儲設備,RBD
- Object Storage: 對象存儲,RGW,對外可提供 swift 、s3 接口類型restful api
- Filesystem:文件系統,CephFS。提供一個兼容POSIX的文件系統
5、Ceph存儲過程
前面介紹Ceph的一些組件及對外提供的功能,這部分主要介紹Ceph的邏輯存儲,這部分主要介紹Ceph的存儲邏輯。在對象存儲中,一切都是扁平化的,並且存儲的最小單元爲對象(OBJ)
ceph 在對象存儲的基礎上提供了更加高級的思想。當對象數量達到了百萬級以上,原生的對象存儲在索引對象時消耗的性能非常大。ceph因此引入了 placement group (pg)的概念。一個PG就是一組對象的集合
obj和pg之間的映射由ceph client計算得出
討論 pg 時,不得不提的另外一個名詞:pgp,pgp決定了pg和osd 之間的映射關係。一般將 pgp_num 設置成和 pg_num 一樣大小。這裏還有一個名詞需要提一下,在ceph中會經常見到crush算法。簡單來說,crush 算法就是指 ceph 中數據如何存儲、讀取的過程。由於ceph集羣面對許多的獨立項目,因此ceph還引入了ceph pool的概念用於劃分不同的項目
ceph pool 是對 ceph 對象的邏輯劃分,並不是物理劃分
pg和ceph pool的區別:
- pg對於用戶來說是透明的,只是底層的一種優化方案
- ceph pool對於用戶來說,就像mysql中的database
像大多數集羣軟件一樣,ceph 也提供了緩存的概念。稱之爲 Cache Tier(緩存層,在具體使用時有時會稱之爲緩存池)。緩存池對用戶來說是透明的,因此不會改變用戶的原有使用邏輯
以上緩存池的介紹,均爲底層邏輯。在沒有緩存池時,ceph client 直接指向存儲池,在添加緩存池後,ceph client 指向緩存池,緩存池再指向存儲池
CEPH集羣安裝部署
1、環境規劃
主機名 | 操作系統 | IP地址 | 內存 | 硬盤/G |
---|---|---|---|---|
ceph01 | centos7.7 | ens33:192.168.100.101 ; ens34:192.168.7.159 | 4 | 20+1024 |
ceph02 | centos7.7 | ens33:192.168.100.102 ; ens34:192.168.7.160 | 4 | 20+1024 |
ceph03 | centos7.7 | ens33:192.168.100.103 ; ens34:192.168.7.158 | 4 | 20+1024 |
ceph04 | centos7.7 | ens33:192.168.100.104 ; ens34:192.168.7.161 | 4 | 20+1024 |
- 使用ceph01、ceph02、ceph03來搭建集羣
- ceph04作爲擴容部署
2、環境部署(所有節點)
(1)安裝環境包
[root@localhost ~]# yum -y install wget curl net-tools bash-completion vim
(2)關閉防火牆
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
(3)關閉核心功能
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=disabled
(4)更改主機名
[root@localhost ~]# hostnamectl set-hostname ceph01
[root@localhost ~]# hostnamectl set-hostname ceph02
[root@localhost ~]# hostnamectl set-hostname ceph03
[root@localhost ~]# hostnamectl set-hostname ceph04
(5)配置hosts文件
[root@ceph01 ~]# vim /etc/hosts
192.168.100.101 ceph01
192.168.100.102 ceph02
192.168.100.103 ceph03
192.168.100.104 ceph04
(6)配置各節點免交互登陸
[root@ceph01 ~]# ssh-keygen
[root@ceph01 ~]# ssh-copy-id root@ceph01
[root@ceph01 ~]# ssh-copy-id root@ceph02
[root@ceph01 ~]# ssh-copy-id root@ceph03
[root@ceph01 ~]# ssh-copy-id root@ceph04
(7)配置YUM源
[root@ceph01 ~]# cd /etc/yum.repos.d
[root@ceph01 yum.repos.d]# mkdir bak
[root@ceph01 yum.repos.d]# mv C* bak/
[root@ceph01 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@ceph01 yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@ceph01 yum.repos.d]# vimceph.repo
[ceph]
name=Ceph packages for
baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[root@ceph01 yum.repos.d]# ll
總用量 12
drwxr-xr-x. 2 root root 187 3月 30 17:55 bak
-rw-r--r-- 1 root root 2523 6月 16 2018 CentOS-Base.repo
-rw-r--r-- 1 root root 602 3月 30 18:01 ceph.repo
-rw-r--r-- 1 root root 664 5月 11 2018 epel.repo
[root@ceph01 ~]# yum update -y
3、配置時間同步
(1)在ceph01配置時間服務器
[root@ceph01 ~]# yum -y install ntpdate ntp
[root@ceph01 ~]# ntpdate ntp1.aliyun.com
#把當前系統時間寫入到CMOS中
[root@ceph01 ~]# clock -w
[root@ceph01 ~]# vim /etc/ntp.conf
driftfile /var/lib/ntp/drift
restrict default nomodify
restrict 127.0.0.1
restrict ::1
restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap fudge 127.127.1.0 stra
tum 10
server 127.127.1.0
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor
[root@ceph01 ~]# systemctl start ntpd
(2)在ceph02、ceph03、ceph04上同步時間源
[root@ceph02 ~]# yum -y install ntpdate
[root@ceph02 ~]# ntpdate ceph01
[root@ceph02 ~]# crontab -e
*/30 * * * * /usr/bin/ntpdate ceph01 >> /var/log/ntpdate.log
[root@ceph02 ~]# systemctl restart crond
4、ceph集羣搭建
(1)在所有節點創建ceph配置文件目錄
[root@ceph01 ~]# mkdir /etc/ceph
(2)在ceph01上安裝工具包
[root@ceph01 ~]# yum -y install python-setuptools
[root@ceph01 ~]# yum -y install ceph-deploy
(3)在所有節點上安裝ceph軟件包
[root@ceph01 ~]# yum -y install ceph
(4)登陸ceph01創建mon
[root@ceph01 ~]# cd /etc/ceph/
[root@ceph01 ceph]# ceph-deploy new ceph01 ceph02 ceph03
#初始化mon並收集密鑰
[root@ceph01 ceph]# ceph-deploy mon create-initial
[root@ceph01 ceph]# ceph -s
cluster:
id: e161159f-1ac7-4c77-a7d8-e54ff0ee4ff1
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph01,ceph02,ceph03 //此處顯示mon創建成功
mgr: no daemons active
osd: 0 osds: 0 up, 0 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
(5)登陸ceph01創建osd
[root@ceph01 ceph]# ceph-deploy osd create --data /dev/sdb ceph01
[root@ceph01 ceph]# ceph-deploy osd create --data /dev/sdb ceph02
[root@ceph01 ceph]# ceph-deploy osd create --data /dev/sdb ceph03
[root@ceph01 ceph]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 2.99698 root default
-3 0.99899 host ceph01
0 hdd 0.99899 osd.0 up 1.00000 1.00000
-5 0.99899 host ceph02
1 hdd 0.99899 osd.1 up 1.00000 1.00000
-7 0.99899 host ceph03
2 hdd 0.99899 osd.2 up 1.00000 1.00000
[root@ceph01 ceph]# ceph osd stat
3 osds: 3 up, 3 in; epoch: e13
#下發密鑰到節點ceph02、ceph03
[root@ceph01 ceph]# ceph-deploy admin ceph02 ceph03
#在各節點給密鑰增加權限
[root@ceph01 ceph]# chmod +x /etc/ceph/ceph.client.admin.keyring
[root@ceph02 ceph]# chmod +x /etc/ceph/ceph.client.admin.keyring
[root@ceph03 ceph]# chmod +x /etc/ceph/ceph.client.admin.keyring
[root@ceph01 ceph]# ceph -s
cluster:
id: e161159f-1ac7-4c77-a7d8-e54ff0ee4ff1
health: HEALTH_WARN
no active mgr
services:
mon: 3 daemons, quorum ceph01,ceph02,ceph03
mgr: no daemons active
osd: 3 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
(6)創建mgr管理服務
[root@ceph01 ceph]# ceph-deploy mgr create ceph01 ceph02 ceph03
[root@ceph01 ceph]# ceph -s
cluster:
id: e161159f-1ac7-4c77-a7d8-e54ff0ee4ff1
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph01,ceph02,ceph03
mgr: ceph01(active), standbys: ceph02, ceph03
osd: 3 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 3.0 TiB / 3.0 TiB avail
pgs:
(7)創建ceph集羣管理頁面
#在創建之前要確認集羣的狀態,不能有錯誤
#啓用dashboard模塊
[root@ceph01 ceph]# ceph mgr module enable dashboard
#創建https證書
[root@ceph01 ceph]# ceph dashboard create-self-signed-cert
Self-signed certificate created
#查看mgr服務
[root@ceph01 ceph]# ceph mgr services
{
"dashboard": "https://ceph01:8443/"
}
#設置賬號密碼
[root@ceph01 ceph]# ceph dashboard set-login-credentials admin 123
Username and password updated
使用瀏覽器打開https://192.168.100.101:8443
即可登錄查看
5、ceph擴容
(1)擴容osd(在ceph01上操作)
[root@ceph01 ceph]# ceph-deploy osd create --data /dev/sdb ceph04^C
[root@ceph01 ceph]# ceph osd stat
4 osds: 4 up, 4 in; epoch: e17
(2)擴容mon(在ceph01上操作)
[root@ceph01 ceph]# vim ceph.conf
將ceph04主機名、IP地址新增到配置文件中
mon_initial_members = ceph01, ceph02, ceph03, ceph04
mon_host = 192.168.100.101,192.168.100.102,192.168.100.103,192.168.7.104
#配置ceph內部通信網段
public network = 192.168.100.0/24
#重新下發密鑰到各個節點
[root@ceph01 ceph]# ceph-deploy --overwrite-conf config push ceph01 ceph02 ceph03 ceph04
#在ceph04給下發的密鑰增加權限
[root@ceph04 ceph]# chmod +x ceph.client.admin.keyring
#在ceph01添加ceph04到mon
[root@ceph01 ceph]# ceph-deploy mon add ceph04
[root@ceph01 ceph]# systemctl restart ceph-mon.target
[root@ceph01 ceph]# ceph -s
cluster:
id: e161159f-1ac7-4c77-a7d8-e54ff0ee4ff1
health: HEALTH_OK
services:
mon: 4 daemons, quorum ceph01,ceph02,ceph03,ceph04 //此處顯示添加成功
mgr: ceph01(active), standbys: ceph03, ceph02
osd: 4 osds: 4 up, 4 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 4.0 GiB used, 4.0 TiB / 4.0 TiB avail
pgs:
(3)mgr添加節點ceph04
[root@ceph01 ceph]# ceph-deploy mgr create ceph04^C
[root@ceph01 ceph]# ceph -s
cluster:
id: e161159f-1ac7-4c77-a7d8-e54ff0ee4ff1
health: HEALTH_WARN
clock skew detected on mon.ceph02
services:
mon: 4 daemons, quorum ceph01,ceph02,ceph03,ceph04
mgr: ceph01(active), standbys: ceph03, ceph02, ceph04
osd: 4 osds: 4 up, 4 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 4.0 GiB used, 4.0 TiB / 4.0 TiB avail
pgs:
6、osd數據恢復
(1)故障模擬(ceph01上操作)
[root@ceph01 ceph]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 3.99597 root default
-3 0.99899 host ceph01
0 hdd 0.99899 osd.0 up 1.00000 1.00000
-5 0.99899 host ceph02
1 hdd 0.99899 osd.1 up 1.00000 1.00000
-7 0.99899 host ceph03
2 hdd 0.99899 osd.2 up 1.00000 1.00000
-9 0.99899 host ceph04
3 hdd 0.99899 osd.3 up 1.00000 1.00000
#移除osd.2
[root@ceph01 ceph]# ceph osd out osd.2
#刪除osd.2
[root@ceph01 ceph]# ceph osd crush remove osd.2
#刪除osd.2的認證
[root@ceph01 ceph]# ceph auth del osd.2
#徹底刪除osd.2
[root@ceph01 ceph]# ceph osd rm osd.2
#在ceph03重啓osd服務
[root@ceph03 ~]# systemctl restart ceph-osd.target
#查看osd狀態,osd.2的狀態變成了down
[root@ceph01 ceph]# ceph osd tree
......
-7 0.99899 host ceph03
2 osd.2 down 1.00000
......
(2)恢復osd到集羣(在ceph03上操作)
#查看ceph信息
[root@ceph03 ~]# df -Th
文件系統 類型 容量 已用 可用 已用% 掛載點
......
tmpfs tmpfs 1.9G 52K 1.9G 1% /var/lib/ceph/osd/ceph-2
[root@ceph03 ~]# cd /var/lib/ceph/osd/ceph-2
#查看fsid
[root@ceph03 ceph-2]# more fsid
e99fd891-a32b-4e33-8934-b7a6c3158e8f
#ceph創建uuid
[root@ceph03 ceph-2]# ceph osd create e99fd891-a32b-4e33-8934-b7a6c3158e8f
#增加權限
[root@ceph03 ceph-2]# ceph auth add osd.2 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-2/keyring
#0.99899是權重,host=主機名
[root@ceph03 ceph-2]# ceph osd crush add 2 0.99899 host=ceph03
[root@ceph03 ceph-2]# ceph osd in osd.2
[root@ceph03 ceph-2]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 3.99597 root default
-3 0.99899 host ceph01
0 hdd 0.99899 osd.0 up 1.00000 1.00000
-5 0.99899 host ceph02
1 hdd 0.99899 osd.1 up 1.00000 1.00000
-7 0.99899 host ceph03
2 hdd 0.99899 osd.2 up 1.00000 1.00000
-9 0.99899 host ceph04
3 hdd 0.99899 osd.3 up 1.00000 1.00000
[root@ceph03 ceph-2]# systemctl restart ceph-osd.target