搭建ceph集群
本文參考 http://www.rzrgm.cn/qiuhom-1874/p/16724473.html
部署工具介紹
1、ceph-deploy:該部署工具是ceph官方的部署工具,它只依賴SSH訪問(wèn)服務(wù)器,不需要額外的agent;它可以完全運(yùn)行在自己的工作站上(比如admin host),不需要服務(wù)器,數(shù)據(jù)庫(kù)類似的東西;該工具不是一個(gè)通用的部署工具,只針對(duì)ceph;相比ansible,puppet,功能相對(duì)單一;該工具可以推送配置文件,但它不處理客戶端配置,以及客戶端部署相關(guān)依賴等;
2、ceph-ansible:該工具是用ansible寫的劇本角色,我們只需要把對(duì)應(yīng)的項(xiàng)目克隆下來(lái),修改必要的參數(shù),就可以正常的拉起一個(gè)ceph集群;但這前提是我們需要熟練使用ansible;項(xiàng)目地址 https://github.com/ceph/ceph-ansible;
3、ceph-chef:chef也是類似ansible、puppet這類自動(dòng)化部署工具,我們需要手動(dòng)先安裝好chef,然后手動(dòng)寫代碼實(shí)現(xiàn)部署;ceph-chef就是寫好部署ceph的一個(gè)項(xiàng)目,我們可以下載對(duì)應(yīng)項(xiàng)目在本地修改必要參數(shù),也能正常拉起一個(gè)ceph集群;前提是我們要熟練使用chef才行;項(xiàng)目下載地址https://github.com/ceph/ceph-chef;
4、puppet-ceph:很顯然該工具就是用puppet寫好的部署ceph的模塊,也是下載下來(lái)修改必要參數(shù),就可以正常拉起一個(gè)ceph集群;
不管用什么工具,我們首先都要熟練知道ceph集群架構(gòu),它的必要組件,每個(gè)組件是怎么工作的,有什么作用,需要怎么配置等等;除此之外我們還需要熟練使用各種自動(dòng)化部署工具,才能很好的使用上述工具部署ceph集群;
集群拓?fù)渚W(wǎng)絡(luò)

提示:Public Network是指公共網(wǎng)絡(luò),專供客戶端連接ceph集群使用;一般如果節(jié)點(diǎn)不多,集群規(guī)模和用戶的訪問(wèn)量不大的情況下,只有一個(gè)public network也是完全ok;存在cluster network主要原因是,集群內(nèi)部的事務(wù)處理,可能影響到客戶端在ceph存儲(chǔ)數(shù)據(jù);所以cluster network是集群私有網(wǎng)絡(luò),專門用于集群內(nèi)部各組件通信協(xié)調(diào)使用;我們用于部署ceph的admin host 只需要有一個(gè)公共網(wǎng)絡(luò)連入集群下發(fā)配置即可;
Ceph集群系統(tǒng)基礎(chǔ)環(huán)境設(shè)定
| 主機(jī)地址 | 角色 |
|---|---|
| public network:192.168.0.70/24 | admin host |
| public network:192.168.0.71/24 cluster network:172.16.30.71/24 | mon01/stor01 |
| public network:192.168.0.72/24 cluster network:172.16.30.72/24 | mon02/stor02 |
| public network:192.168.0.73/24 cluster network:172.16.30.73/24 | mon03/stor03 |
| public network:192.168.0.74/24 cluster network:172.16.30.74/24 | mgr01/stor04 |
| public network:192.168.0.75/24 cluster network:172.16.30.75/24 | mgr02/stor05 |
各主機(jī)主機(jī)名解析
92.168.0.70 ceph-admin ceph-admin.ilinux.io
192.168.0.71 ceph-mon01 ceph-mon01.ilinux.io ceph-stor01 ceph-stor01.ilinux.io
192.168.0.72 ceph-mon02 ceph-mon02.ilinux.io ceph-stor02 ceph-stor02.ilinux.io
192.168.0.73 ceph-mon03 ceph-mon03.ilinux.io ceph-stor03 ceph-stor03.ilinux.io
192.168.0.74 ceph-mgr01 ceph-mgr01.ilinux.io ceph-stor04 ceph-stor04.ilinux.io
192.168.0.75 ceph-mgr02 ceph-mgr02.ilinux.io ceph-stor05 ceph-stor05.ilinux.io
172.16.30.71 ceph-mon01 ceph-mon01.ilinux.io ceph-stor01 ceph-stor01.ilinux.io
172.16.30.72 ceph-mon02 ceph-mon02.ilinux.io ceph-stor02 ceph-stor02.ilinux.io
172.16.30.73 ceph-mon03 ceph-mon03.ilinux.io ceph-stor03 ceph-stor03.ilinux.io
172.16.30.74 ceph-mgr01 ceph-mgr01.ilinux.io ceph-stor04 ceph-stor04.ilinux.io
172.16.30.75 ceph-mgr02 ceph-mgr02.ilinux.io ceph-stor05 ceph-stor05.ilinux.io
各主機(jī)配置ntp服務(wù)設(shè)定各節(jié)點(diǎn)時(shí)間精準(zhǔn)同步
[root@ceph-admin ~]# sed -i 's@^\(server \).*@\1ntp1.aliyun.com iburst@' /etc/chrony.conf
[root@ceph-admin ~]# systemctl restart chronyd

