CEPH集羣安裝、擴容、OSD故障恢復

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章