Ceph概述 、 部署Ceph集群 、 Ceph塊存儲(chǔ)

案例

鏈接

實(shí)驗(yàn)環(huán)境

1.1 問(wèn)題

準(zhǔn)備四臺(tái)虛擬機(jī),其三臺(tái)作為存儲(chǔ)集群節(jié)點(diǎn),一臺(tái)安裝為客戶端,實(shí)現(xiàn)如下功能:

  • 創(chuàng)建1臺(tái)客戶端虛擬機(jī)
  • 創(chuàng)建3臺(tái)存儲(chǔ)集群虛擬機(jī)
  • 配置主機(jī)名、IP地址、YUM源
  • 修改所有主機(jī)的主機(jī)名
  • 配置無(wú)密碼SSH連接
  • 配置NTP時(shí)間同步
  • 創(chuàng)建虛擬機(jī)磁盤(pán)

1.2 方案

使用4臺(tái)虛擬機(jī),1臺(tái)客戶端、3臺(tái)存儲(chǔ)集群服務(wù)器,拓?fù)浣Y(jié)構(gòu)如圖-1所示。

image

圖-1

所有主機(jī)的主機(jī)名及對(duì)應(yīng)的IP地址如表-1所示。

注意:所有主機(jī)基本系統(tǒng)光盤(pán)的YUM源必須提前配置好。

表-1 主機(jī)名稱及對(duì)應(yīng)IP地址表

image

Ceph組件架構(gòu)如圖-2所示。

image

圖-2

Ceph會(huì)對(duì)數(shù)據(jù)進(jìn)行切割處理,如圖-3所示。

image

圖-3

Ceph隨機(jī)讀寫(xiě)數(shù)據(jù)的思路,如圖-4所示。

image

圖-4

Ceph集群結(jié)構(gòu)如圖-5所示。

image

圖-5

1.3 步驟

實(shí)現(xiàn)此案例需要按照如下步驟進(jìn)行。

步驟一:安裝前準(zhǔn)備

1)為所有節(jié)點(diǎn)配置yum源服務(wù)器。

真機(jī)第二階段素材中的ceph10.iso掛載到/var/ftp/ceph目錄,為所有虛擬機(jī)提供YUM源。

# mkdir /var/ftp/ceph
# mount -t  iso9660 /.../ceph10.iso   /var/ftp/ceph           #不能照抄

2)為虛擬機(jī)添加磁盤(pán):

除了client客戶端,所有3臺(tái)ceph服務(wù)器都添加2塊20G磁盤(pán)。

[root@client ~]# lsblk                 #沒(méi)有額外磁盤(pán)
[root@node1 ~]# lsblk                  #多了2塊磁盤(pán)
[root@node2 ~]# lsblk                  #多了2塊磁盤(pán)
[root@node3 ~]# lsblk                  #多了2塊磁盤(pán)

3)所有主機(jī)設(shè)置防火墻和SELinux(如果已經(jīng)關(guān)閉,則此步驟可以忽略)

[root@client ~]# firewall-cmd --set-default-zone=trusted
[root@client ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
[root@client ~]# setenforce 0

[root@node1 ~]# firewall-cmd --set-default-zone=trusted
[root@node1 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
[root@node1 ~]# setenforce 0

[root@node2 ~]# firewall-cmd --set-default-zone=trusted
[root@node2 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
[root@node2 ~]# setenforce 0

[root@node3 ~]# firewall-cmd --set-default-zone=trusted
[root@node3 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
[root@node3 ~]# setenforce 0

4)配置無(wú)密碼連接(包括自己遠(yuǎn)程自己也不需要密碼),在node1操作。

[root@node1 ~]# ssh-keygen   -f /root/.ssh/id_rsa    -N ''
#-f后面跟密鑰的文件名稱(希望創(chuàng)建密鑰到哪個(gè)文件)
#-N ''代表不給密鑰配置密鑰(不能給密鑰配置密碼)
[root@node1 ~]# for i in 10  11  12  13
do
ssh-copy-id  192.168.4.$i
done
#通過(guò)ssh-copy-id將密鑰傳遞給192.168.4.10、192.168.4.11、192.168.4.12、192.168.4.13

5)修改/etc/hosts并同步到所有主機(jī)。

注意:/etc/hosts解析的域名要與本機(jī)主機(jī)名一致?。。。?/p>

[root@node1 ~]# vim /etc/hosts     #修改文件,手動(dòng)添加如下內(nèi)容(不要?jiǎng)h除文件原有內(nèi)容)
... ...
192.168.4.10     client
192.168.4.11     node1
192.168.4.12     node2
192.168.4.13     node3

提示:/etc/hosts解析的域名必須與本機(jī)主機(jī)名一致?。?!

將/etc/hosts文件拷貝給所有其他主機(jī)(client、node1、node2、node3)

[root@node1 ~]# for i in client node1  node2  node3
do
  scp /etc/hosts   $i:/etc/
done

6)修改所有節(jié)點(diǎn)都需要配置YUM源,并同步到所有主機(jī)。

[root@node1 ~]# vim /etc/yum.repos.d/ceph.repo    #新建YUM源配置文件,內(nèi)容如下
[mon]
name=mon
baseurl=ftp://192.168.4.254/ceph/MON
gpgcheck=0
[osd]
name=osd
baseurl=ftp://192.168.4.254/ceph/OSD
gpgcheck=0
[tools]
name=tools
baseurl=ftp://192.168.4.254/ceph/Tools
gpgcheck=0
[root@node1 ~]# yum clean all               #清空緩存
[root@node1 ~]# yum repolist                #驗(yàn)證YUM源軟件數(shù)量
源標(biāo)識(shí)            源名稱                    狀態(tài)
Dvd                redhat                    9,911
Mon                mon                        41
Osd                osd                        28
Tools            tools                    33
repolist: 10,013
[root@node1 ~]# for i in  client  node1  node2  node3
do
  scp /etc/yum.repos.d/ceph.repo   $i:/etc/yum.repos.d/
done

7)給所有節(jié)點(diǎn)安裝ceph相關(guān)軟件包。