提示:上述服務(wù)器都需要在chrony.conf中配置同步時(shí)間的服務(wù)器,這里推薦使用阿里云,然后重啟chronyd服務(wù)即可;
各節(jié)點(diǎn)關(guān)閉iptables 或firewalld服務(wù)
[root@ceph-admin ~]# systemctl stop firewalld
[root@ceph-admin ~]# systemctl disable firewalld
[root@ceph-admin ~]# sed -i 's@^\(SELINUX=\).*@\1Disabled@' /etc/sysconfig/selinu
[root@ceph-admin ~]# setenforce 0
提示:上述sed命令表示查找/etc/sysconfig/selinux配置文件中,以SELINUX開(kāi)頭的行當(dāng)所有內(nèi)容,并將其替換為SELINUX=Disabled;ok,準(zhǔn)備好集群基礎(chǔ)環(huán)境以后,接下來(lái)我們開(kāi)始部署ceph;
準(zhǔn)備yum倉(cāng)庫(kù)配置文件(https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ceph-release-1-1.el7.noarch.rpm)
[root@ceph-admin ~]# rpm -ivh ceph-release-1-1.el7.noarch.rpm
[root@ceph-admin ~]# yum install -y epel-release
到此ceph的yum倉(cāng)庫(kù)配置文件就準(zhǔn)備好了
在集群各節(jié)點(diǎn)創(chuàng)建部署ceph的特定用戶帳號(hào)
[root@ceph-admin ~]# useradd cephadm && echo "admin" |passwd --stdin cephadm
提示:部署工具ceph-deploy 必須以普通用戶登錄到Ceph集群的各目標(biāo)節(jié)點(diǎn),且此用戶需要擁有無(wú)密碼使用sudo命令的權(quán)限,以便在安裝軟件及生成配置文件的過(guò)程中無(wú)需中斷配置過(guò)程。不過(guò),較新版的ceph-deploy也支持用 ”--username“ 選項(xiàng)提供可無(wú)密碼使用sudo命令的用戶名(包括 root ,但不建議這樣做)。另外,使用”ceph-deploy --username {username} “命令時(shí),指定的用戶需要能夠通過(guò)SSH協(xié)議自動(dòng)認(rèn)證并連接到各Ceph節(jié)點(diǎn),以免ceph-deploy命令在配置中途需要用戶輸入密碼。
確保集群節(jié)點(diǎn)上新創(chuàng)建的cephadm用戶能夠無(wú)密碼運(yùn)行sudo權(quán)限
[root@ceph-admin ~]# echo "cephadm ALL = (root) NOPASSWD:ALL" |sudo tee /etc/sudoers.d/cephadm
[root@ceph-admin ~]# chmod 0440 /etc/sudoers.d/cephadm

