實(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所示。

圖-1
所有主機(jī)的主機(jī)名及對(duì)應(yīng)的IP地址如表-1所示。
注意:所有主機(jī)基本系統(tǒng)光盤(pán)的YUM源必須提前配置好。
表-1 主機(jī)名稱及對(duì)應(yīng)IP地址表

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

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

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

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

圖-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所示。

圖-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)卸載