[root@node1 ceph-cluster]# for i in node1 node2 node3
do
  ssh  $i "yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw"
done 

8)Client主機(jī)配置NTP服務(wù)器。

[root@client ~]# yum -y install chrony
[root@client ~]# vim /etc/chrony.conf
allow 192.168.4.0/24        #大約26行
local stratum 10            #大約29行(去注釋即可)
[root@client ~]# systemctl restart chronyd

9)node1,node2,node3修改NTP客戶端配置。

[root@node1 ~]# yum -y install chrony
[root@node1 ~]# vim /etc/chrony.conf
server 192.168.4.10   iburst              #配置文件第二行,手動(dòng)添加一行新內(nèi)容
[root@node1 ~]# systemctl restart chronyd
[root@node1 ~]# chronyc sources -v        #查看同步結(jié)果,應(yīng)該是^*

[root@node2 ~]# yum -y install chrony
[root@node2 ~]# vim /etc/chrony.conf
server 192.168.4.10   iburst              #配置文件第二行,手動(dòng)添加一行新內(nèi)容
[root@node2 ~]# systemctl restart chronyd
[root@node2 ~]# chronyc sources -v            #查看同步結(jié)果,應(yīng)該是^*

[root@node3 ~]# yum -y install chrony
[root@node3 ~]# vim /etc/chrony.conf
server 192.168.4.10   iburst              #配置文件第二行,手動(dòng)添加一行新內(nèi)容
[root@node3 ~]# systemctl restart chronyd
[root@node3 ~]# chronyc sources -v       #查看同步結(jié)果,應(yīng)該是^*

部署ceph集群

2.1 問(wèn)題

沿用練習(xí)一,部署Ceph集群服務(wù)器,實(shí)現(xiàn)以下目標(biāo):

  • 安裝部署工具ceph-deploy
  • 創(chuàng)建ceph集群
  • 準(zhǔn)備日志磁盤(pán)分區(qū)
  • 創(chuàng)建OSD存儲(chǔ)空間
  • 查看ceph狀態(tài),驗(yàn)證

2.2 步驟

實(shí)現(xiàn)此案例需要按照如下步驟進(jìn)行。

步驟一:安裝部署軟件ceph-deploy

1)在node1安裝部署工具,學(xué)習(xí)工具的語(yǔ)法格式。

[root@node1 ~]#  yum -y install ceph-deploy
[root@node1 ~]#  ceph-deploy  --help
[root@node1 ~]#  ceph-deploy mon --help

2)創(chuàng)建目錄(目錄名稱可以任意,推薦與案例一致)

[root@node1 ~]#  mkdir ceph-cluster
[root@node1 ~]#  cd ceph-cluster/

步驟二:部署Ceph集群

1)創(chuàng)建Ceph集群配置,在ceph-cluster目錄下生成Ceph配置文件(ceph.conf)。

在ceph.conf配置文件中定義monitor主機(jī)是誰(shuí)。