切換至cephadm用戶,查看sudo權(quán)限

配置cephadm基于密鑰的ssh認(rèn)證

提示:先切換用戶到cephadm下然后生成密鑰;
拷貝公鑰給自己

復(fù)制被地.ssh目錄給其他主機(jī),放置在cephadm用戶家目錄下
[cephadm@ceph-admin ~]$ scp -rp .ssh cephadm@ceph-mon01:/home/cephadm/
[cephadm@ceph-admin ~]$ scp -rp .ssh cephadm@ceph-mon02:/home/cephadm/
[cephadm@ceph-admin ~]$ scp -rp .ssh cephadm@ceph-mon03:/home/cephadm/
[cephadm@ceph-admin ~]$ scp -rp .ssh cephadm@ceph-mgr01:/home/cephadm/
[cephadm@ceph-admin ~]$ scp -rp .ssh cephadm@ceph-mgr02:/home/cephadm/
驗(yàn)證:以cephadm用戶遠(yuǎn)程集群節(jié)點(diǎn),看看是否是免密登錄

提示:能夠正常遠(yuǎn)程執(zhí)行命令說(shuō)明我們的免密登錄就沒(méi)有問(wèn)題;
在admin host上安裝ceph-deploy
[cephadm@ceph-admin ~]$ sudo yum update
[cephadm@ceph-admin ~]$ sudo yum install ceph-deploy python-setuptools python2-subprocess32
驗(yàn)證ceph-deploy是否成功安裝
[cephadm@ceph-admin ~]$ ceph-deploy --version
2.0.1
[cephadm@ceph-admin ~]$
提示:能夠正常看到ceph-deploy的版本,說(shuō)明ceph-deploy安裝成功;
部署RADOS存儲(chǔ)集群
1、在admin host以cephadm用戶創(chuàng)建集群相關(guān)配置文件目錄
[cephadm@ceph-admin ~]$ mkdir ceph-cluster
[cephadm@ceph-admin ~]$ cd ceph-cluster
[cephadm@ceph-admin ceph-cluster]$ pwd
/home/cephadm/ceph-cluster
[cephadm@ceph-admin ceph-cluster]$
2、初始化第一個(gè)mon節(jié)點(diǎn)
提示:ceph-deploy new的命令格式 我們只需要對(duì)應(yīng)節(jié)點(diǎn)的主機(jī)名即可;但是前提是對(duì)應(yīng)主機(jī)名做了正確的解析;
[cephadm@ceph-admin ceph-cluster]$ sudo ceph-deploy new ceph-mon01
提示:我們可以在命令行使用--public-network 選項(xiàng)來(lái)指定集群公共網(wǎng)絡(luò)和使用--cluster-network選項(xiàng)來(lái)指定對(duì)應(yīng)集群網(wǎng)絡(luò);當(dāng)然也可以生成好配置文件,然后在配置文件里修改也行;
3、修改配置文件指定集群的公共網(wǎng)絡(luò)和集群網(wǎng)絡(luò)

