一、Ceph架构及实验环境
1. Ceph 各组件解释
Ceph monitors(MON): Ceph
监视器通过跟踪保存集群状态的映射来跟踪整个集群的健康
状况 , 它们为每个组件维护单独的信息映射, 其中包括OSD
映射, MON
映射, PG
映射和CRUSH
映射。 所有群集节点都报告监视节点并共享有关其状态的每个更改的信息。 监视器不存储实际数
据; 这是OSD
的工作。
Ceph对象存储设备(OSD) : 一旦应用程序向Ceph
集群发出写操作, 数据就以对象的形式存
储在OSD
中。 这是Ceph
集群中存储实际用户数据的惟一组件, 通常, 一个OSD
守护进程绑定到
集群中的一个物理磁盘。 因此, 通常来说, Ceph
集群中物理磁盘的总数与在每个物理磁盘上存储
用户数据的OSD
守护进程的总数相同。
Ceph metadata server (MDS) : MDS
跟踪文件层次结构, 仅为Ceph FS
文件系统存储元
数据,Ceph
块设备和RADOS
网关不需要元数据; 因此, 他们不需要Ceph MDS
守护进程。 MDS
不
直接向客户端提供数据, 从而从系统中删除单点故障。
RADOS : 可靠的自主分布式对象存储(RADOS)
是Ceph
存储集群的基础。 RADOS
对象存储
负责存储这些对象, 而不管它们的数据类型如何。 RADOS
层确保数据始终保持一致。 为此, 它
执行数据复制、 故障检测和恢复, 以及跨集群节点的数据迁移和再平衡。
Librados : librados
库是一种访问RADOS
的方便方法, 支持PHP
、 Ruby
、 Java
、Python
、C
和c++
编程语言。 它为 Ceph
存储集群(RADOS)
提供了本机接口, 并为其他服务提供了基础, 如
RBD
、 RGW
和CephFS
, 这些服务构建 在librados
之上。 librados
还支持从应用程序直接访问
RADOS
, 没有HTTP
开销。
RADOS块设备(RBD) : 现在是RBD
被称为Ceph
块设备, 提供持久性块存储, 它是精简配
置, 可调整大小, 并存储多个OSD
条带化的数据。 RBD
服务已构建为librados
之上的本机接口。
RGW : RGW
提供对象存储服务。 它使用librgw (Rados网关库)
和librados
, 允许应用程序与
Ceph
对象存储建立 连接。 RGW
提供了与Amazon S3
和OpenStack Swift
兼容的RESTful api
接
口。
CephFS : Ceph
文件系统提供了一个符合posix
标准的文件系统, 它使用Ceph
存储集群在文件
系统上存储用户数 据。 与RBD
和RGW
一样, CephFS
服务也作为librados
的本机接口实现。
Ceph manager : Ceph manager
守护进程(Ceph -mgr)
是在Kraken
版本中引入的, 它与
monitor
守护进程一起运行, 为外部监视和管理系统提供额外的监视和接口。
2. 实验环境
2.1 系统版本
[root@node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
2.2 主机列表
主机名 | 角色 | IP | 内存 |
---|---|---|---|
node1 | mon,osd,deploy | 10.0.0.24,172.16.1.24 | 4G |
node2 | mon,osd | 10.0.0.25,172,16.1.25 | 4G |
node3 | mon,osd | 10.0.0.26,172.16.1.26 | 4G |
172.16.1.0/24网段用于传输数据
2.3 硬件信息
每个主机有三个数据盘
[root@node1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 4G 0 part [SWAP]
└─sda3 8:3 0 35G 0 part /
sdb 8:16 0 50G 0 disk
sdc 8:32 0 50G 0 disk
sdd 8:48 0 50G 0 disk
sr0 11:0 1 942M 0 rom
二、部署Ceph
1. 基础环境准备
1.1 hosts解析
所有节点都需要做hosts
解析
[root@node1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.24 node1
10.0.0.25 node2
10.0.0.26 node3
1.2 yum源配置
除了配置Base
和epel
源之外,还要添加ceph
源,添加内容如下:
[root@node1 ~]# cat /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/x86_64/
gpgcheck=0
priority=1
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/
gpgcheck=0
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS
enabled=0
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
1.3 时间同步
所有节点要求保持时间同步,时间内同步有多种方式,提供以下两种方式,二选一即可
- 为了省事可以直接在每个节点定时向阿里云进行同步
* */1 * * * /usr/sbin/ntpdate ntp2.aliyun.com &> /dev/null
- 也可以自己搭建时间同步服务,具体步骤如下
所有节点安装chrony
包
[root@node1 ~]# yum install chrony
修改node1节点的配置文件,让其向阿里云时间同步服务器同步时间,并允许10.0.0.0/24
网段的主机向这台服务器同步时间
[root@node1 ~]# grep "^server" /etc/chrony.conf
server ntp3.aliyun.com iburst
[root@node1 ~]# grep "^allow" /etc/chrony.conf
allow 10.0.0.0/24
重启服务
[root@node1 ~]# systemctl restart chronyd.service
在node1节点上验证
[root@node1 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 203.107.6.88 2 6 17 62 +1938us[ +274us] +/- 30ms
其他节点安装完chrony
服务后,更改其配置文件,让其向node1
节点进行时间同步。
[root@node2 ~]# grep "^server" /etc/chrony.conf
server node1 iburst
[root@node2 ~]# systemctl restart chronyd.service
在其他节点上验证
[root@node2 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^? node1 0 6 0 - +0ns[ +0ns] +/- 0ns
1.4 创建cephadmin的用户
在各个节点创建新用户,官方推荐以普通用户的身份使用 ceph-deploy
工具。新建用户的用户名不能为 ceph
,因为此用户保留给了 Ceph
守护进程。
所有节点新建用户cephadmin
,并设置密码
[root@node1 ~]# useradd cephadmin
[root@node1 ~]# echo "1" | passwd --stdin cephadmin
[root@node1 ~]# id cephadmin
uid=1000(cephadmin) gid=1000(cephadmin) groups=1000(cephadmin)
让各个节点新建的用户 cephadmin
可以不输入密码直接使用sudo
[root@node1 ~]# echo "cephadmin ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/cephadmin
[root@node1 ~]# chmod 0440 /etc/sudoers.d/cephadmin
使用新建的普通用户登录管理节点,在管理节点生产公钥,并推送到其他节点
[cephadmin@node1 ~]$ ssh-keygen
[cephadmin@node1 ~]$ ssh-copy-id cephadmin@node1
[cephadmin@node1 ~]$ ssh-copy-id cephadmin@node2
[cephadmin@node1 ~]$ ssh-copy-id cephadmin@node3
2. 部署Ceph
2.1 安装部署工具
在管理节点node1
上安装ceph-deploy
工具
[cephadmin@node1 ~]$ sudo yum install -y ceph-deploy python-pip
2.2 创建集群
在管理节点上创建一个目录,用于保存 ceph-deploy
生成的配置文件和密钥对。
[cephadmin@node1 ~]$ mkdir my-cluster
[cephadmin@node1 ~]$ cd my-cluster
在刚创建的my-cluster
目录下,用ceph-deploy
初始化一个集群
[cephadmin@node1 my-cluster]$ ceph-deploy new node1 node2 node3
命令执行成功后,会自动产生一下三个文件。
[cephadmin@node1 my-cluster]$ ll
total 12
# ceph配置文件
-rw-rw-r-- 1 cephadmin cephadmin 192 Mar 6 17:57 ceph.conf
# 日志文件
-rw-rw-r-- 1 cephadmin cephadmin 3013 Mar 6 17:57 ceph-deploy-ceph.log
# monitor 密钥环
-rw------- 1 cephadmin cephadmin 73 Mar 6 17:57 ceph.mon.keyring
在~/my-cluster/ceph.conf
文件中添加如下行。
public network = 10.0.0.0/24
cluster network = 172.16.1.0/24
osd_pool_default_min_size = 2
osd_pool_default_size = 3
mon_clock_drift_allowed = 5
osd_pool_default_crush_rule = 0
osd_crush_chooseleaf_type = 1
2.3 安装ceph
各个节点安装ceph
-
官方文档在管理节点使用如下命令,会在各台主机自动为我们配置
yum
源,安装ceph
。[cephadmin@node1 my-cluster]$ ceph-deploy purge node1 node2 node3
ceph-deploy工具自动为我们配置的国外yum源,可能会导致安装不成功,建议手动安装
-
也可以配置完yum源后,在各个节点手动安装
ceph
[cephadmin@node1 my-cluster]$ sudo yum -y install ceph ceph-radosgw
yum源在第二部分的1.2中已经配置好
验证各个节点是否安装成功
[cephadmin@node1 my-cluster]$ ceph -v
ceph version 13.2.8 (5579a94fafbc1f9cc913a0f5d362953a5d9c3ae0) mimic (stable)
[cephadmin@node2 ~]$ ceph -v
ceph version 13.2.8 (5579a94fafbc1f9cc913a0f5d362953a5d9c3ae0) mimic (stable)
[cephadmin@node3 ~]$ ceph -v
ceph version 13.2.8 (5579a94fafbc1f9cc913a0f5d362953a5d9c3ae0) mimic (stable)
2.4 初始化集群
根据 ~/my-cluster/ceph.conf
中 mon initial members
定义的信息部署初始monitor
成员
[cephadmin@node1 my-cluster]$ ceph-deploy mon create-initial
完成上述操作后,当前目录里应该会出现这些密钥环:
[cephadmin@node1 my-cluster]$ ll *.keyring
-rw------- 1 cephadmin cephadmin 113 Apr 1 16:31 ceph.bootstrap-mds.keyring
-rw------- 1 cephadmin cephadmin 113 Apr 1 16:31 ceph.bootstrap-mgr.keyring
-rw------- 1 cephadmin cephadmin 113 Apr 1 16:31 ceph.bootstrap-osd.keyring
-rw------- 1 cephadmin cephadmin 113 Apr 1 16:31 ceph.bootstrap-rgw.keyring
-rw------- 1 cephadmin cephadmin 151 Apr 1 16:31 ceph.client.admin.keyring
-rw------- 1 cephadmin cephadmin 73 Apr 1 16:16 ceph.mon.keyring
2.5 开放权限
现在仅可在管理节点执行ceph
命令,且需要使用sudo
提权。通过以下操作,可在任意节点不适用sudo
提权也可以使用ceph
命令
在管理节点执行以下命令,将Ceph
配置文件和admin
密钥文件ceph.client.admin.keyring
推送到各个节点
[cephadmin@node1 my-cluster]$ ceph-deploy admin node{1,2,3}
在各个节点执行以下命令
[cephadmin@node1 my-cluster]$ sudo chmod +r /etc/ceph/ceph.client.admin.keyring
2.6 监控检查
[cephadmin@node3 ~]$ ceph -s
cluster:
id: ab2f7082-28ae-43b3-8d68-aa571146e0a7
health: HEALTH_OK
services:
mon: 3 daemons, quorum node1,node2,node3
mgr: no daemons active
osd: 0 osds: 0 up, 0 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
3. 添加OSD
osd daemon
需要万兆网卡。一个分区、一块硬盘或者一个 RAID
都可以添加一个osd daemon
,一块硬盘添加一个 osd daemon
性能要好一些。osd daemon
主要有以下两个功能
- 存储和复制数据
- 监控自己以及同组的其他
osd daemon
的状态(当osd daemon
故障时,无法上报自己的状态,需要同组的osd daemon
帮忙上报),并主动上报给mon
3.1 添加OSD节点
通过 shell
脚本时间 OSD daemon
的添加
for dev in /dev/sdb /dev/sdc /dev/sdd
do
ceph-deploy disk zap node1 $dev
ceph-deploy osd create node1 --data $dev
ceph-deploy disk zap node2 $dev
ceph-deploy osd create node2 --data $dev
ceph-deploy disk zap node3 $dev
ceph-deploy osd create node3 --data $dev
done
也可通过命令行添加 osd daemon
,命令格式为:
[cephadmin@node1 my-cluster]$ ceph-deploy disk zap <nodename>:/dev/sdb
[cephadmin@node1 my-cluster]$ ceph-deploy osd create <nodename>:/dev/sdb
4. 状态检查
4.1 命令行检查
健康状态检查
[cephadmin@node1 my-cluster]$ ceph -s
cluster:
id: ab2f7082-28ae-43b3-8d68-aa571146e0a7
health: HEALTH_OK
services:
mon: 3 daemons, quorum node1,node2,node3
mgr: node1(active), standbys: node2, node3
osd: 9 osds: 9 up, 9 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 9.0 GiB used, 432 GiB / 441 GiB avail
pgs:
节点状态检查
[cephadmin@node1 my-cluster]$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.43108 root default
-3 0.14369 host node1
0 hdd 0.04790 osd.0 up 1.00000 1.00000
3 hdd 0.04790 osd.3 up 1.00000 1.00000
6 hdd 0.04790 osd.6 up 1.00000 1.00000
-5 0.14369 host node2
1 hdd 0.04790 osd.1 up 1.00000 1.00000
4 hdd 0.04790 osd.4 up 1.00000 1.00000
7 hdd 0.04790 osd.7 up 1.00000 1.00000
-7 0.14369 host node3
2 hdd 0.04790 osd.2 up 1.00000 1.00000
5 hdd 0.04790 osd.5 up 1.00000 1.00000
8 hdd 0.04790 osd.8 up 1.00000 1.00000
在每个节点上检查是否挂载成功
[cephadmin@node1 my-cluster]$ sudo df -h | grep osd
tmpfs 2.0G 52K 2.0G 1% /var/lib/ceph/osd/ceph-0
tmpfs 2.0G 52K 2.0G 1% /var/lib/ceph/osd/ceph-3
tmpfs 2.0G 52K 2.0G 1% /var/lib/ceph/osd/ceph-6
4.2 Web页面检查
部署 mgr
,L版以后才需要部署
[cephadmin@node1 my-cluster]$ ceph-deploy mgr create node1 node2 node3
开启 dashboard
功能
[cephadmin@node1 my-cluster]$ ceph mgr module enable dashboard
L 版到此步骤通过 http://192.168.20.176:7000 就可以访问
dashboard
了
生成并安装一个 自签名证书
[cephadmin@node1 my-cluster]$ ceph dashboard create-self-signed-cert
Self-signed certificate created
创建 web
登录的用户名和密码
[cephadmin@node1 my-cluster]$ ceph dashboard set-login-credentials cephadmin 123456
Username and password updated
用户名为
cephadmin
密码为123456
查看访问方式
[cephadmin@node1 my-cluster]$ ceph mgr services
{
"dashboard": "https://node1:8443/"
}
通过访问 https://10.0.0.24:8443
可以访问到 ceph web
界面