一、Ceph部署
使用提供的 ceph-14.2.22.tar.gz 软件包,在 OpenStack 平台上创建三台 CentOS7.9系统的云主机,使用这三个节点安装 ceph 服务并完成初始化操作,第一个节点为 mon/osd节点,第二、三个节点为 osd 节点,部署完 ceph 后,创建 vms、images、volumes 三个pool。
主机1为ceph1,主机2为ceph2,主机3为ceph3,每个主机额外加一个20G硬盘
1.前置环境准备
1.1 更改主机名
[root@localhost ~]# hostnamectl set-hostname ceph1
[root@localhost ~]# bash
[root@ceph1 ~]#
[root@localhost ~]# hostnamectl set-hostname ceph2
[root@localhost ~]# bash
[root@ceph2 ~]#
[root@localhost ~]# hostnamectl set-hostname ceph3
[root@localhost ~]# bash
[root@ceph3 ~]#
1.2 关闭防火墙和SELinux
#三个节点均关闭防火墙和Selinux
[root@ceph1/2/3 ~]# systemctl stop firewalld && systemctl disable firewalld
[root@ceph1 ~]# setenforce 0
1.3 配置YUM源
ceph-14.2.22.tar.gz软件包下载
将软件包上传到ceph1节点
tar -zxf ceph-14.2.22.tar.gz -C /opt #将压缩包解压至opt目录
mkdir /opt/centos #创建挂载Centos镜像的目录
mount -o loop CentOS-7.9-x86_64-DVD-2009.iso /mnt #临时挂载到/mnt
cp -rf /mnt/* /opt/centos/ #复制到/opt/centos
umount /mnt #取消临时挂载的
rm -rf /etc/yum.repos.d/* #把所有系统自带的repo文件删除
然后vi /etc/yum.repos.d/ceph.repo #创建编辑yum文件
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[ceph]
name=ceph
baseurl=file:///opt/ceph
gpgcheck=0
enabled=1
yum clean all && yum repolist #检查可用性
另外两台机子也配置本地源的话未免过于费时,我们在cpeh1安装ftp服务,让它们通过ftp服务使用ceph1的软件仓库
yum -y install vsftpd #安装ftp服务
echo "anon_root=/opt" >> /etc/vsftpd/vsftpd.conf #修改ftp服务的配置文件,共享/opt目录
systemctl start vsftpd && systemctl enable vsftpd #启动ftp服务并设置开机自启
ceph2/ceph3:
rm -rf /etc/yum.repos.d/* #删除系统默认源
vi /etc/yum.repos.d/ceph.repo #创建新的仓库文件
[centos]
name=centos
baseurl=ftp://192.168.126.148/centos #这里的IP为ceph1节点IP
gpgcheck=0
enabled=1
[ceph]
name=ceph
baseurl=ftp://192.168.126.148/ceph
gpgcheck=0
enabled=1
1.4 配置主机映射
ceph1,ceph2,ceph3:
cat >> /etc/hosts << EOF
192.168.126.148 ceph1
192.168.126.149 ceph2
192.168.126.147 ceph3
EOF
#根据自己实际情况进行修改
1.5 配置免密登录
因为后续我们需要用ceph-deploy管理工具频繁连接其他节点,所以需要配置免密登录
ceph1:
ssh-keygen #生成密钥对,一直回车就行
ssh-copy-id root@ceph1
ssh-copy-id root@ceph2
ssh-copy-id root@ceph3 #复制公钥给其他主机
2.安装配置Ceph服务
在此之前,我们先删掉主目录下的ceph.tar.gz压缩包,否则后面我们输入yum -y install ceph-*命令时,系统会默认从当前目录下寻找可用的安装包安装,而ceph.tar.gz(不是rpm后缀)显然不是可用的安装包,就会报错
yum -y install ceph-* #在ceph1节点安装ceph的所有组件(其中包括部署工具ceph-deploy)
假如提示有软件包错误,那么可以临时用一下阿里云的源进行一下软件包的补全
比如:
错误:软件包:2:ceph-common-14.2.22-0.el7.x86_64 (ceph)
需要:python-prettytable
这种错误
输入命令:
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
然后输入命令:
yum install -y python-prettytable #就是需要什么软件包下载什么软件包(注:其他节点估计同样会出现这样一样的问题,所以最好其他节点也安装一下这个软件包)
下载完之后再重新执行上面的ceph组件命令
cd /etc/ceph/ #切换至ceph目录,保证后续生成的文件在该目录下
ceph-deploy new ceph1 #创建部署配置文件
ceph-deploy install ceph1 ceph2 ceph3 --no-adjust-repos #给所有节点安装ceph软件包,--no-adjust-repos 表示不调整软件包源
ceph-deploy mon create-initial #在ceph1创建监视器(Monitor)节点
ceph -s #使用ceph -s命令查看集群状态
...
health: HEALTH_WARN
mon is allowing insecure global_id reclaim
可以看到集群健康状态中显示mon节点允许回收不安全的全局唯一标识(global_id),我们把它禁用掉
ceph config set mon auth_allow_insecure_global_id_reclaim false
再次使用ceph -s查看
#给三个节点创建osd(对象存储设备)并添加进集群中,这里的/dev/sdb就是开头加的那块额外硬盘
[root@ceph1 ceph]# ceph-deploy osd create --data /dev/sdb ceph1
[root@ceph1 ceph]# ceph-deploy osd create --data /dev/sdb ceph2
[root@ceph1 ceph]# ceph-deploy osd create --data /dev/sdb ceph3
ceph-deploy mgr create ceph1 ceph2 ceph3 #给三个节点创建mgr(管理器),让我们可以获取集群的管理信息和服务
[root@ceph1 ceph]# ceph-deploy admin ceph1 ceph2 ceph3 #分发admin密钥,免得后续使用ceph命令需要指定mon节点地址、admin密钥等
[root@ceph1 ceph]# ceph osd pool create vms 8
pool 'vms' created
[root@ceph1 ceph]# ceph osd pool create images 8
pool 'images' created
[root@ceph1 ceph]# ceph osd pool create volumes 8
pool 'volumes' created #根据题目要求,创建创建vms、images、volumes三个pool
[root@ceph1 ceph]# ceph -s #最后查看集群状态信息,确认无误
[root@ceph1 ceph]# ceph -s
cluster:
id: 4182c4fe-eedf-4329-b492-d4ac5744bf21
health: HEALTH_OK #id和健康状况,HEALTH_OK表示集群运行正常,没有发现任何问题
services:
mon: 1 daemons, quorum ceph1 (age 13m)
mgr: ceph1(active, since 7m), standbys: ceph2, ceph3
osd: 3 osds: 3 up (since 8m), 3 in (since 8m)
#各个节点的信息,mon一行说明了ceph1为mon监视器节点
#三个节点都是mgr管理器节点,其中ceph1正在活跃中,ceph2和ceph3在待命中,会在ceph1出问题时接替ceph1
#有三个osd对象存储设备,都在线并活跃中
data:
pools: 3 pools, 24 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 57 GiB / 60 GiB avail
pgs: 24 active+clean
#这是集群的数据信息,pools一行展示说明了这个集群有3个存储池和24个PG(Placement Group,是Ceph中数据分布和复制的基本单元)
#object一行则展示说明了当前集群中没有存储任何对象。
#usage一行则展示说明了当前集群的存储使用情况,用了3G,总共60G,还有57G能用
#pgs一行展示说明了PG的状态信息,当前有24个PG处于活跃(active)且干净(clean)的状态。(活跃表示PG正在处理数据,干净表示数据一致性检查没有发现问题,数据很完整)
二、Glance对接Ceph存储
在自己搭建的 OpenStack 平台中修改 glance 服务的相关配置文件,将 glance 后端存储改为 ceph 存储。也就是所以的镜像会上传至 ceph 的 images pool 中。通过命令使用cirros-0.3.4-x86_64-disk.img 镜像文件上传至云平台中,镜像命名为 cirros。
首先,如果你openstack和我一样前面用的是两张仅主机模式的网卡,那么这里需要额外添加一张NAT模式网卡这样才能和Ceph的几台主机进行网络联通。或者Ceph的主机加仅主机模式的虚拟网卡(注:如果你ceph的主机也是仅主机模式网卡那就无需在openstack主机上添加NAT网卡)
为了方便联通不出问题,所有主机之间都设置好SSH免密和hosts修改,这种步骤前面做的太多了,想必能看到这里的人应该不需要我再重新演示了吧!
1.创建存储池
在ceph节点,为 Glance 创建一个独立的存储池(如 glance-images
):
ceph osd pool create glance-images 128 128 # 池名 + PG/PGP 数量(根据集群规模调整)
ceph osd pool application enable glance-images rbd
2.创建 Ceph 用户
在ceph节点,创建专供 Glance 使用的用户(如 client.glance
)并授权:
ceph auth get-or-create client.glance mon 'profile rbd' osd 'profile rbd pool=glance-images'
3.导出用户密钥
将生成的密钥保存到文件(供 Glance 配置使用):
ceph auth get client.glance > /etc/ceph/ceph.client.glance.keyring
4.配置 Glance 使用 Ceph RBD 后端
(1) 修改 Glance 配置文件
编辑 /etc/glance/glance-api.conf
,配置 RBD 存储参数:
[glance_store]
stores = rbd
default_store = rbd
[rbd]
rbd_store_pool = glance-images
rbd_store_user = glance
rbd_store_ceph_conf = /etc/ceph/ceph.conf
rbd_store_chunk_size = 8
(2) 复制 Ceph 配置文件
将 Ceph 的配置文件和密钥文件复制到 Glance 节点:
# 复制 ceph.conf 和密钥
scp /etc/ceph/ceph.conf glance-node:/etc/ceph/
scp /etc/ceph/ceph.client.glance.keyring glance-node:/etc/ceph/
(3) 设置密钥文件权限
确保密钥文件权限正确:
chown glance:glance /etc/ceph/ceph.client.glance.keyring
chmod 600 /etc/ceph/ceph.client.glance.keyring
(4) 重启 Glance 服务并导入配置环境
systemctl restart openstack-glance-api
source /etc/keystone/admin-openrc.sh
5.上传镜像
glance image-create --name "cirros" --disk-format qcow2 --container-format bare --progress < cirros-0.3.4-x86_64-disk.img
三、Cinder对接Ceph存储
写到这里,看似只有这些命令很简单,其实每进行一步都要解决很多问题,关于ceph的内容写到这里写累了,下面关于ceph还没有写完的内容等以后有空再写吧