提示:編輯生成的ceph.conf配置文件,在【global】配置段中設(shè)置ceph集群面向客戶端通信的網(wǎng)絡(luò)ip地址所在公網(wǎng)網(wǎng)絡(luò)地址和面向集群各節(jié)點(diǎn)通信的網(wǎng)絡(luò)ip地址所在集群網(wǎng)絡(luò)地址,如上所示;
4、安裝ceph集群
[cephadm@ceph-admin ceph-cluster]$ ceph-deploy install ceph-mon01 ceph-mon02 ceph-mon03 ceph-mgr01 ceph-mgr02
提示:ceph-deploy命令能夠以遠(yuǎn)程的方式連入Ceph集群各節(jié)點(diǎn)完成程序包安裝等操作,所以我們只需要告訴ceph-deploy 那些主機(jī)需要安裝即可;
集群各主機(jī)如果需要獨(dú)立安裝ceph程序包,方法如下(后面安裝會(huì)自動(dòng)安裝,此處不用執(zhí)行)
yum install ceph ceph-radosgw
再次在admin host上用ceph-deploy安裝ceph集群
提示:如果在最后能夠看到ceph的版本,說(shuō)明我們指定的節(jié)點(diǎn)都已經(jīng)安裝好對(duì)應(yīng)ceph集群所需的程序包了;
5、配置初始MON節(jié)點(diǎn),并收集所有密鑰
查看ceph-deploy mon幫助
提示:add 是添加mon節(jié)點(diǎn),create是創(chuàng)建一個(gè)mon節(jié)點(diǎn),但不初始化,如果要初始化需要在對(duì)應(yīng)節(jié)點(diǎn)的配置文件中定義配置mon成員;create-initial是創(chuàng)建并初始化mon成員;destroy是銷毀一個(gè)mon移除mon節(jié)點(diǎn);
初始化mon節(jié)點(diǎn)
[cephadm@ceph-admin ceph-cluster]$ sudo ceph-deploy mon create-initial
提示:從上面的輸出信息可以看到該命令是從當(dāng)前配置文件讀取mon節(jié)點(diǎn)信息,然后初始化;我們?cè)谏厦娴膎ew 命令里只有給了mon01,所以這里只初始化了mon01;并在當(dāng)前目錄生成了引導(dǎo)mds、mgr、osd、rgw和客戶端連接ceph集群的管理員密鑰;
6、拷貝配置文件和admin密鑰到集群各節(jié)點(diǎn)
提示:ceph-deploy admin命令主要作用是向指定的集群主機(jī)推送配置文件和客戶端管理員密鑰;以免得每次執(zhí)行”ceph“命令行時(shí)不得不明確指定MON節(jié)點(diǎn)地址和ceph.client.admin.keyring;
[cephadm@ceph-admin ceph-cluster]$ ceph-deploy admin ceph-mon01 ceph-mon02 ceph-mon03 ceph-stor04 ceph-stor05
提示:推送配置和管理員密鑰我們只需要后面跟上對(duì)應(yīng)集群主機(jī)即可,注意主機(jī)名要做對(duì)應(yīng)的解析;這里還需要多說(shuō)一句,配置文件是集群每個(gè)節(jié)點(diǎn)都需要推送的,但是管理密鑰通常只需要推送給需要在對(duì)應(yīng)主機(jī)上執(zhí)行管理命令的主機(jī)上使用;所以ceph-deploy config命令就是用于專門推送配置文件,不推送管理密鑰;
提示:ceph-deploy config 有兩個(gè)子命令,一個(gè)是push,表示把本機(jī)配置推送到對(duì)應(yīng)指定的主機(jī);pull表示把遠(yuǎn)端主機(jī)的配置拉去到本地;
驗(yàn)證:查看mon01主機(jī)上,對(duì)應(yīng)配置文件和管理員密鑰文件是否都推送過(guò)去了?

提示:可以看到對(duì)應(yīng)配置文件和管理員密鑰都推送到對(duì)應(yīng)主機(jī)上,但是管理員密鑰的權(quán)限對(duì)于cephadm是沒(méi)有讀權(quán)限;
設(shè)置管理員密鑰能夠被cephadm用戶有讀權(quán)限
sudo setfacl -m u:cephadm:r /etc/ceph/ceph.client.admin.keyring
sudo getfacl /etc/ceph/ceph.client.admin.keyring

提示:上述設(shè)置權(quán)限的命令需要在每個(gè)節(jié)點(diǎn)都要設(shè)置;
7、配置Manager節(jié)點(diǎn),啟動(dòng)ceph-mgr進(jìn)程(僅Luminious+版本)
查看ceph-deploy mgr幫助
[cephadm@ceph-admin ceph-cluster]$ ceph-deploy mgr create ceph-mgr01 ceph-mgr02
在集群節(jié)點(diǎn)上執(zhí)行ceph -s來(lái)查看現(xiàn)在ceph集群的狀態(tài)

