在CentOS 7上安裝分布式存儲(chǔ)系統(tǒng)Ceph
關(guān)于 Ceph 的介紹網(wǎng)上一大堆,這里就不重復(fù)了。Sage Weil 讀博士的時(shí)候開發(fā)了這套牛逼的分布式存儲(chǔ)系統(tǒng),最初是奔著高性能分布式文件系統(tǒng)去的,結(jié)果云計(jì)算風(fēng)口一來,Ceph 重心轉(zhuǎn)向了分布式塊存儲(chǔ)(Block Storage)和分布式對(duì)象存儲(chǔ)(Object Storage),現(xiàn)在分布式文件系統(tǒng) CephFS 還停在 beta 階段。Ceph 現(xiàn)在是云計(jì)算、虛擬機(jī)部署的最火開源存儲(chǔ)解決方案,據(jù)說有20%的 OpenStack 部署存儲(chǔ)用的都是 Ceph 的 block storage.
Ceph 提供3種存儲(chǔ)方式:對(duì)象存儲(chǔ),塊存儲(chǔ)和文件系統(tǒng),下圖很好的展示了 Ceph 存儲(chǔ)集群的架構(gòu):
ceph-cluster
我們主要關(guān)心的是塊存儲(chǔ),將在下半年慢慢把虛擬機(jī)后端存儲(chǔ)從 SAN 過渡到 Ceph. 雖然還是 0.94 版本,Ceph 現(xiàn)在已經(jīng)比較成熟了,有個(gè)同事已經(jīng)在生產(chǎn)環(huán)境里運(yùn)行 Ceph 了兩年多,他曾遇到很多問題,但最終還是解決了,可見 Ceph 還是非常穩(wěn)定和可靠的。
硬件環(huán)境準(zhǔn)備
準(zhǔn)備了6臺(tái)機(jī)器,其中3臺(tái)物理服務(wù)器做監(jiān)控節(jié)點(diǎn)(mon: ceph-mon1, ceph-mon2, ceph-mon3),2臺(tái)物理服務(wù)器做存儲(chǔ)節(jié)點(diǎn)(osd: ceph-osd1, ceph-osd2),1臺(tái)虛擬機(jī)做管理節(jié)點(diǎn)(adm: ceph-adm)。
Ceph 要求必須是奇數(shù)個(gè)監(jiān)控節(jié)點(diǎn),而且最少3個(gè)(自己玩玩的話,1個(gè)也是可以的),ceph-adm 是可選的,可以把 ceph-adm 放在 monitor 上,只不過把 ceph-adm 單獨(dú)拿出來架構(gòu)上看更清晰一些。當(dāng)然也可以把 mon 放在 osd 上,生產(chǎn)環(huán)境下是不推薦這樣做的。
ADM 服務(wù)器硬件配置比較隨意,用1臺(tái)低配置的虛擬機(jī)就可以了,只是用來操作和管理 Ceph;
MON 服務(wù)器2塊硬盤做成 RAID1,用來安裝操作系統(tǒng);
OSD 服務(wù)器上用10塊 4TB 硬盤做 Ceph 存儲(chǔ),每個(gè) osd 對(duì)應(yīng)1塊硬盤,每個(gè) osd 需要1個(gè) Journal,所以10塊硬盤需要10個(gè) Journal,我們用2塊大容量 SSD 硬盤做 journal,每個(gè) SSD 等分成5個(gè)區(qū),這樣每個(gè)區(qū)分別對(duì)應(yīng)一個(gè) osd 硬盤的 journal,剩下的2塊小容量 SSD 裝操作系統(tǒng),采用 RAID1.
配置列表如下:
軟件環(huán)境準(zhǔn)備
所有 Ceph 集群節(jié)點(diǎn)采用 CentOS 7.1 版本(CentOS-7-x86_64-Minimal-1503-01.iso),所有文件系統(tǒng)采用 Ceph 官方推薦的 xfs,所有節(jié)點(diǎn)的操作系統(tǒng)都裝在 RAID1 上,其他的硬盤單獨(dú)用,不做任何 RAID.
安裝完 CentOS 后我們需要在每個(gè)節(jié)點(diǎn)上(包括 ceph-adm 哦)做一點(diǎn)基本配置,比如關(guān)閉 SELINUX、打開防火墻端口、同步時(shí)間等:
在每臺(tái) osd 服務(wù)器上我們需要對(duì)10塊 SAS 硬盤分區(qū)、創(chuàng)建 xfs 文件系統(tǒng);對(duì)2塊用做 journal 的 SSD 硬盤分5個(gè)區(qū),每個(gè)區(qū)對(duì)應(yīng)一塊硬盤,不需要?jiǎng)?chuàng)建文件系統(tǒng),留給 Ceph 自己處理。
上面的命令行要對(duì)10個(gè)硬盤處理,重復(fù)的操作太多,以后還會(huì)陸續(xù)增加服務(wù)器,寫成腳本 parted.sh 方便操作,其中 /dev/sda|b|d|e|g|h|i|j|k|l 分別是10塊硬盤,/dev/sdc 和 /dev/sdf 是用做 journal 的 SSD:
在 ceph-adm 上運(yùn)行 ssh-keygen 生成 ssh key 文件,注意 passphrase 是空,把 ssh key 拷貝到每一個(gè) Ceph 節(jié)點(diǎn)上:
在 ceph-adm 上登陸到每臺(tái)節(jié)點(diǎn)上確認(rèn)是否都能無密碼 ssh 了,確保那個(gè)煩人的連接確認(rèn)不會(huì)再出現(xiàn):
Ceph 部署
比起在每個(gè) Ceph 節(jié)點(diǎn)上手動(dòng)安裝 Ceph,用 ceph-deploy 工具統(tǒng)一安裝要方便得多:
創(chuàng)建一個(gè) ceph 工作目錄,以后的操作都在這個(gè)目錄下面進(jìn)行:
初始化集群,告訴 ceph-deploy 哪些節(jié)點(diǎn)是監(jiān)控節(jié)點(diǎn),命令成功執(zhí)行后會(huì)在 ceph-cluster 目錄下生成 ceph.conf, ceph.log, ceph.mon.keyring 等相關(guān)文件:
在每個(gè) Ceph 節(jié)點(diǎn)上都安裝 Ceph:
初始化監(jiān)控節(jié)點(diǎn):
查看一下 Ceph 存儲(chǔ)節(jié)點(diǎn)的硬盤情況:
初始化 Ceph 硬盤,然后創(chuàng)建 osd 存儲(chǔ)節(jié)點(diǎn),存儲(chǔ)節(jié)點(diǎn):單個(gè)硬盤:對(duì)應(yīng)的 journal 分區(qū),一一對(duì)應(yīng):
***,我們把生成的配置文件從 ceph-adm 同步部署到其他幾個(gè)節(jié)點(diǎn),使得每個(gè)節(jié)點(diǎn)的 ceph 配置一致:
測(cè)試
看一下配置成功了沒?
增加 PG 數(shù)目,根據(jù) Total PGs = (#OSDs * 100) / pool size 公式來決定 pg_num(pgp_num 應(yīng)該設(shè)成和 pg_num 一樣),所以 20*100/2=1000,Ceph 官方推薦取最接近2的指數(shù)倍,所以選擇 1024。如果順利的話,就應(yīng)該可以看到 HEALTH_OK 了:
更詳細(xì)一點(diǎn):
如果操作沒有問題的話記得把上面操作寫到 ceph.conf 文件里,并同步部署的各節(jié)點(diǎn):
如果一切可以從來
部署過程中如果出現(xiàn)任何奇怪的問題無法解決,可以簡(jiǎn)單的刪除一切從頭再來:
Troubleshooting
如果出現(xiàn)任何網(wǎng)絡(luò)問題,首先確認(rèn)節(jié)點(diǎn)可以互相無密碼 ssh,各個(gè)節(jié)點(diǎn)的防火墻已關(guān)閉或加入規(guī)則:
初次安裝 Ceph 會(huì)遇到各種各樣的問題,總體來說排錯(cuò)還算順利,隨著經(jīng)驗(yàn)的積累,今年下半年將會(huì)逐步把 Ceph 加入到生產(chǎn)環(huán)境。