前言
這篇文章解決了什么問題:
使用 ceph-deploy 工具部署 ceph 存儲(chǔ)集群。
整體介紹:
使用虛擬機(jī)構(gòu)建三節(jié)點(diǎn) ceph 存儲(chǔ)集群。
環(huán)境
全篇使用 root 權(quán)限。
虛擬化軟件:vmware
虛擬機(jī)操作系統(tǒng):centos 7.6
每臺(tái)虛擬機(jī)配置:2G內(nèi)存,1塊系統(tǒng)盤(50G),2塊ceph將使用的硬盤(每塊20G)
虛擬機(jī)網(wǎng)絡(luò):一條虛擬機(jī)間互通,并且可以上網(wǎng)的網(wǎng)絡(luò)即可(NAT)。
總共三臺(tái)虛擬機(jī):ceph01、ceph02、ceph03
ceph 版本:nautilus
ceph-deploy 版本:2.0.1
當(dāng)前時(shí)間: 2019.10
正文
部署過程整體描述:
首先選出一臺(tái)機(jī)器作為部署節(jié)點(diǎn),部署節(jié)點(diǎn)負(fù)責(zé)為機(jī)器部署 ceph 軟件。這里直接選擇 ceph01 作為部署節(jié)點(diǎn)。
基礎(chǔ)環(huán)境配置
1. 配置網(wǎng)絡(luò)
我這里 ceph01、ceph02、ceph03 對(duì)應(yīng)的地址分別為:
10.10.10.31、10.10.10.32、10.10.10.33
2. 關(guān)閉防火墻
所有機(jī)器均關(guān)閉掉防火墻。
systemctl disable iptables
systemctl stop iptables
systemctl disable firewalld
systemctl stop firewalld
3. 配置加速源
所有機(jī)器均配置 yum 國內(nèi)加速源:
yum install -y wget
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
所有機(jī)器均配置 pip 國內(nèi)加速源:
mkdir ~/.pip
cat > ~/.pip/pip.conf << EOF
[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple/
EOF
4. 配置主機(jī)名解析
這里配置的是部署節(jié)點(diǎn)到其它機(jī)器間的主機(jī)解析。
在所有節(jié)點(diǎn)上執(zhí)行:
vim /etc/hosts 添加如下內(nèi)容:
10.10.10.31 ceph01
10.10.10.32 ceph02
10.10.10.33 ceph03
5. 配置機(jī)器間的免密登錄
這里配置的是部署節(jié)點(diǎn)到其它機(jī)器間的免密登錄。
在 ceph01 (部署節(jié)點(diǎn))節(jié)點(diǎn)上執(zhí)行:
- 生成公私鑰:
ssh-keygen
- 拷貝公鑰到其它機(jī)器上:
注意:以下每行命令執(zhí)行后都需要輸入密碼,不能直接全部復(fù)制粘貼。
ssh-copy-id -i /root/.ssh/id_rsa.pub root@ceph01
ssh-copy-id -i /root/.ssh/id_rsa.pub root@ceph02
ssh-copy-id -i /root/.ssh/id_rsa.pub root@ceph03
- 測(cè)試免密登錄
命令參考如下,盡量每個(gè)節(jié)點(diǎn)都測(cè)試一下
ssh root@ceph03
6. 安裝 ntp 服務(wù)
所有機(jī)器執(zhí)行如下命令:
yum install -y ntp ntpdate ntp-doc
7. 配置主機(jī)名
注意!當(dāng)前步驟十分重要。
在 ceph 中讀取了 hostname 命令產(chǎn)生的結(jié)果。
因此在每個(gè)節(jié)點(diǎn)上均需修改自己的 hostname。命令參考:
進(jìn)入到 ceph01 節(jié)點(diǎn)上:
hostname ceph01
echo "ceph01" > /etc/hostname
按照此方法修改其它節(jié)點(diǎn)的 hostname。
開始部署 ceph
主要分兩步:
第一步,安裝 ceph-deploy
第二步,使用 ceph-deploy 安裝 ceph 組件。
第一步:在 node01(部署節(jié)點(diǎn))上安裝 ceph-deploy
該步驟所有命令均在部署節(jié)點(diǎn)上執(zhí)行。
安裝 ceph-deploy:
yum install -y python-pip
pip install -U pip
pip install ceph-deploy==2.0.1
第二步:在 node01(部署節(jié)點(diǎn))上使用 ceph-deploy 部署 ceph 組件
該步驟所有命令均在部署節(jié)點(diǎn)上執(zhí)行。
1. 更換 ceph-deploy 將使用的 ceph 源(決定安裝什么版本的 ceph):
export CEPH_DEPLOY_REPO_URL=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7
export CEPH_DEPLOY_GPG_URL=http://mirrors.aliyun.com/ceph/keys/release.asc
2. 創(chuàng)建部署臨時(shí)目錄:
mkdir /opt/ceph-deploy
cd /opt/ceph-deploy
3. 部署一個(gè)新集群,生成初始配置(參數(shù) ceph01 是指該集群的第一個(gè)節(jié)點(diǎn)):
ceph-deploy new ceph01
4. 在該目錄下生成了新集群的一些配置文件。接下來需要對(duì)這些配置文件做一些改動(dòng):
vim /opt/ceph-deploy/ceph.conf
在 global 中增加:
public network = 10.10.10.0/24
5. 安裝 ceph:
ceph-deploy install ceph01 ceph02 ceph03
6. 初始化 ceph monitor:
ceph-deploy mon create-initial
當(dāng)前命令執(zhí)行以后,可以在當(dāng)前目錄下發(fā)現(xiàn)許多的 keyring 文件,這是連接其它節(jié)點(diǎn)的憑據(jù)。以后的 ceph-deploy 命令均在當(dāng)前目錄下執(zhí)行才可正常使用。
7. 同步配置文件
將當(dāng)前臨時(shí)文件夾下的配置文件同步到所有節(jié)點(diǎn)的 /etc/ceph/ 下
ceph-deploy admin ceph01 ceph02 ceph03
8. 安裝 ceph mgr
ceph-deploy mgr create ceph01
9. 安裝 ceph mds
ceph-deploy mds create ceph01
10. 為集群增加 osd
我這個(gè)環(huán)境有三臺(tái)虛擬機(jī),每臺(tái)虛擬機(jī)上有額外2塊硬盤用于 ceph 集群,它們是 sdb、sdc。這個(gè)要根據(jù)自己的環(huán)境找到正確的硬盤。
命令參考如下:
ceph-deploy osd create --data /dev/sdb ceph01
ceph-deploy osd create --data /dev/sdc ceph01
ceph-deploy osd create --data /dev/sdb ceph02
ceph-deploy osd create --data /dev/sdc ceph02
ceph-deploy osd create --data /dev/sdb ceph03
ceph-deploy osd create --data /dev/sdc ceph03
其中/dev/sdb ceph01,表示 ceph01 節(jié)點(diǎn)上的 /dev/sdb 硬盤。
命令執(zhí)行完以后,基礎(chǔ)的環(huán)境就算搭建完成了??梢詧?zhí)行如下命令查看集群的狀態(tài):
ceph 健康: ceph health
ceph 集群詳細(xì)狀態(tài):ceph -s
ceph 集群 osd 狀態(tài):ceph osd tree

