Ceph对象存储单机部署
一、单节点部署规划
主机名 | IP地址 | 操作系统 | 磁盘空间 | 角色 |
---|---|---|---|---|
services-ceph | 192.168.11.21 | CentOS Linux release 7.6.1810 (Core) | 系统盘:50G + 数据盘:200G | ceph-deploy、monitor、mgr、rgw、mds、osd |
二、角色说明
组件名称 | 组件功能 |
---|---|
Monitors | Ceph Monitor (Ceph -mon)负责维护集群状态的映射,包括Monitor映射、manager映射、OSD映射、MDS映射和CRUSH映射。 这些映射是Ceph守护进程相互协调所需的关键集群状态。 监视器还负责管理守护进程和客户端之间的身份验证。 通常至少需要三个监视器来实现冗余和高可用性。 |
Managers | Ceph Manager守护进程(Ceph -mgr)负责跟踪Ceph集群的运行时指标和当前状态,包括存储利用率、当前性能指标和系统负载。 Ceph Manager守护进程也托管基于python的模块来管理和公开Ceph集群信息,包括基于web的Ceph Dashboard和REST API。 通常需要至少两个管理器来实现高可用性。 |
OSDs | Ceph OSD (object storage daemon, Ceph - OSD)存储数据,处理数据复制,恢复,平衡,并通过检查其他Ceph OSD的心跳,为Ceph monitor和manager提供一些监控信息。 为了实现冗余和高可用性,通常需要至少3块Ceph ssd硬盘。 |
MDSs | Ceph元数据服务器(MDS, Ceph - MDS)代表Ceph文件系统(Ceph Block Devices和Ceph Object Storage不使用MDS)存储元数据。 Ceph元数据服务器允许POSIX文件系统用户执行基本命令(如ls,查找等),而不会给Ceph存储集群带来巨大的负担。 |
RGW | Ceph对象网关,是一种服务,使客户端能够利用标准对象存储API来访问Ceph集群 |
Ceph-Deploy | Ceph集群部署节点,负责集群整体部署管理,各组件部署安装,也可以复用ceph集群中的节点作为部署节点。 |
三、版本安装
软件包 | 版本号 |
---|---|
ceph | ceph-14.2.22-0.el7.x86_64 ceph-mgr-14.2.22-0.el7.x86_64 ceph-mon-14.2.22-0.el7.x86_64 ceph-osd-14.2.22-0.el7.x86_64 ceph-mds-14.2.22-0.el7.x86_64 ceph-radosgw-14.2.22-0.el7.x86_64 |
ceph-deploy | ceph-deploy-2.0.1-0.noarch |
二、部署步骤
1.配置主机名
代码如下(示例):
# 设置 hostname
hostnamectl set-hostname services-ceph
# 配置 hosts 解析,IP地址根据实际调整
cat /etc/hosts
192.168.11.21 services-ceph
# 重启下
reboot
2.防火樯设置
代码如下(示例):
# 关闭防火樯
systemctl disable firewalld
systemctl stop firewalld
# 关闭 selinux
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
3.SSH配置免密
代码如下(示例):
# 给ceph单节点配置免密,一台机器也要
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 权限设置 644
chmod 644 ~/.ssh/authorized_keys
4.配置YUM源
代码如下(示例):
# 备份现有的repo源
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# CentOS基础源
curl -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 指定系统版本
cat /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for$basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/$basearch
enabled=1
gpgcheck=1
priority=1
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
[ceph-noarch]
name=Ceph noarchpackages
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=1
priority=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
[ceph-source]
name=Ceph sourcepackages
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS
enabled=0
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
# 刷新 yum
yum clean all
yum makecache
# 安装epel源
yum install -y epel-release
5.安装ceph-deploy软件包
代码如下(示例):
# yum方式安装
yum install -y ceph-deploy
# 检验版本
ceph-deploy --version
# 如果安装的不是2.0版本,可以直接rpm安装
yum install http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/ceph-deploy-2.0.1-0.noarch.rpm
6.创建ceph集群
创建ceph集群,是通过ceph-deploy命令,并创建配置文件及key文件,这里我们使用单节点部署,还需要将集群的副本数量设置为1,创建完后修改ceph.conf文件。
代码如下(示例):
# 创建一个目录保存ceph配置及密钥
mkdir -p /data/services/ceph
# 创建ceph cluster集群
cd /data/services/ceph
ceph-deploy new services-ceph
# 检查生成的文件
[root@services-ceph ceph]# ls -l
total 12
-rw-r--r-- 1 root root 204 Apr 2 22:33 ceph.conf
-rw-r--r-- 1 root root 3021 Apr 2 22:33 ceph-deploy-ceph.log
-rw------- 1 root root 73 Apr 2 22:33 ceph.mon.keyring
# 因为是单节点部署,还需要将集群的副本数量设置为1,修改ceph.conf文件。
[root@services-ceph ceph]# echo "osd pool default size = 1" >> ceph.conf
[root@services-ceph ceph]# echo "osd pool default min size = 1" >> ceph.conf
# 检查文件
[root@services-ceph ceph]# cat ceph.conf
[global]
fsid = 098f5601-a1f1-4eb4-a150-8db0090bc9d7
mon_initial_members = services-ceph
mon_host = 192.168.11.21
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd pool default size = 1
osd pool default min size = 1
7.安装 ceph 软件
代码如下(示例):
# 安装L版本的软件
yum install -y ceph ceph-radosgw
# 检查安装的版本号
[root@services-ceph yum.repos.d]# rpm -qa | grep ceph
libcephfs2-14.2.22-0.el7.x86_64
ceph-radosgw-14.2.22-0.el7.x86_64
python-ceph-argparse-14.2.22-0.el7.x86_64
ceph-selinux-14.2.22-0.el7.x86_64
ceph-osd-14.2.22-0.el7.x86_64
ceph-deploy-2.0.1-0.noarch
python-cephfs-14.2.22-0.el7.x86_64
ceph-base-14.2.22-0.el7.x86_64
ceph-mgr-14.2.22-0.el7.x86_64
ceph-common-14.2.22-0.el7.x86_64
ceph-mon-14.2.22-0.el7.x86_64
ceph-14.2.22-0.el7.x86_64
ceph-mds-14.2.22-0.el7.x86_64
8.初始化 mon
代码如下(示例):
## 初始化 monitor
ceph-deploy mon create-initial
## 把配置文件和密钥拷贝到管理节点和Ceph节点
ceph-deploy admin services-ceph
## 确保对秘钥环有权限
chmod +r /etc/ceph/ceph.client.admin.keyring
cp /data/services/ceph/ceph* /etc/ceph/
chmod +r /etc/ceph/ceph*
# 启动monitor节点后,检查ceph集群
[root@services-ceph ceph]# ceph -s
cluster:
id: 098f5601-a1f1-4eb4-a150-8db0090bc9d7
health: HEALTH_WARN
mon is allowing insecure global_id reclaim
services:
mon: 1 daemons, quorum services-ceph (age 4m)
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:
9.部署mgr
代码如下(示例):
## 部署mgr组件
ceph-deploy mgr create services-ceph
## 查看mgr状态为active
[root@services-ceph ceph]# ceph -s
cluster:
id: 098f5601-a1f1-4eb4-a150-8db0090bc9d7
health: HEALTH_WARN
OSD count 0 < osd_pool_default_size 1
mon is allowing insecure global_id reclaim
services:
mon: 1 daemons, quorum services-ceph (age 10m)
mgr: services-ceph(active, since 103s)
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:
10.部署osd数据节点
代码如下(示例):
## 安装lvm2
yum install -y lvm2
# 创建pv
pvcreate /dev/sdb
# 创建 vg
vgcreate ceph-pool /dev/sdb
# 创建lv,单个osd节点
lvcreate -n osd0 -l 100%FREE ceph-pool
# 使用xfs格式化
mkfs.xfs /dev/ceph-pool/osd0
# 添加osd节点
ceph-deploy osd create --data /dev/ceph-pool/osd0 services-ceph
# 查看集群状态
[root@services-ceph ceph]# ceph -s
cluster:
id: 098f5601-a1f1-4eb4-a150-8db0090bc9d7
health: HEALTH_WARN
mon is allowing insecure global_id reclaim
services:
mon: 1 daemons, quorum services-ceph (age 71m)
mgr: services-ceph(active, since 63m)
osd: 1 osds: 1 up (since 5s), 1 in (since 5s)
task status:
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 1.0 GiB used, 199 GiB / 200 GiB avail
pgs:
# 通过ceph osd tree 查看osd的列表情况
[root@services-ceph ceph]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.00870 root default
-3 0.00870 host services-ceph
0 hdd 0.00290 osd.0 up 1.00000 1.00000
11.部署rgw实例
代码如下(示例):
## 部署 rgw 组件
ceph-deploy rgw create services-ceph
## 验证rgb,浏览器访问 http://192.168.11.21: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>
12.部署mds实例
代码如下(示例):
## 部署 mds 组件
ceph-deploy mds create services-ceph
## 查看 mds 状态
[root@services-ceph ceph]# ceph mds stat
1 up:standby
13.创建ceph的账号
这里创建管理员账号后,就可以看到access_key和secret_key了,访问ceph需要用到。
代码如下(示例):
[root@services-ceph ceph]# radosgw-admin user create --uid=admin --display-name=admin --admin
{
"user_id": "admin",
"display_name": "admin",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [],
"keys": [
{
"user": "admin",
"access_key": "******",
"secret_key": "******"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"admin": "true",
"default_placement": "",
"default_storage_class": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"temp_url_keys": [],
"type": "rgw",
"mfa_ids": []
}
14.客户端工具
使用s3cmd工具管理ceph桶
代码如下(示例):
## 安装s3cmd,执行如下命令:
yum install -y s3cmd
## 配置文件,把admin的密钥配置如下
[root@services-ceph ~]# cat .s3cfg
[default]
access_key = ******
secret_key = ******
host_base = 192.168.11.21:7480
host_bucket = 192.168.11.21:7480/%(bucket)
use_https = False
## 执行创建桶操作,如下:
s3cmd mb s3://test
# 查看桶是否创建成功
[root@services-ceph ~]# s3cmd ls
2022-04-02 17:46 s3://test
总结
以上是Ceph单机部署,组件都是单节点,仅适合开发测试或POC场景,不能用于生产环境部署。
Ceph将数据作为对象存储在逻辑存储池中。 使用CRUSH算法,Ceph计算哪个放置组应该包含对象,并进一步计算哪个Ceph OSD守护进程应该存储放置组。 CRUSH算法使Ceph存储集群能够动态伸缩、平衡和恢复。