前期準備
部署的Ceph集羣是基於mimic版。要安裝Ceph和其它支持軟件,需要從Ceph倉庫中獲取軟件包。
在本系列中使用的Ceph倉庫是在第一篇文章中製作的遠程倉庫。
Note:以下操作需在全部的節點執行;
-
添加密鑰
將密鑰添加至系統的可信密鑰列表中以避免出現安全警告。 對於主要版本(例如,hammer, jewel, luminous,mimic等),請使用release.asc密鑰。
要安裝release.asc密鑰,請執行以下命令:
[root@node1~]# sudo rpm --import 'http://11.11.11.10/ceph/keys/release.asc'
-
修改ceph.repo
修改每個節點的ceph.repo文件。 在下面的示例中,需將{ceph-release}替換爲Ceph的主要發行版(例如,luminous,mimic等)和將{distro}替換爲相應的Linux發行版(例如,el7等)。 可以通過查看http://11.11.11.10/ceph/rpm-{ceph-release}/目錄以查看Ceph支持的發行版。 某些Ceph包(例如EPEL)必須優先於標準包,因此必須確保設置priority = 2。
在此處{ceph-release}爲mimic,{distro}爲el7。
[ceph] name=Ceph packages for $basearch baseurl=http://11.11.11.10/ceph/rpm-mimic/el7/$basearch enabled=1 priority=2 gpgcheck=0 gpgkey=http://11.11.11.10/ceph//keys/release.asc [ceph-noarch] name=Ceph noarch packages baseurl=http://11.11.11.10/ceph/rpm-mimic/el7/noarch enabled=1 priority=2 gpgcheck=0 type=rpm-md gpgkey=http://11.11.11.10/ceph/keys/release.asc
-
增加extras.repo
在每個節點新建/etc/yum.repo.d/ceph.repo文件,並增加以下內容。
[extras] name=Extra packages baseurl=http:/11.11.11.10/extras enabled=1 priority=2 gpgcheck=0
部署Ceph集羣
在管理節點上創建一個目錄,用於保存ceph-deploy爲集羣生成的配置文件和密鑰。
[root@node1~]# mkdir my-cluster && cd my-cluster
[root@node1 my-cluster]#
ceph-deploy會將文件輸出到當前目錄。 執行ceph-deploy時,請確保位於此目錄中。
創建集羣
如果遇到麻煩且想要重新開始,請執行以下操作以清除Ceph軟件包,並清除其所有數據和配置:
[root@node1 my-cluster]# ceph-deploy purge {ceph-node} [{ceph-node}]
[root@node1 my-cluster]# ceph-deploy purgedata {ceph-node} [{ceph-node}]
[root@node1 my-cluster]# ceph-deploy forgetkeys
[root@node1 my-cluster]# rm ceph.*
如果執行purge,則必須重新安裝Ceph。 最後一個rm命令刪除在安裝期間由本地ceph-deploy創建的所有文件。
在管理節點上,進入剛創建的放置配置文件的目錄,使用 ceph-deploy 執行以下命令。
①創建集羣。
[root@node1 my-cluster]# ceph-deploy new {initial-monitor-node(s)}
將initial-monitor-node指定爲hostname。 例如:
[root@node1 my-cluster]# ceph-deploy new node1
在當前目錄中使用ls和cat檢查ceph-deploy的輸出。 應該看到Ceph配置文件(ceph.conf),監視器密鑰環(ceph.mon.keyring)以及集羣的日誌文件。 有關其它詳細信息,請參閱ceph-deploy new -h。
若報錯:
Traceback (most recent call last):
File "/usr/bin/ceph-deploy", line 18, in <module>
from ceph_deploy.cli import main
File "/usr/lib/python2.7/site-packages/ceph_deploy/cli.py", line 1, in <module>
import pkg_resources
ImportError: No module named pkg_resources
解決辦法:
第1步:解決python 版本問題 。注意檢查操作系統的python版本,ceph-deploy通過執行python腳本來實現安裝,
更改/usr/bin/ceph-deploy文件中 更改python2.6的部分爲2.7(此處應當與系統python版本相同) 更改第一行文件爲#!/usr/bin/python2.7
第2步:安裝 python2-pip。yum -y install python2-pip
②如果有多個網口,需在Ceph配置文件的[global]部分下添加public network設置。
public network = {ip-address}/{bits}
例如:
public network = 11.11.11.0/24
以使用11.11.11.0/24(或11.11.11.0/255.255.255.0)網絡中的IP。
同時也可以在[global]部分指定cluster network設置。
cluster network = {ip-address}/{bits}
例如:
cluster network = 11.11.12.0/24
以使用11.11.12.0/24(或11.11.12.0/255.255.255.0)網絡中的IP。
③如果要在IPv6環境中部署,請將以下內容添加到本地目錄中的ceph.conf:
[root@node1 my-cluster]# echo ms bind ipv6 = true >> ceph.conf
④安裝依賴包:
# yum install -y python-jinja2 python-werkzeug python-prettytable python-routes python-bcrypt python-cherrypy python-pecan
# yum install -y selinux-policy-devel selinux-policy-doc selinux-policy-minimum selinux-policy-mls selinux-policy-sandbox
# yum install -y lttng-modules-debuginfo lttng-tools lttng-tools-debuginfo lttng-tools-devel lttng-ust lttng-ust-debuginfo lttng-ust-devel lttng-ust-java lttng-ust-java-agent
# yum install -y leveldb libbabeltrace liboath
⑤安裝Ceph包:
[root@node1 my-cluster]# ceph-deploy install {ceph-node} [...] --repo-url=http://11.11.11.10/ceph/rpm-mimic/el7/ --gpg-url=http://11.11.11.10/ceph/keys/release.asc
例如:
[root@node1 my-cluster]# ceph-deploy install node1 node2 node3 node4 --repo-url=http://11.11.11.10/ceph/rpm-mimic/el7/ --gpg-url=http://11.11.11.10/ceph/keys/release.asc
如果設置了環境變量,即可讓安裝過程與常規一樣,具體過程如下:
CentOS:
[root@node1 my-cluster]# export CEPH_DEPLOY_REPO_URL=http://11.11.11.10/ceph/rpm-nautilus/el7
[root@node1 my-cluster]# export CEPH_DEPLOY_GPG_URL=http://11.11.11.10/ceph/keys/release.asc
ceph-deploy將在每個節點上安裝Ceph。
⑥部署初始監視器並收集密鑰:
[root@node1 my-cluster]# ceph-deploy mon create-initial
完成此過程後,本地目錄應包括以下密鑰環:
- ceph.client.admin.keyring
- ceph.bootstrap-mgr.keyring
- ceph.bootstrap-osd.keyring
- ceph.bootstrap-mds.keyring
- ceph.bootstrap-rgw.keyring
- ceph.bootstrap-rbd.keyring
- ceph.bootstrap-rbd-mirror.keyring
Note:如果此步失敗並輸出類似於如下信息 “Unable to find /etc/ceph/ceph.client.admin.keyring”,請確認 ceph.conf 中爲 monitor 指定的 IP 是 Public IP,而不是 Private IP。
⑦在管理節點使用ceph-deploy將配置文件和管理密鑰複製到個Ceph節點,這樣無需在每次執行命令時指定監視器地址和ceph.client.admin.keyring就可以使用ceph CLI。
[root@node1 my-cluster]# ceph-deploy admin {ceph-node(s)}
例如:
[root@node1 my-cluster]#ceph-deploy admin node1 node2 node3
⑧部署MGR。 (僅適用於Luminous及更高版本):
[root@node1 my-cluster]# ceph-deploy mgr create node1 # Required only for luminous+ builds, i.e >= 12.x builds
⑨添加OSD。出於說明目的,假設每個節點中都有兩個個未使用的磁盤,名爲/dev/sdb和/dev/sdc。確保設備當前未在使用,且不包含任何重要數據。
[root@node1 my-cluster]# ceph-deploy osd create --data {device} {ceph-node}
例如:
[root@node1 my-cluster]# ceph-deploy osd create --data /dev/sdb node1
[root@node1 my-cluster]# ceph-deploy osd create --data /dev/sdc node1
[root@node1 my-cluster]# ceph-deploy osd create --data /dev/sdb node2
[root@node1 my-cluster]# ceph-deploy osd create --data /dev/sdc node2
[root@node1 my-cluster]# ceph-deploy osd create --data /dev/sdb node3
[root@node1 my-cluster]# ceph-deploy osd create --data /dev/sdc node3
[root@node1 my-cluster]# ceph-deploy osd create --data /dev/sdb node4
[root@node1 my-cluster]# ceph-deploy osd create --data /dev/sdc node4
⑩檢查集羣的健康狀況。
# ssh node1 sudo ceph health
集羣應報告HEALTH_OK。 可以使用以下命令查看更完整的集羣狀態:
# ssh node1 sudo ceph -s
擴展集羣
啓動並運行基本集羣后,下一步是擴展集羣。 首將Ceph mds添加到node1、node2和node3。 然後將Ceph mon和Ceph mgr添加到node2和node3,以提高可靠性和可用性。
添加MDS
要使用CephFS,至少需要一個元數據服務器。 執行以下操作以創建元數據服務器:
[root@node1 my-cluster]# ceph-deploy mds create {ceph-node}
例如:
[root@node1 my-cluster]# ceph-deploy mds create node1 node2 node3
注意:只有在新建文件池和文件系統後,ceph -s纔會顯示mds信息
添加Monitor
Ceph存儲集羣需要至少運行一個Ceph Monitor和Ceph Manager。 爲了實現高可用性,Ceph存儲集羣通常運行多個Ceph mon,單個Ceph mon的故障不會導致Ceph存儲集羣崩潰。 Ceph使用Paxos算法,該算法需要大多數監視器(即大於N / 2,其中N是監視器的數量)才能形成法定人數。 雖然這不是必需的,但奇數個監視器往往更好。
添加兩個Ceph mon到集羣:
[root@node1 my-cluster]# ceph-deploy mon add {ceph-node}
例如:
[root@node1 my-cluster]# ceph-deploy mon add node2
[root@node1 my-cluster]# ceph-deploy mon add node3
一旦添加了新的Ceph Monitor,Ceph將開始同步Monitor並形成一個法定人數。 可以通過執行以下操作來檢查仲裁狀態:
#ceph quorum_status --format json-pretty
Tip:當 Ceph 集羣運行多個Monitor時,各個Monitor主機都應該配置NTP,而且要確保這些 Monitor位於NTP服務的同一級。
添加Manager
Ceph Manager守護進程以active/standby模式運行。 部署額外的mgr守護進程可確保在一個守護進程或主機發生故障時,另一個守護進程或主機可以在不中斷服務的情況下接管。
要部署額外的mgr守護進程:
[root@node1 my-cluster]# ceph-deploy mgr create node2 node3
應該在以下輸出中看到備用Manager:
#ssh node1 sudo ceph -s
cluster:
id: 6ba14dc2-0261-4925-9a50-f90c94d544d2
health: HEALTH_OK
services:
mon: 3 daemons, quorum node1,node2,node3
mgr: node1(active), standbys: node2, node3
osd: 8 osds: 8 up, 8 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 8.0 GiB used, 15 TiB / 15 TiB avail
pgs:
添加RGW實例
要使用Ceph的[Ceph對象網關組件,必須部署RGW實例。 執行以下命令以創建RGW的新實例:
[root@node1 my-cluster]# ceph-deploy rgw create {gateway-node}
例如:
[root@node1 my-cluster]# ceph-deploy rgw create node4
默認情況下,RGW實例將偵聽端口7480.可以通過在運行RGW的節點上編輯ceph.conf來更改此設置,如下所示:
[.rgw.client-node]
rgw frontends = civetweb port=80
要使新端口設置生效,請重啓Ceph對象網關。 在CentOS7上,運行以下命令:
# sudo systemctl restart [email protected]
Tip:所有和ceph有關的服務,重啓的最小間隔爲30分鐘;如果兩次重啓同一服務的間隔小於30分鐘,則第二次重啓會失敗。
爲固定和優化某些配置,暫時將本地目錄的配置文件ceph.conf,修改爲:
[root@node1 my-cluster]# vim ceph.conf
[global]
fsid = 6ba14dc2-0261-4925-9a50-f90c94d544d2
mon_initial_members = node1
mon_host = node1,node2,node3
mon_addr = 11.11.11.20,11.11.11.21,11.11.11.22
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public network = 11.11.11.0/24
cluster network = 11.11.12.0/24
osd crush update on start = false
[mon]
mon_allow_pool_delete = true
[mon.node1]
host = node1
mon_addr = 11.11.11.20
[mon.node2]
host = node2
mon_addr = 11.11.11.21
[mon.node3]
host = node3
mon_addr = 11.11.11.22
[osd]
osd heartbeat grace = 20
osd heartbeat interval = 5
[client.rgw.node4]
rgw_frontends = "civetweb port=80"
然後使用ceph-deploy將配置文件複製到個Ceph節點。
[root@node1 my-cluster]# ceph-deploy --overwrite-conf admin node1 node2 node3
以後可以根據實際情況隨時優化配置文件。
下節將Ceph 塊設備(即RBD)的使用。