至此,該集群還處于一個(gè)基礎(chǔ)的狀態(tài),并不能正常使用。
接下來需要配置 ceph pool 相關(guān)信息,以及安裝配置 rgw 從而使用對(duì)象存儲(chǔ)功能。
11. 配置 ceph pool
vim /opt/ceph-deploy/ceph.conf
在 global 中增加如下:
osd pool default size = 3
osd pool default min size = 2
osd pool default pg_num = 128
osd pool default pgp_num = 128
其中 pg num 需要計(jì)算得出,pgp num 與 pg num 保持一致。
粗略的計(jì)算方法:
( osd 數(shù)量 * 100 ) / 池副本數(shù)。
同步配置文件:
ceph-deploy --overwrite-conf admin ceph01 ceph02 ceph03
12. 安裝配置 rgw
vim /opt/ceph-deploy/ceph.conf
增加如下內(nèi)容:
[client]
rgw frontends = civetweb port=17480
整體配置如下:

安裝 rgw:
ceph-deploy --overwrite-conf rgw create ceph01
基礎(chǔ)安裝結(jié)束
至此,我們可以去創(chuàng)建一個(gè) pool,并上傳文件測(cè)試集群了。
這個(gè)時(shí)候執(zhí)行 ceph -s
可以看到集群報(bào)了 warn 信息,如下:

