Ceph部署在Centos7上简明摘要

本文围绕Ceph分布式存储系统展开,介绍其基础概念,包括对象、块设备和文件系统服务,阐述核心组件如Ceph OSD、Monitor和MDS,说明基础架构组件,如RADOS、LIBRADOS等,还介绍存储数据与object、pg、pool的关系,最后提及环境部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近需要研究Ceph,也部署了一下环境,本文分为1,2,3,4章为概念介绍,第5章为实践环节。


1  Ceph基础介绍

Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务。在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的cinder后端存储、Glance的镜像存储和虚拟机的数据存储,比较直观的是Ceph集群可以提供一个raw格式的块存储来作为虚拟机实例的硬盘。

Ceph相比其它存储的优势点在于它不单单是存储,同时还充分利用了存储节点上的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡,同时由于Ceph的良好设计,采用了CRUSH算法、HASH环等方法,使得它不存在传统的单点故障的问题,且随着规模的扩大性能并不会受到影响。

 

2  Ceph的核心组件

Ceph的核心组件包括Ceph OSD、Ceph Monitor和Ceph MDS。

Ceph OSD:OSD的英文全称是Object Storage Device,它的主要功能是存储数据、复制数据、平衡数据、恢复数据等,与其它OSD间进行心跳检查等,并将一些变化情况上报给Ceph Monitor。一般情况下一块硬盘对应一个OSD,由OSD来对硬盘存储进行管理,当然一个分区也可以成为一个OSD。

Ceph OSD的架构实现由物理磁盘驱动器、Linux文件系统和Ceph OSD服务组成,对于Ceph OSD Deamon而言,Linux文件系统显性的支持了其拓展性,一般Linux文件系统有好几种,比如有BTRFS、XFS、Ext4等,BTRFS虽然有很多优点特性,但现在还没达到生产环境所需的稳定性,一般比较推荐使用XFS。

伴随OSD的还有一个概念叫做Journal盘,一般写数据到Ceph集群时,都是先将数据写入到Journal盘中,然后每隔一段时间比如5秒再将Journal盘中的数据刷新到文件系统中。一般为了使读写时延更小,Journal盘都是采用SSD,一般分配10G以上,当然分配多点那是更好,Ceph中引入Journal盘的概念是因为Journal允许Ceph OSD功能很快做小的写操作;一个随机写入首先写入在上一个连续类型的journal,然后刷新到文件系统,这给了文件系统足够的时间来合并写入磁盘,一般情况下使用SSD作为OSD的journal可以有效缓冲突发负载。

Ceph Monitor:由该英文名字我们可以知道它是一个监视器,负责监视Ceph集群,维护Ceph集群的健康状态,同时维护着Ceph集群中的各种Map图,比如OSD Map、Monitor Map、PG Map和CRUSH Map,这些Map统称为Cluster Map,Cluster Map是RADOS的关键数据结构,管理集群中的所有成员、关系、属性等信息以及数据的分发,比如当用户需要存储数据到Ceph集群时,OSD需要先通过Monitor获取最新的Map图,然后根据Map图和object id等计算出数据最终存储的位置。

Ceph MDS:全称是Ceph MetaData Server,主要保存的文件系统服务的元数据,但对象存储和块存储设备是不需要使用该服务的。

查看各种Map的信息可以通过如下命令:ceph osd(mon、pg) dump

 

3  Ceph基础架构组件

640?wx_fmt=jpeg

从架构图中可以看到最底层的是RADOS,RADOS自身是一个完整的分布式对象存储系统,它具有可靠、智能、分布式等特性,Ceph的高可靠、高可拓展、高性能、高自动化都是由这一层来提供的,用户数据的存储最终也都是通过这一层来进行存储的,RADOS可以说就是Ceph的核心。

RADOS系统主要由两部分组成,分别是OSD和Monitor。

基于RADOS层的上一层是LIBRADOS,LIBRADOS是一个库,它允许应用程序通过访问该库来与RADOS系统进行交互,支持多种编程语言,比如C、C++、Python等。

基于LIBRADOS层开发的又可以看到有三层,分别是RADOSGW、RBD和CEPH FS。

RADOSGW:RADOSGW是一套基于当前流行的RESTFUL协议的网关,并且兼容S3和Swift。

RBD:RBD通过Linux内核客户端和QEMU/KVM驱动来提供一个分布式的块设备。