提示:可以看到現(xiàn)在集群有一個(gè)mon節(jié)點(diǎn)和兩個(gè)mgr節(jié)點(diǎn);mgr01處于當(dāng)前活躍狀態(tài),mgr02處于備用狀態(tài);對(duì)應(yīng)沒(méi)有osd,所以集群狀態(tài)顯示health warning;
向RADOS集群添加OSD
列出并擦凈磁盤
查看ceph-deploy disk命令的幫助

提示:ceph-deploy disk命令有兩個(gè)子命令,list表示列出對(duì)應(yīng)主機(jī)上的磁盤;zap表示擦凈對(duì)應(yīng)主機(jī)上的磁盤;

擦凈mon01的sdb和sdc
[cephadm@ceph-admin ceph-cluster]$ ceph-deploy disk zap ceph-mon01 /dev/sdb /dev/sdc
提示:擦凈磁盤我們需要在后面接對(duì)應(yīng)主機(jī)和磁盤;若設(shè)備上此前有數(shù)據(jù),則可能需要在相應(yīng)節(jié)點(diǎn)上以root用戶使用“ceph-volume lvm zap --destroy {DEVICE}”命令進(jìn)行;
添加osd
[cephadm@ceph-admin ceph-cluster]$ ceph-deploy osd create ceph-mon01 --data /dev/sdb
查看集群狀態(tài)

提示:可以看到現(xiàn)在集群osd有一個(gè)正常,存儲(chǔ)空間為80G;說(shuō)明我們剛才添加到osd已經(jīng)成功;后續(xù)其他主機(jī)上的osd也是上述過(guò)程,先擦凈磁盤,然后在添加為osd;
列出對(duì)應(yīng)主機(jī)上的osd信息
[cephadm@ceph-admin ceph-cluster]$ ceph-deploy osd list ceph-mon01
提示:到此我們RADOS集群相關(guān)組件就都部署完畢了;
管理osd ceph命令查看osd相關(guān)信息
1、查看osd狀態(tài)
[root@ceph-mon01 ~]# ceph osd stat
10 osds: 10 up, 10 in; epoch: e56
#查看osd編號(hào)
[root@ceph-mon01 ~]# ceph osd ls
0
1
2
3
4
5
#查看osd映射狀態(tài)
[root@ceph-mon01 ~]# ceph osd dump
#刪除osd
[root@ceph-mon01 ~]# ceph osd out 0
#停止進(jìn)程(不用執(zhí)行)
systemctl stop ceph-osd@0
提示:停用進(jìn)程需要在對(duì)應(yīng)主機(jī)上停止ceph-osd@{osd-num};停止進(jìn)程以后,對(duì)應(yīng)集群狀態(tài)就能看到對(duì)應(yīng)只有9個(gè)osd進(jìn)程處于up狀態(tài);
3、移除設(shè)備