這不是因?yàn)槲覀兡睦锱渲糜袉栴},這是 ceph 的某個(gè)告警配置。當(dāng)某個(gè) osd 的 pg 小于 30 時(shí)會(huì)發(fā)出告警?,F(xiàn)在可以忽略這個(gè)問題。ceph 提供這個(gè)配置,可能是擔(dān)心集群在未來使用中出現(xiàn) pg 分布不均勻的情況。
參考:
https://docs.ceph.com/docs/master/rados/configuration/pool-pg-config-ref/
簡(jiǎn)單使用對(duì)象存儲(chǔ)功能
查看池列表:ceph osd lspools
ceph 默認(rèn)的池已經(jīng)創(chuàng)建一些 pg。為了解決前面的告警,我們需要滿足每個(gè) osd 都有超過30個(gè) pg,因此創(chuàng)建一個(gè)具有80個(gè) pg 的池。
- 創(chuàng)建池:
# 創(chuàng)建池
ceph osd pool create mytest 80
# 初始化池為 rgw 使用的池
ceph osd pool application enable mytest rgw
(此時(shí)用 ceph -s 可以看到集群狀態(tài)又是 HEALTH_OK 了)
- 生成要上傳的文件
echo 1234 > /tmp/testfile.txt
- 上傳文件到池中
命令參考:
rados put {object-name} {file-path} --pool=mytest
rados put test-object-1 /tmp/testfile.txt --pool=mytest
- 查看池
rados ls -p mytest
可以看到文件已經(jīng)上傳上去了,并且叫 test-object-1

- 下載文件
rados get test-object-1 /tmp/test-object-1 -p mytest

可以看到兩個(gè)文件的內(nèi)容是一樣的,到此,基本的部署及使用均正常了。
擴(kuò)展
關(guān)于 hostname
在 ceph 中,hostname 是一個(gè)非常重要的屬性。
hostname 命令只可以臨時(shí)改變當(dāng)前主機(jī)的主機(jī)名,并不會(huì)永久生效。
目前已知兩種方式會(huì)永久影響主機(jī)名。
/etc/hostname 中存儲(chǔ)著默認(rèn)的主機(jī)名。
/etc/hosts 中存儲(chǔ)著對(duì)應(yīng)地址使用的主機(jī)名。
第一種情況,很直觀,不再多做介紹。
第二種情況時(shí):
10.10.10.31 ceph01
這樣的配置,會(huì)讓通過 10.10.10.31 地址訪問進(jìn)來的連接所識(shí)別到的主機(jī)名改為 ceph01。
在本環(huán)境中,不同的 ceph 節(jié)點(diǎn)之間通過 10.10.10.0/24 地址進(jìn)行通信,所以只需要為該地址配置主機(jī)名。
在 ceph 中,如果主機(jī)名混亂,會(huì)發(fā)生什么?
ceph osd tree 這個(gè)命令可以讓你看到主機(jī)名混亂帶來的后果:

如果糟糕的事情已經(jīng)發(fā)生了,我們只需要修改好主機(jī)名,然后重啟機(jī)器,一切都會(huì)恢復(fù)正常:

第一種方式的優(yōu)先級(jí)高于第二種。
因此只需要更改 /etc/hostname 即可。文件內(nèi)容參考如下:

參考
無