CEPH FS:CEPH FS通过Linux内核客户端和FUSE来提供一个兼容POSIX的文件系统。

4  Ceph存储介绍

存储数据与object的关系:当用户要将数据存储到Ceph集群时,存储数据都会被分割成多个object,每个object都有一个object id,每个object的大小是可以设置的,默认是4MB,object可以看成是Ceph存储的最小存储单元。

object与pg的关系:由于object的数量很多,所以Ceph引入了pg的概念用于管理object,每个object最后都会通过CRUSH计算映射到某个pg中,一个pg可以包含多个object。

通过实验总结:(1)PG是指定存储池存储对象的目录有多少个,PGP是存储池PG的OSD分布组合个数(2)PG的增加会引起PG内的数据进行分裂,分裂相同的OSD上新生成的PG当中(3)PGP的增加会引起部分PG的分布进行变化,但是不会引起PG内对象的变动

pg和pool的关系:pool也是一个逻辑存储概念,我们创建存储池pool的时候,都需要指定pg和pgp的数量,逻辑上来说pg是属于某个存储池的,就有点像object是属于某个pg的

以下这个图表明了存储数据,object、pg、pool、osd、存储磁盘的关系

640?wx_fmt=png

注:以上为引用文章【1】


5  部署

环境准备,

服务器全部安装centos7.5	
192.168.3.8    ceph-admin(ceph-deploy)   mds1、mon1(也可以将monit节点另放一台机器)	
192.168.3.7    ceph-node1                  osd1  	
192.168.3.6    ceph-node2                  osd2 	
-------------------------------------------------	
每个节点修改主机名	
# hostnamectl set-hostname ceph-admin	
# hostnamectl set-hostname ceph-node1	
# hostnamectl set-hostname ceph-node2	
-------------------------------------------------	
每个节点绑定主机名映射	
# cat /etc/hosts	
192.168.3.8    ceph-admin	
192.168.3.7    ceph-node1 	
192.168.3.6    ceph-node2	
-------------------------------------------------	
每个节点确认连通性	
# ping -c 3 ceph-admin	
# ping -c 3 ceph-node1	
# ping -c 3 ceph-node2	
-------------------------------------------------	
每个节点关闭防火墙和selinux	
# systemctl stop firewalld	
# systemctl disable firewalld	
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config	
# setenforce 0	
-------------------------------------------------	
每个节点安装和配置NTP(官方推荐的是集群的所有节点全部安装并配置 NTP,需要保证各节点的系统时间一致。没有自己部署ntp服务器,就在线同步NTP)	
# yum install ntp ntpdate ntp-doc -y	
# systemctl restart ntpd	
# systemctl status ntpd	
-------------------------------------------------	
每个节点准备yum源	
删除默认的源,国外的比较慢	
# yum clean all	
# mkdir /mnt/bak	
# mv /etc/yum.repos.d/* /mnt/bak/	
 	
下载阿里云的base源和epel源	
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo	
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo	
 	
添加ceph源	
# vim /etc/yum.repos.d/ceph.repo	
[ceph]	
name=ceph	
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/	
gpgcheck=0	
priority =1	
[ceph-noarch]	
name=cephnoarch	
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/	
gpgcheck=0	
priority =1	
[ceph-source]	
name=Ceph source packages	
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS	
gpgcheck=0	
priority=1	
------------------------------------------------------------	
每个节点创建cephuser用户,设置sudo权限	
# useradd -d /home/cephuser -m cephuser	
# echo "cephuser"|passwd --stdin cephuser	
# echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser	
# chmod 0440 /etc/sudoers.d/cephuser	
# sed -i s'/Defaults requiretty/#Defaults requiretty'/g /etc/sudoers	
 	
测试cephuser的sudo权限	
# su - cephuser	
$ sudo su -	
#	
------------------------------------------------------------	
配置相互间的ssh信任关系	
现在ceph-admin节点上产生公私钥文件,然后将ceph-admin节点的.ssh目录拷贝给其他节点	
[root@ceph-admin ~]# su - cephuser	
[cephuser@ceph-admin ~]$ ssh-keygen -t rsa    #一路回车	
[cephuser@ceph-admin ~]$ cd .ssh/	
[cephuser@ceph-admin .ssh]$ ls	
id_rsa  id_rsa.pub	
[cephuser@ceph-admin .ssh]$ cp id_rsa.pub authorized_keys	
 	