[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3
[root@node1 ceph-cluster]# vim ceph.conf        #不要修改原始內(nèi)容,在文件末尾添加一行
rbd_default_features = 1
#默認(rèn)開(kāi)啟COW分層快照的功能

2)初始化所有節(jié)點(diǎn)的mon服務(wù),也就是啟動(dòng)mon服務(wù)。

拷貝當(dāng)前目錄的配置文件到所有節(jié)點(diǎn)的/etc/ceph/目錄并啟動(dòng)mon服務(wù)。

[root@node1 ceph-cluster]# ceph-deploy mon create-initial
#配置文件ceph.conf中有三個(gè)mon的IP,ceph-deploy腳本知道自己應(yīng)該遠(yuǎn)程誰(shuí)

3) 在每個(gè)node主機(jī)查看自己的服務(wù)(注意每臺(tái)主機(jī)服務(wù)名稱不同)

[root@node1 ceph-cluster]# systemctl status ceph-mon@node1
[root@node2 ~]# systemctl status ceph-mon@node2
[root@node3 ~]# systemctl status ceph-mon@node3
#備注:管理員可以自己?jiǎn)?dòng)(start)、重啟(restart)、關(guān)閉(stop),查看狀態(tài)(status).
#提醒:這些服務(wù)在30分鐘只能啟動(dòng)3次,超過(guò)就報(bào)錯(cuò). 
#StartLimitInterval=30min
#StartLimitBurst=3
#在這個(gè)文件中有定義/usr/lib/systemd/system/ceph-mon@.service
#如果修改該文件,需要執(zhí)行命令# systemctl  daemon-reload重新加載配置

4)查看ceph集群狀態(tài)(現(xiàn)在狀態(tài)應(yīng)該是health HEALTH_ERR)

[root@node1 ceph-cluster]# ceph -s

【提示】:如果無(wú)法成功部署ceph集群,可以通過(guò)如下命令清理集群軟件以及相關(guān)數(shù)據(jù)(注意,這些操作會(huì)刪除node1-node3主機(jī)的所有ceph軟件及配置文件等數(shù)據(jù),非必要不要操作?。。?。

[root@node1 ceph-cluster]# ceph-deploy  purge  node1  node2  node3
[root@node1 ceph-cluster]# ceph-deploy  purgedata  node1  node2  node3

步驟三:創(chuàng)建OSD

1)初始化清空磁盤(pán)數(shù)據(jù)(僅node1操作即可)。

初始化磁盤(pán),將所有磁盤(pán)分區(qū)格式設(shè)置為GPT格式(根據(jù)實(shí)際情況填寫(xiě)磁盤(pán)名稱)。

[root@node1 ceph-cluster]# ceph-deploy disk  zap  node1:vdb   node1:vdc   
[root@node1 ceph-cluster]# ceph-deploy disk  zap  node2:vdb   node2:vdc
[root@node1 ceph-cluster]# ceph-deploy disk  zap  node3:vdb   node3:vdc  
#相當(dāng)于ssh 遠(yuǎn)程node1,在node1執(zhí)行parted /dev/vdb  mktable  gpt
#其他主機(jī)都是一樣的操作
#ceph-deploy是個(gè)腳本,這個(gè)腳本會(huì)自動(dòng)ssh遠(yuǎn)程自動(dòng)創(chuàng)建gpt分區(qū)

思考題?

# vim test.sh
#!/bin/bash
case $1 in
user)
useradd -u 1000 $2;;
disk)
parted /dev/$2  mktable  gpt;;
esac
# chmod +x test.sh
# ./test.sh  user  jerry
# ./test.sh  disk  vdc

執(zhí)行上面的腳本沒(méi)有指定賬戶UID,為什么會(huì)自動(dòng)創(chuàng)建一個(gè)UID為1000的用戶?

執(zhí)行上面的腳本沒(méi)有指定磁盤(pán)分區(qū)表類型,為什么創(chuàng)建的分區(qū)表類型為gpt類型?

上面的腳本如果執(zhí)行時(shí)不給位置變量的參數(shù)為怎么樣?

2)創(chuàng)建OSD存儲(chǔ)空間(僅node1操作即可)

重要:很多同學(xué)在這里會(huì)出錯(cuò)!將主機(jī)名、設(shè)備名稱輸入錯(cuò)誤?。?!

遠(yuǎn)程所有node主機(jī),創(chuàng)建分區(qū),格式化磁盤(pán),掛載磁盤(pán),啟動(dòng)osd服務(wù)共享磁盤(pán)。

