官方文档:
https://ceph.readthedocs.io/en/latest/install/ceph-deploy/quick-start-preflight/
ceph版本列表:
https://ceph.readthedocs.io/en/latest/releases/
节点规划:
主机名 | public-ip | cluster-ip | 磁盘 | 角色 |
---|---|---|---|---|
ceph-deploy | 192.168.93.60 | 系统盘: sda | ceph-deploy | |
node01 | 192.168.93.61 | 192.168.94.61 | 系统盘: sda osd盘: sdb、sdc |
monitor,mgr,rgw,mds,osd |
node02 | 192.168.93.62 | 192.168.94.62 | 系统盘: sda osd盘: sdb、sdc |
monitor,mgr,rgw,mds,osd |
node03 | 192.168.93.63 | 192.168.94.63 | 系统盘: sda osd盘: sdb、sdc |
monitor,mgr,rgw,mds,osd |
node04 | 192.168.93.64 | 192.168.94.64 | 系统盘: sda osd盘: sdb、sdc |
osd |
节点角色:
安装版本:
注意:monitor节点也运行osd,因此所有节点2块网卡。
注:如果没有特殊说明,以下所有操作在所有节点上执行。
所有节点配置主机名
hostnamectl set-hostname ceph-deploy
hostnamectl set-hostname node01
hostnamectl set-hostname node02
hostnamectl set-hostname node03
hostnamectl set-hostname node04
配置hosts解析
cat >> /etc/hosts <<EOF
#ceph deploy
192.168.93.60 ceph-deploy
# Ceph Cluster Network
192.168.93.61 node01
192.168.93.62 node02
192.168.93.63 node03
192.168.93.64 node04
# Ceph Public Network
192.168.94.61 node01
192.168.94.62 node02
192.168.94.63 node03
192.168.94.64 node04
EOF
基础配置
#关闭防火墙和selinux
systemctl disable --now firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
#配置时间同步
yum install -y chrony
systemctl enable --now chronyd
配置yum源
#centos基础源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
#epel源
yum install -y epel-release
#阿里云ceph源,该源指定了ceph安装版本
cat >/etc/yum.repos.d/ceph.repo <<EOF
[Ceph]
name=Ceph packages for \$basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/\$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOF
添加节点SSH互信
ssh-keygen -t rsa
ssh-copy-id root@node01
ssh-copy-id root@node02
ssh-copy-id root@node03
ssh-copy-id root@node04
在ceph-deploy节点执行。默认EPEL源提供的ceph-deploy版本是1.5,务必确保安装版本为2.0.1或之上版本。
yum update -y
yum install -y python-setuptools
yum install -y ceph-deploy
#校验版本
# ceph-deploy --version
2.0.1
初次运行先使用一个Ceph Monitor和三个Ceph OSD守护进程创建一个Ceph存储集群。集群达到 active + clean状态后,通过添加第四个Ceph OSD守护程序和另外两个Ceph Monitors对其进行扩展。
在管理点上创建一个目录,以维护为集群生成的配置文件和密钥。
mkdir my-cluster
cd my-cluster
ceph-deploy部署程序会将文件输出到当前目录。执行ceph-deploy部署时请确保位于ceph-deploy目录中。
如果想要重新部署,请执行以下操作清除Ceph软件包,并清除其所有数据和配置:
ceph-deploy purge {ceph-node} [{ceph-node}]
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
rm ceph.*
如果执行purge,则必须重新安装Ceph。最后一个rm命令删除在先前安装过程中由ceph-deploy在本地写出的所有文件。
使用ceph-deploy创建集群
执行下面的命令创建一个Ceph Cluster集群,指定initial-monitor-node为node01:
ceph-deploy new --public-network 192.168.93.0/24 --cluster-network 192.168.94.0/24 node01
这里直接指定cluster-network(集群内部通讯)和public-network(外部访问Ceph集群),也可以在执行命令后修改配置文件方式指定。
检查当前目录中的输出。应该看到一个Ceph配置文件(ceph.conf),一个monitor secret keyring (ceph.mon.keyring)和新集群的日志文件。有关更多详细信息,请参见ceph-deploy new -h。
[root@ceph-deploy my-cluster]# ll
total 12
-rw-r--r-- 1 root root 264 Jun 19 10:54 ceph.conf
-rw-r--r-- 1 root root 3204 Jun 19 10:54 ceph-deploy-ceph.log
-rw------- 1 root root 73 Jun 19 10:54 ceph.mon.keyring
查看ceph配置文件
[root@ceph-deploy my-cluster]# cat ceph.conf
[global]
fsid = 8a23025d-3299-4320-abb9-3de4da949a62
public_network = 192.168.93.0/24
cluster_network = 192.168.94.0/24
mon_initial_members = node01
mon_host = 192.168.93.61
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
安装Ceph包到指定节点,参数–no-adjust-repos是直接使用本地源,不生成官方源。
ceph-deploy install --no-adjust-repos node01 node02 node03 node04
创建监视器,初始化monitor,并收集所有密钥,官方介绍:为了获得高可用性,您应该运行带有至少三个监视器的生产Ceph集群。
ceph-deploy mon create-initial
初始化完毕后会自动生成以下几个文件,这些文件用于后续和Ceph认证交互使用:
[root@ceph-deploy my-cluster]# ll *.keyring
-rw------- 1 root root 113 Jun 19 11:13 ceph.bootstrap-mds.keyring
-rw------- 1 root root 113 Jun 19 11:13 ceph.bootstrap-mgr.keyring
-rw------- 1 root root 113 Jun 19 11:13 ceph.bootstrap-osd.keyring
-rw------- 1 root root 113 Jun 19 11:13 ceph.bootstrap-rgw.keyring
-rw------- 1 root root 151 Jun 19 11:13 ceph.client.admin.keyring
-rw------- 1 root root 73 Jun 19 10:54 ceph.mon.keyring
使用ceph-deploy命令将配置文件和 admin key复制到管理节点和Ceph节点,以便每次执行ceph CLI命令无需指定monitor地址和 ceph.client.admin.keyring。
ceph-deploy admin node01 node02 node03 node04
查看复制的包
[root@ceph-deploy my-cluster]# ssh node01 ls /etc/ceph
ceph.client.admin.keyring
ceph.conf
rbdmap
ceph-deploy mgr create node01
添加3个osd,假设每个节点中都有一个未使用的磁盘/dev/vdb。 确保该设备当前未使用并且不包含任何重要数据。
ceph-deploy osd create --data /dev/sdb node01
ceph-deploy osd create --data /dev/sdb node02
ceph-deploy osd create --data /dev/sdb node03
可以看到ceph将磁盘创建为lvm格式然后加入ceph集群
[root@node01 ceph]# pvs |grep ceph
/dev/sdb ceph-bf950639-fe82-48bd-b1a4-f052d4e36d33 lvm2 a-- <20.00g 0
[root@node01 ceph]# vgs |grep ceph
ceph-bf950639-fe82-48bd-b1a4-f052d4e36d33 1 1 0 wz--n- <20.00g 0
[root@node01 ceph]# lvs | grep ceph
osd-block-b770fa12-8898-49aa-804b-7f4b9da38622 ceph-bf950639-fe82-48bd-b1a4-f052d4e36d33 -wi-ao---- <20.00g
如果直接使用lvm创建OSD,其中–data参数必须为volume_group/lv_name格式,而不是块设备的路径。
检查集群健康状态
[root@node01 ~]# ceph health
HEALTH_OK
[root@node01 ~]# ceph health detail
集群正常应该显示HEALTH_OK,查看集群状态详细信息:
[root@node01 ~]# ceph -s
cluster:
id: 8a23025d-3299-4320-abb9-3de4da949a62
health: HEALTH_OK
services:
mon: 1 daemons, quorum node01 (age 20m)
mgr: node01(active, since 6m)
osd: 3 osds: 3 up (since 4m), 3 in (since 4m)
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 57 GiB / 60 GiB avail
pgs:
基本集群启动并运行后,下一步就是扩展集群。然后将Ceph Monitor和Ceph Manager添加到node2,node3以提高可靠性和可用性。
添加Monitors
一个Ceph存储集群至少需要一个Ceph Monitor和Ceph Manager才能运行。为了获得高可用性,Ceph存储群集通常运行多个Ceph Monitor,这样单个Ceph Monitor的故障不会使Ceph存储群集停机。Ceph使用Paxos算法,该算法需要大多数Monitor(即,大于N / 2,其中N是Monitor的数量)才能形成仲裁。Monitor的奇数往往会更好,尽管这不是必需的。
将两个Ceph Monitor添加到集群中:
ceph-deploy mon add node02
ceph-deploy mon add node03
一旦添加了新的Ceph Monitor,Ceph将开始同步Monitor并形成仲裁。可以通过执行以下命令检查仲裁状态:
ceph quorum_status --format json-pretty
说明:当使用多台Monitor运行Ceph时,应在每台Monitor主机上安装和配置NTP。确保Monitor之间时间同步。
添加Managers
Ceph Manager守护程序以 active/standby模式运行。部署其他manager daemons可确保如果一个守护程序或主机发生故障,另一守护程序或主机可以接管而不会中断服务。
执行以下命令添加要部署其他Manager守护程序:
ceph-deploy mgr create node02 node03
在以下输出中可以看到standby Manager:
[root@node01 ~]# ceph -s
cluster:
id: 8a23025d-3299-4320-abb9-3de4da949a62
health: HEALTH_WARN
1 daemons have recently crashed
services:
mon: 3 daemons, quorum node01,node02,node03 (age 6m)
mgr: node01(active, since 6m), standbys: node02, node03
osd: 3 osds: 3 up (since 19m), 3 in (since 19m)
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 57 GiB / 60 GiB avail
pgs:
要使用 Ceph Object Gateway对象网关组件,必须部署RGW的实例。执行以下操作以创建RGW的新实例:
ceph-deploy rgw create node01 node02 node03
默认情况下,RGW实例将侦听7480端口。可以通过在运行RGW的节点上编辑ceph.conf来更改此端口,如下所示:
[client]
rgw frontends = civetweb port=80
验证rgb,浏览器访问http://192.168.93.61:7480/,输出以下内容
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>anonymous</ID>
<DisplayName/>
</Owner>
<Buckets/>
</ListAllMyBucketsResult>
在ceph节点执行。
ceph-deploy mds create noe01 node02 node03
查看
[root@node01 ~]# ceph -s
cluster:
id: 8a23025d-3299-4320-abb9-3de4da949a62
health: HEALTH_OK
services:
mon: 3 daemons, quorum node01,node02,node03 (age 26m)
mgr: node01(active, since 47m), standbys: node02, node03
mds: 3 up:standby
osd: 8 osds: 8 up (since 80m), 8 in (since 80m)
rgw: 3 daemons active (node01, node02, node03)
data:
pools: 4 pools, 128 pgs
objects: 190 objects, 1.9 KiB
usage: 8.1 GiB used, 192 GiB / 200 GiB avail
pgs: 128 active+clean
io:
client: 12 KiB/s rd, 0 B/s wr, 11 op/s rd, 7 op/s wr
mds状态
[root@node01 ~]# ceph mds stat
3 up:standby
继续添加节点上剩余的osd磁盘
ceph-deploy osd create --data /dev/sdc node01
ceph-deploy osd create --data /dev/sdc node02
ceph-deploy osd create --data /dev/sdc node03
ceph-deploy osd create --data /dev/sdb node04
ceph-deploy osd create --data /dev/sdc node04
通过ceph osd tree查看osd的列表情况,可以清晰看到osd在对应node节点,以及当前状态:
[root@node01 ~]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.19513 root default
-3 0.04878 host node01
0 hdd 0.01949 osd.0 up 1.00000 1.00000
3 hdd 0.02930 osd.3 up 1.00000 1.00000
-5 0.04878 host node02
1 hdd 0.01949 osd.1 up 1.00000 1.00000
4 hdd 0.02930 osd.4 up 1.00000 1.00000
-7 0.04878 host node03
2 hdd 0.01949 osd.2 up 1.00000 1.00000
5 hdd 0.02930 osd.5 up 1.00000 1.00000
-9 0.04878 host node04
6 hdd 0.01949 osd.6 up 1.00000 1.00000
7 hdd 0.02930 osd.7 up 1.00000 1.00000
默认创建pool无法执行删除操作,需要执行以下配置
[root@ceph-deploy my-cluster]# cat ceph.conf
...
[mon]
mon_allow_pool_delete = true
更新配置到所有节点
cd /etc/ceph
ceph-deploy --overwrite-conf config push node01 node02 node03 node04
各个节点重启monitor服务
systemctl restart ceph-mon.target