[cephuser@ceph-admin .ssh]$ scp -r /home/cephuser/.ssh ceph-node1:/home/cephuser/	
[cephuser@ceph-admin .ssh]$ scp -r /home/cephuser/.ssh ceph-node2:/home/cephuser/	

	

	
 	
然后在各节点直接验证cephuser用户下的ssh相互信任关系	
$ ssh -p22 cephuser@ceph-admin	
$ ssh -p22 cephuser@ceph-node1	
$ ssh -p22 cephuser@ceph-node2

[root@ceph-admin ~]# su - cephuser	
      	
安装ceph-deploy	
[cephuser@ceph-admin ~]$ sudo yum update -y && sudo yum install ceph-deploy -y	
      	
创建cluster目录	
[cephuser@ceph-admin ~]$ mkdir cluster	
[cephuser@ceph-admin ~]$ cd cluster/	
[cephuser@ceph-admin cluster]$ ceph-deploy new ceph-admin ceph-node1 ceph-node2	

	
[cephuser@ceph-admin cluster]$ vim ceph.conf 	

	
将如下内容加入配置文件	
osd pool default size = 2	
mon_clock_drift_allowed = 1	

	
[cephuser@ceph-admin cluster]$ ceph-deploy install --release=luminous ceph-admin ceph-node1 ceph-node2	
      	
初始化monit监控节点,并收集所有密钥	
[cephuser@ceph-admin cluster]$ ceph-deploy mon create-initial	
[cephuser@ceph-admin cluster]$ ceph-deploy gatherkeys ceph-admin	
      	
添加OSD到集群	
检查OSD节点上所有可用的磁盘	
[cephuser@ceph-admin cluster]$ ceph-deploy disk list ceph-node1 ceph-node2	
[cephuser@ceph-admin ~]$ ssh ceph-node1 "sudo mkdir /var/local/osd0 && sudo chown ceph:ceph /var/local/osd0"	
[cephuser@ceph-admin ~]$ ssh ceph-node2 "sudo mkdir /var/local/osd1 && sudo chown ceph:ceph /var/local/osd1"	
[cephuser@ceph-admin ~]$ ceph-deploy osd prepare ceph-node1:/var/local/osd0 ceph-node2:/var/local/osd1	
[cephuser@ceph-admin ~]$ ceph-deploy osd activate ceph-node1:/var/local/osd0 ceph-node2:/var/local/osd1	

	
更新配置	
[cephuser@ceph-admin ~]$ ceph-deploy admin ceph-admin ceph-node1 ceph-node2	
[cephuser@ceph-admin ~]$ sudo chmod +r /etc/ceph/ceph.client.admin.keyring	
[cephuser@ceph-admin ~]$ ssh ceph-node1 sudo chmod +r /etc/ceph/ceph.client.admin.keyring	
[cephuser@ceph-admin ~]$ ssh ceph-node2 sudo chmod +r /etc/ceph/ceph.client.admin.keyring

测试

基础环境到这就算搭建好了,但是想配置好,还有一些路要走。

如果没有环境的童鞋,可以考虑使用vagrant来模拟,参考资料【2】的连接,是vagrant项目,非常好用。


参考资料:

[1]: https://www.cnblogs.com/luohaixian/p/8087591.html

[2]: https://github.com/carmstrong/multinode-ceph-vagrant

[3]: https://www.cnblogs.com/kevingrace/p/9141432.html