[root@node1 ceph-cluster]# ceph-deploy osd create node1:vdb  node1:vdc
#每個(gè)磁盤(pán)都會(huì)被自動(dòng)分成兩個(gè)分區(qū);一個(gè)固定5G大??;一個(gè)為剩余所有容量
#5G分區(qū)為Journal日志緩存;剩余所有空間為數(shù)據(jù)盤(pán)。
[root@node1 ceph-cluster]# ceph-deploy osd create node2:vdb  node2:vdc
[root@node1 ceph-cluster]# ceph-deploy osd create node3:vdb  node3:vdc

提醒:ceph-deploy是個(gè)腳本,腳本會(huì)自動(dòng)創(chuàng)建分區(qū)、格式化、掛載!

怎么驗(yàn)證分區(qū)了?怎么驗(yàn)證格式化?怎么驗(yàn)證掛載了?

[root@node1 ~]# df -Th
[root@node2 ~]# df -Th
[root@node3 ~]# df -Th

思考題:請(qǐng)問(wèn)lsblk和df命令的區(qū)別?

3)在三臺(tái)不同的主機(jī)查看OSD服務(wù)狀態(tài),可以開(kāi)啟、關(guān)閉、重啟服務(wù)。

注意:注意看清楚下面的主機(jī)名?。?!

[root@node1 ~]# systemctl status ceph-osd@0
[root@node2 ~]# systemctl status ceph-osd@2
[root@node3 ~]# systemctl status ceph-osd@4
#備注:管理員可以自己?jiǎn)?dòng)(start)、重啟(restart)、關(guān)閉(stop),查看狀態(tài)(status).
#提醒:這些服務(wù)在30分鐘只能啟動(dòng)3次,超過(guò)就報(bào)錯(cuò).
#StartLimitInterval=30min
#StartLimitBurst=3
#在這個(gè)文件中有定義/usr/lib/systemd/system/ceph-osd@.service
#如果修改該文件,需要執(zhí)行命令# systemctl  daemon-reload重新加載配置

常見(jiàn)錯(cuò)誤及解決方法(非必須操作)。

使用osd create創(chuàng)建OSD存儲(chǔ)空間時(shí),如提示下面的錯(cuò)誤提示:

[ceph_deploy][ERROR ] RuntimeError: bootstrap-osd keyring not found; run 'gatherkeys'

可以使用如下命令修復(fù)文件,重新配置ceph的密鑰文件:

[root@node1 ceph-cluster]#  ceph-deploy gatherkeys node1 node2 node3 

步驟四:驗(yàn)證測(cè)試

1) 查看集群狀態(tài)。

[root@node1 ~]#  ceph  -s
[root@node1 ~]#  ceph   osd   tree

2)常見(jiàn)錯(cuò)誤(非必須操作)。

如果查看狀態(tài)包含如下信息:

health: HEALTH_WARN
clock skew detected on node2, node3…

clock skew表示時(shí)間不同步,解決辦法:請(qǐng)先將所有主機(jī)的時(shí)間都使用NTP時(shí)間同步?。。?/p>

Ceph要求所有主機(jī)時(shí)差不能超過(guò)0.05s,否則就會(huì)提示W(wǎng)ARN。

如果狀態(tài)還是失敗,可以嘗試執(zhí)行如下命令,重啟所有ceph服務(wù):

[root@node1 ~]#  systemctl restart ceph.target

創(chuàng)建Ceph塊存儲(chǔ)

3.1 問(wèn)題

沿用練習(xí)一,使用Ceph集群的塊存儲(chǔ)功能,實(shí)現(xiàn)以下目標(biāo):

  • 創(chuàng)建塊存儲(chǔ)鏡像
  • 客戶端映射鏡像
  • 刪除鏡像

3.2 步驟

實(shí)現(xiàn)此案例需要按照如下步驟進(jìn)行。

步驟一:創(chuàng)建鏡像

1)查看存儲(chǔ)池,默認(rèn)存儲(chǔ)池名稱為rbd。

[root@node1 ~]# ceph osd lspools
0 rbd,
#查看結(jié)果顯示,共享池的名稱為rbd,這個(gè)共享池的編號(hào)為0,英語(yǔ)詞匯:pool(池塘、水塘)

2)創(chuàng)建鏡像、查看鏡像

[root@node1 ~]# rbd create demo-image --size 10G
#創(chuàng)建demo-image鏡像,這里的demo-image創(chuàng)建的鏡像名稱,名稱可以為任意字符。
#size可以指定鏡像大小
[root@node1 ~]# rbd create rbd/jacob  --size 10G
#在rbd池中創(chuàng)建名稱為jacob的鏡像(rbd/jacob),鏡像名稱可以任意
[root@node1 ~]# rbd list                    #列出所有鏡像
[root@node1 ~]# rbd info demo-image        #查看demo-image這個(gè)鏡像的詳細(xì)信息
rbd image 'demo-image':
size 10240 MB in 2560 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.d3aa2ae8944a
format: 2
features: layering