提示:可以看到移除osd以后,對(duì)應(yīng)集群狀態(tài)里就只有9個(gè)osd了;若類似如下的OSD的配置信息存在于ceph.conf配置文件中,管理員在刪除OSD之后手動(dòng)將其刪除。
不過(guò),對(duì)于Luminous之前的版本來(lái)說(shuō),管理員需要依次手動(dòng)執(zhí)行如下步驟刪除OSD設(shè)備:
1. 于CRUSH運(yùn)行圖中移除設(shè)備:ceph osd crush remove {name}
2. 移除OSD的認(rèn)證key:ceph auth del osd.{osd-num}
3. 最后移除OSD設(shè)備:ceph osd rm {osd-num}
測(cè)試上傳下載數(shù)據(jù)對(duì)象
1、創(chuàng)建存儲(chǔ)池并設(shè)置PG數(shù)量為16個(gè)
[root@ceph-mon01 ~]# ceph osd pool create testpool 16 16
pool 'testpool' created
[root@ceph-mon01 ~]# ceph osd pool ls
testpool
[root@ceph-mon01 ~]#
#上傳文件到testpool
[root@ceph-mon01 ~]# rados put test /etc/issue -p testpool
[root@ceph-mon01 ~]# rados ls -p testpool
test
[root@ceph-mon01 ~]#
#獲取存儲(chǔ)池中數(shù)據(jù)對(duì)象的具體位置信息
[root@ceph-mon01 ~]# ceph osd map testpool test
osdmap e44 pool 'testpool' (1) object 'test' -> pg 1.40e8aab5 (1.5) -> up ([4,0,6], p4) acting ([4,0,6], p4)
[root@ceph-mon01 ~]#
#下載文件到本地
[root@ceph-mon01 ~]# ls
[root@ceph-mon01 ~]# rados get test test-down -p testpool
[root@ceph-mon01 ~]# ls
test-down
#刪除數(shù)據(jù)對(duì)象
[root@ceph-mon01 ~]# rados rm test -p testpool
[root@ceph-mon01 ~]# rados ls -p testpool
[root@ceph-mon01 ~]#
#刪除存儲(chǔ)池
[root@ceph-mon01 ~]# ceph osd pool rm testpool
Error EPERM: WARNING: this will *PERMANENTLY DESTROY* all data stored in pool testpool. If you are *ABSOLUTELY CERTAIN* that is what you want, pass the pool name *twice*, followed by --yes-i-really-really-mean-it.
[root@ceph-mon01 ~]# ceph osd pool rm testpool --yes-i-really-really-mean-it.
Error EPERM: WARNING: this will *PERMANENTLY DESTROY* all data stored in pool testpool. If you are *ABSOLUTELY CERTAIN* that is what you want, pass the pool name *twice*, followed by --yes-i-really-really-mean-it.
[root@ceph-mon01 ~]#
提示:刪除存儲(chǔ)池命令存在數(shù)據(jù)丟失的風(fēng)險(xiǎn),Ceph于是默認(rèn)禁止此類操作。管理員需要在ceph.conf配置文件中啟用支持刪除存儲(chǔ)池的操作后,方可使用類似上述命令刪除存儲(chǔ)池;
擴(kuò)展ceph集群
擴(kuò)展mon節(jié)點(diǎn)
Ceph存儲(chǔ)集群需要至少運(yùn)行一個(gè)Ceph Monitor和一個(gè)Ceph Manager,生產(chǎn)環(huán)境中,為了實(shí)現(xiàn)高可用性,Ceph存儲(chǔ)集群通常運(yùn)行多個(gè)監(jiān)視器,以免單監(jiān)視器整個(gè)存儲(chǔ)集群崩潰。Ceph使用Paxos算法,該算法需要半數(shù)以上的監(jiān)視器大于n/2,其中n為總監(jiān)視器數(shù)量)才能形成法定人數(shù)。盡管此非必需,但奇數(shù)個(gè)監(jiān)視器往往更好。“ceph-deploy mon add {ceph-nodes}”命令可以一次添加一個(gè)監(jiān)視器節(jié)點(diǎn)到集群中。
[cephadm@ceph-admin ceph-cluster]$ ceph-deploy mon add ceph-mon02
[cephadm@ceph-admin ceph-cluster]$ ceph-deploy mon add ceph-mon03
擴(kuò)展mgr節(jié)點(diǎn)
Ceph Manager守護(hù)進(jìn)程以“Active/Standby”模式運(yùn)行,部署其它c(diǎn)eph-mgr守護(hù)程序可確保在Active節(jié)點(diǎn)或其上的ceph-mgr守護(hù)進(jìn)程故障時(shí),其中的一個(gè)Standby實(shí)例可以在不中斷服務(wù)的情況下接管其任務(wù)。“ceph-deploy mgr create {new-manager-nodes}”命令可以一次添加多個(gè)Manager節(jié)點(diǎn)。
把ceph-mon01節(jié)點(diǎn)添加為mgr節(jié)點(diǎn)
[cephadm@ceph-admin ceph-cluster]$ ceph-deploy mgr create ceph-mon01

浙公網(wǎng)安備 33010602011771號(hào)