<think>好的,我需要帮助用户了解如何在CentOS 7系统上部署OpenStack。首先,用户可能对OpenStack不太熟悉,所以需要简要介绍一下。不过用户的问题更偏向部署步骤,所以重点放在安装过程上。 接下来,我需要确定用户的操作系统是CentOS 7,因此要考虑该版本的兼容性和支持的OpenStack版本。CentOS 7通常对应的是较旧的OpenStack版本,比如Queens或Rocky,但最新的部署可能使用Train或Ussuri。不过官方文档可能推荐特定组合,需要确认。 用户可能需要一个基本的部署指南,可能使用RDO或Packstack这样的自动化工具简化安装。因为手动部署OpenStack非常复杂,涉及多个组件,所以推荐使用Packstack进行快速部署。 接下来,步骤需要包括系统准备,比如更新系统、设置主机名、禁用防火墙和SELinux,或者配置它们以适应OpenStack的需求。然后安装RDO仓库和Packstack。之后运行Packstack生成答案文件,并根据需要编辑,最后执行安装。 需要注意网络配置,比如选择合适的网络类型(如Provider Network或Self-service Network),以及可能需要的桥接接口设置。另外,存储和计算节点的配置也可能需要额外步骤,但基础安装可能只包括控制节点和计算节点合一的情况。 需要提醒用户注意硬件要求,比如至少8GB内存,多核CPU,足够的磁盘空间等。此外,安装后的步骤包括验证服务,创建网络和实例,确保用户能够访问Dashboard。 可能遇到的问题包括依赖项缺失、网络配置错误、服务启动失败等,需要提供常见问题解决建议或指引用户查阅日志。最后,确保用户知道如何访问Horizon面板,以及后续配置的步骤。</think>以下是在CentOS 7系统上部署OpenStack的简明指南(以 **OpenStack Ussuri** 版本为例,使用RDO/Packstack工具简化部署): --- ### **一、部署前准备** #### **1. 系统要求** - 最低配置:4核CPU / 8GB内存 / 50GB磁盘(建议使用物理机或KVM虚拟机) - 纯净的CentOS 7系统(建议最小化安装) - 网络配置:静态IP地址、可访问互联网 #### **2. 基础环境配置** ```bash # 关闭防火墙和SELinux(测试环境推荐,生产环境需单独配置规则) systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config # 更新系统并安装EPEL仓库 yum update -y yum install -y epel-release # 设置主机名(需解析到本机IP) hostnamectl set-hostname openstack-controller echo "192.168.1.100 openstack-controller" >> /etc/hosts # 重启生效 reboot ``` --- ### **二、安装OpenStack** #### **1. 安装RDO仓库和Packstack工具** ```bash # 安装RDO仓库 yum install -y centos-release-openstack-ussuri yum upgrade -y # 安装Packstack部署工具 yum install -y openstack-packstack ``` #### **2. 生成并修改答案文件** ```bash # 生成默认配置文件(根据需求调整参数) packstack --gen-answer-file=answer.txt # 编辑配置文件(关键参数示例) vim answer.txt ``` ```ini # 配置示例: CONFIG_DEFAULT_PASSWORD=openstack123 # 所有服务统一密码 CONFIG_PROVISION_DEMO=n # 不创建演示网络和实例 CONFIG_KEYSTONE_ADMIN_PW=admin123 # Admin用户密码 CONFIG_NEUTRON_ML2_TYPE_DRIVERS=flat,vxlan # 网络类型 CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-ex # 外部网络桥接 CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0 # 绑定物理网卡 ``` #### **3. 执行自动化部署** ```bash # 开始部署(耗时约30-60分钟) packstack --answer-file=answer.txt ``` --- ### **三、部署后配置** #### **1. 访问Dashboard** - 地址:`http://<服务器IP>/dashboard` - 用户名:`admin` - 密码:`admin123`(即CONFIG_KEYSTONE_ADMIN_PW的值) #### **2. 创建第一个网络和实例** ```bash # 加载OpenStack环境变量 source keystonerc_admin # 创建外部网络(示例) openstack network create --external --provider-physical-network physnet1 --provider-network-type flat public openstack subnet create --network public --subnet-range 192.168.1.0/24 --gateway 192.168.1.1 public-subnet # 创建实例(通过Dashboard或CLI) openstack server create --flavor m1.small --image cirros --network public test-instance ``` --- ### **四、注意事项** 1. **硬件虚拟化支持**:需确认CPU支持虚拟化(`grep -E 'vmx|svm' /proc/cpuinfo`) 2. **网络冲突**:若物理网卡已用于桥接,需避免IP地址冲突 3. **组件选择**:默认安装核心组件(Nova/Neutron/Glance/Keystone),如需Cinder/Swift需手动启用 4. **日志排查**:部署失败时可查看`/var/log/packstack`目录下的日志 --- ### **五、扩展建议** - 生产环境建议分离控制节点、计算节点和存储节点 - 使用Ceph作为后端存储提升性能 - 通过Terraform或Ansible实现自动化管理 如需更详细的组件配置(如高可用部署),请提供具体需求!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麒思妙想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值