步驟二:動(dòng)態(tài)調(diào)整

1)擴(kuò)容容量

[root@node1 ~]# rbd resize --size 15G jacob             
#調(diào)整jacob鏡像的大小,jacob是鏡像的名稱,size指定擴(kuò)容到15G
[root@node1 ~]# rbd info jacob

2)縮小容量

[root@node1 ~]# rbd resize --size 7G jacob --allow-shrink
#英文詞匯:allow(允許),shrink(縮?。?[root@node1 ~]# rbd info jacob
#查看jacob這個(gè)鏡像的詳細(xì)信息(jacob是前面創(chuàng)建的鏡像)

步驟三:通過(guò)KRBD訪問(wèn)

Linux內(nèi)核可用直接訪問(wèn)Ceph塊存儲(chǔ),KVM可用借助于librbd訪問(wèn)Ceph塊存儲(chǔ)。

客戶端訪問(wèn)結(jié)構(gòu)如圖-6所示。

image

圖-6

1)客戶端通過(guò)KRBD訪問(wèn)

#客戶端需要安裝ceph-common軟件包
#拷貝配置文件(否則不知道集群在哪)
#拷貝連接密鑰(否則無(wú)連接權(quán)限)
[root@client ~]# yum -y  install ceph-common
[root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.conf /etc/ceph/
[root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.client.admin.keyring \
/etc/ceph/
[root@client ~]# rbd map  jacob          #客戶端訪問(wèn)映射服務(wù)器的jacob共享鏡像
[root@client ~]#  lsblk                   #查看結(jié)果(會(huì)多一塊磁盤(pán))
[root@client ~]# rbd showmapped          #查看磁盤(pán)名和共享鏡像名稱的對(duì)應(yīng)關(guān)系
id pool image snap device    
0  rbd  jacob -    /dev/rbd0

2)客戶端格式化、掛載分區(qū)

[root@client ~]# mkfs.xfs /dev/rbd0                     #格式化,格式為xfs
[root@client ~]# mount /dev/rbd0 /mnt/                  #掛載(可以掛載到任意目錄)
[root@client ~]# echo "test" > /mnt/test.txt           #寫(xiě)入數(shù)據(jù)

步驟四:刪除鏡像

1) 客戶端撤銷磁盤(pán)映射

[root@client ~]# umount /mnt                      #卸載
[root@client ~]# rbd showmapped                  #查看磁盤(pán)名和共享鏡像名稱的對(duì)應(yīng)關(guān)系
id pool image        snap device    
0  rbd  jacob        -    /dev/rbd0
[root@client ~]# rbd unmap /dev/rbd0            #撤銷磁盤(pán)映射

附加信息:Ceph操作思路(知識(shí)總結(jié))

一、準(zhǔn)備工作:

IP,主機(jī)名,hosts解析,ssh密鑰,時(shí)間同步,yum源,防火墻,selinux

二、部署ceph:

1.安裝軟件

ceph-deploy(腳本)
ceph-mon  ceph-osd  ceph-mds  ceph-radosgw(集群)

2.修改配置啟動(dòng)服務(wù)mon

mkdir  目錄;cd 目錄
ceph-deploy  new  node1   node2   node3  (生成配置文件)
ceph-deploy  mon  create-initial  (拷貝配置文件并啟動(dòng)mon服務(wù))

3.啟動(dòng)osd服務(wù)共享硬盤(pán)

ceph-deploy  disk  zap   主機(jī)名:磁盤(pán)名  ...  ...
ceph-deploy  osd  create  主機(jī)名:磁盤(pán)   ...  ...

三、使用Ceph的思路:

1.塊共享

服務(wù)器: rbd  create  創(chuàng)建一個(gè)共享鏡像
客戶端: 安裝cpeh-common;  cp 配置文件和密鑰
rbd  map  |  rbd  unmap

附加知識(shí)(如何刪除某個(gè)OSD,下面的假設(shè)是刪除osd.4)

ceph osd tree
ceph osd out osd.4
ceph osd tree
ceph -s
ceph osd crush remove osd.4
ceph auth del osd.4
ceph -s
ceph osd rm osd.4
最后要找到對(duì)應(yīng)的主機(jī),umount把osd.4對(duì)應(yīng)的磁盤(pán)卸載
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容