部署的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-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
完成此过程后,本地目录应包括以下密钥环:
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,以提高可靠性和可用性。
要使用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信息
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服务的同一级。
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:
要使用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)的使用。