通过Cephadm工具搭建Ceph分布式存储以及通过文件系统形式进行挂载的步骤

1、什么是Ceph

Ceph是一种开源、分布式存储系统,旨在提供卓越的性能、可靠性和可伸缩性。它是为了解决大规模数据存储问题而设计的,使得用户可以在无需特定硬件支持的前提下,通过普通的硬件设备来部署和管理存储解决方案。Ceph的灵活性和设计理念使其成为各种数据密集型应用的理想选择,包括云平台、数据中心和科研项目等。

2、本实验拓扑以及与生产环境的差异

本实验拓扑及其相应节点的规划如下:
在这里插入图片描述
需要注意的是,本次实验属于实验环境并非生产环境,受限于服务器数量限制,存在将mon、mgr和osd部署在同一台服务器的情况,这样的部署方式本质上是存在服务中断风险的,所以如果是在生产环境中进行规划,应该尽可能的将mon、mgr、osd或者RGW等服务部署在不同的物理节点上。

3、搭建步骤

(1)通过命令“hostnamectl set-hostname <主机名>”分别在debian1、debian2、debian3节点上修改服务器的主机名,如下:
在这里插入图片描述
上述命令在相应的节点执行完成后,注销并重新登录服务器,使得相应的修改生效。

(2)分别在debian1、debian2和debian3节点上执行命令,写入相应的hosts信息,以达到在实验环境下解析域名的目的,命令代码如下:

cat >> /etc/hosts << EOF
192.168.26.144 debian1
192.168.26.151 debian2
192.168.26.152 debian3
EOF

执行完上述命令后,可以通过ping命令测试,确认是否配置正确。

(3)通过“apt install cephadm -y”命令,在debian1节点上安装cephadm,如下:
在这里插入图片描述
(4)通过命令“cephadm bootstrap --mon-ip 192.168.26.144”命令,在debian1节点上进行初始化,如下:

root@debian1:~# cephadm bootstrap --mon-ip 192.168.26.144
Creating directory /etc/ceph for ceph.conf
Verifying podman|docker is present...
Verifying lvm2 is present...
Verifying time synchronization is in place...
Unit systemd-timesyncd.service is enabled and running
Repeating the final host check...
podman (/usr/bin/podman) version 4.3.1 is present
systemctl is present
lvcreate is present
Unit systemd-timesyncd.service is enabled and running
Host looks OK
Cluster fsid: 492491c0-b0c1-11ef-acca-000c29ea04eb
Verifying IP 192.168.26.144 port 3300 ...
Verifying IP 192.168.26.144 port 6789 ...
Mon IP `192.168.26.144` is in CIDR network `192.168.26.0/24`
Mon IP `192.168.26.144` is in CIDR network `192.168.26.0/24`
Internal network (--cluster-network) has not been provided, OSD replication will default to the public_network
Pulling container image quay.io/ceph/ceph:v16...
Ceph version: ceph version 16.2.15 (618f440892089921c3e944a991122ddc44e60516) pacific (stable)
Extracting ceph user uid/gid from container image...
Creating initial keys...
Creating initial monmap...
Creating mon...
Waiting for mon to start...
Waiting for mon...
mon is available
Assimilating anything we can from ceph.conf...
Generating new minimal ceph.conf...
Restarting the monitor...
Setting mon public_network to 192.168.26.0/24
Wrote config to /etc/ceph/ceph.conf
Wrote keyring to /etc/ceph/ceph.client.admin.keyring
Creating mgr...
Verifying port 9283 ...
Waiting for mgr to start...
Waiting for mgr...
mgr not available, waiting (1/15)...
mgr not available, waiting (2/15)...
mgr not available, waiting (3/15)...
mgr not available, waiting (4/15)...
mgr is available
Enabling cephadm module...
Waiting for the mgr to restart...
Waiting for mgr epoch 5...
mgr epoch 5 is available
Setting orchestrator backend to cephadm...
Generating ssh key...
Wrote public SSH key to /etc/ceph/ceph.pub
Adding key to root@localhost authorized_keys...
Adding host debian1...
Deploying mon service with default placement...
Deploying mgr service with default placement...
Deploying crash service with default placement...
Deploying prometheus service with default placement...
Deploying grafana service with default placement...
Deploying node-exporter service with default placement...
Deploying alertmanager service with default placement...
Enabling the dashboard module...
Waiting for the mgr to restart...
Waiting for mgr epoch 9...
mgr epoch 9 is available
Generating a dashboard self-signed certificate...
Creating initial admin user...
Fetching dashboard port number...
Ceph Dashboard is now available at:

             URL: https://debian1:8443/
            User: admin
        Password: b4xslut1x4

Enabling client.admin keyring and conf on hosts with "admin" label
Enabling autotune for osd_memory_target
You can access the Ceph CLI as following in case of multi-cluster or non-default config:

        sudo /usr/sbin/cephadm shell --fsid 492491c0-b0c1-11ef-acca-000c29ea04eb -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring

Or, if you are only running a single cluster on this host:

        sudo /usr/sbin/cephadm shell

Please consider enabling telemetry to help improve Ceph:

        ceph telemetry on

For more information see:

        https://docs.ceph.com/en/pacific/mgr/telemetry/

Bootstrap complete.

初始化过程会生成首次登录Ceph图形化面板的IP地址链接、用户名和密码,需要牢记好!
在这里插入图片描述

除此之外,此初始化过程会执行以下操作:

  • 在本地主机上为新集群创建monitor 和 manager daemon守护程序。
  • 为Ceph集群生成一个新的SSH密钥,并将其添加到root用户的/root/.ssh/authorized_keys文件中。
  • 将public key的副本写入/etc/ceph/ceph.pub。
  • 将与新群集进行通信所需的最小配置文件保存到/etc/ceph/ceph.conf。
  • 向/etc/ceph/ceph.client.admin.keyring写入client.admin可特权管理secret key的副本。

以上操作完成后,在debian1节点上,会运行以下服务:

  • ceph-mgr ceph管理程序
  • ceph-monitor ceph监视器
  • ceph-crash 崩溃数据收集模块
  • prometheus prometheus监控组件
  • grafana 监控数据展示dashboard
  • alertmanager prometheus告警组件
  • node_exporter prometheus节点数据收集组件

(5)在debian1节点上进入/etc/ceph目录,然后通过以下命令,将cephadm的密钥传送到debian1、debian2和debian3节点上,代码如下:

ssh-copy-id -f -i ceph.pub root@debian1
ssh-copy-id -f -i ceph.pub root@debian2
ssh-copy-id -f -i ceph.pub root@debian3

在这里插入图片描述
(6)在debian1上输入命令“cephadm shell -- ceph orch apply mon --unmanaged”将自动部署mon节点的设置禁用,执行此命令的目的是,不让cephadm在后续添加主机的时候自动向添加的主机部署mon和mgr服务,如下:
在这里插入图片描述
(7)分别在debian2和debian3上,输入命令“apt install podman lvm2 -y”,在相应的节点安装Ceph相关服务所需要podman和lvm2组件,如下:
在这里插入图片描述
(8)在debian1上输入以下命令,在Ceph集群中添加debian1、debian2和debian3节点,如下:

cephadm shell -- ceph orch host add debian1
cephadm shell -- ceph orch host add debian2
cephadm shell -- ceph orch host add debian3

在这里插入图片描述
(9)在debian1上输入命令“cephadm shell -- ceph orch host ls”,查看添加的节点,如下:
在这里插入图片描述
(10)通过命令“cephadm shell -- ceph orch device ls”,查看所有节点的可用设备,需要注意的是,此方式显示的可用设备可能存在错误,例如下图中debian2的节点,显示的是/dev/sda和/dev/sdb两个设备可用,实际上,是/dev/sdb和/dev/sbc可用,因此在添加osd设备时,按照实际的设备名称添加即可,如下:
在这里插入图片描述
(11)在debian1上分别执行以下命令,添加各个节点充当osd的硬盘设备,如下:

ceph orch daemon add osd debian1:/dev/sdb
ceph orch daemon add osd debian1:/dev/sdc
ceph orch daemon add osd debian2:/dev/sdb
ceph orch daemon add osd debian2:/dev/sdc
ceph orch daemon add osd debian3:/dev/sdb
ceph orch daemon add osd debian3:/dev/sdc

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(12)为了使得mon服务在本实验中存在冗余结构,在debian1节点上通过命令“cephadm shell -- ceph orch apply mon debian1,debian2,debian3”将mon服务扩展到每个节点,需要注意的是,受网络和服务器性能进行,此扩展过程需要时间,如下:
在这里插入图片描述
(13)在debian1节点上通过命令“cephadm shell -- ceph orch ls”,查看每个节点的mon运行状态,如下:
在这里插入图片描述
(14)为了使得mgr服务在本实验中存在冗余结构,在debian1节点上通过命令“cephadm shell -- ceph orch apply mgr debian1,debian2”将mon服务扩展到每个节点,需要注意的是,受网络和服务器性能进行,此扩展过程需要时间,如下:
在这里插入图片描述
(15)在debian1节点上通过命令“cephadm shell -- ceph -s”查看mgr服务运行情况,如下:
在这里插入图片描述
(16)除上述通过命令行方式操作外,Ceph也提供了图形化操作面板,具体操作方式为在浏览器里面输入“https://IP地址:8443”(本实验为“https://192.168.26.144:8443”),即可登录图形化界面,需要注意的是,首次登录的用户名为admin,密码为Ceph初始化时,分配的密码,通过此密码登录后,将进入首次修改密码界面,如下:
在这里插入图片描述

(17)密码修改完成,并成功登录后,相应的图形化面板界面如下:
在这里插入图片描述

4、以文件系统形式的挂载步骤

Ceph分布式存储的应用接口一般有四种,分别是:应用直接访问的Redos接口、基于S3/Swift的对象存储接口(通常是Amazon和OpenStack使用)、基于librbd的块存储接口和基于libcephfs/posix的文件系统接口。本实验关于Ceph的挂载讲解部分,使用基于libcephfs的文件系统实现。具体步骤如下:
(1)在debian1节点上,通过命令“cephadm shell -- ceph osd pool create cephfs-metadata 32 32”,创建保存元数据的cephfs-metadata存储池,如下:
在这里插入图片描述
(2)在debian1节点上,通过命令“cephadm shell -- ceph osd pool create cephfs-data 64 64”,创建保存数据的cephfs-data存储池,如下:
在这里插入图片描述
(3)在debian1节点上,通过命令“cephadm shell -- ceph orch apply mds mycephfs --placement=”3 debian1 debian2 debian3””,创建一个名为mycephfs的mds,如下:
在这里插入图片描述
(4)在debian1节点上,通过命令“cephadm shell -- ceph fs new mycephfs cephfs-metadata cephfs-data”,创建基于cephfs-metadata/cephfs-data两个存储池,名为mycephfs的cephFS文件系统,如下:
在这里插入图片描述
(5)在debian1节点上,通过命令“cephadm shell -- ceph -s”,查看文件系统mycephfs的部署状态,本截图展示的是文件系统mycephfs部署过程中的状态,如下:
在这里插入图片描述
(6)在debian1节点上,通过命令“cephadm shell -- ceph fs ls”查看和验证刚刚创建的文件系统mycephfs,如下:
在这里插入图片描述
(7)在debian1节点上,通过命令“cephadm shell -- cephfs status mycephfs”查看文件系统mycephfs的运行状态,如下:
在这里插入图片描述
(8)在debian1节点上,通过以下命令,创建和查看用于客户端登录的用户ymh,如下:

cephadm shell -- ceph auth get-or-create client.ymh mon ‘allow r’ mds ‘allow rw’ osd ‘allow rwx pool=cephfs-data’
cephadm shell -- ceph auth get client.ymh

在这里插入图片描述
(9)在debian1节点上通过命令“cephadm shell -- ceph-authtool --create-keyring ceph.client.ymh.keyring”,创建用户ymh的keyring文件,如下:
在这里插入图片描述
(10)在debian1节点上通过命令“cephadm shell -- ceph auth get client.ymh -o ceph.client.ymh.keyring”将用户ymh的信息写入到keyring文件中,如下:
在这里插入图片描述
(11)在debian1节点上通过命令“cephadm shell -- ceph auth print-key client.ymh > ymh.key”将认证相关的加密信息写入到ymh.key文件中,如下:
在这里插入图片描述
(12)在客户端服务器节点(本实验中,客户端服务器安装的是OpenEuler操作系统)上通过命令“yum install ceph-common -y”安装ceph-common,如下:
在这里插入图片描述
(13)在debian1节点上,通过以下命令,将相关ceph配置文件和用户文件移动到同一目录下,并传送到客户端,如下:

mv ceph.client.ymh.keyring ymh.key /etc/ceph
scp /etc/ceph/ceph.conf ceph.client.ymh.keyring ymh.key root@192.168.26.146:/etc/ceph

在这里插入图片描述
(14)在客户端服务器节点上,通过命令“ceph --user ymh -s”,对用户ymh进行权限验证,确认在客户端上通过用户ymh访问服务端是正常的,如下:
在这里插入图片描述
(15)在客户端节点上,通过命令“mount -t ceph 192.168.26.144:6789,192.168.26.151:6789,192.168.26.152:6789:/ /mnt/ceph_test -o name=ymh,secretfile=/etc/ceph/ymh.key”,对搭建完成的Ceph分布式存储集群进行挂载(本实验中,挂载点为/mnt/ceph_test),如下:
在这里插入图片描述
(16)在客户端节点上通过命令“df -Th”,查看挂载情况,如下:
在这里插入图片描述
(17)此时便可以向Ceph集群中进行文件的读写。

5、其他注意事项

5.1、在cephadm下如何删除已经创建的文件系统和存储池

Ceph为了保证数据安全,在默认情况下,通过ceph监控节点(mon节点)是不能对文件系统和存储池做删除操作的,不过可以通过设置临时项放开删除权限,然后就可以进行删除操作了,以上述的mycephfs文件系统以及下层的cephfs-data、cephfs-metadata存储池为例,讲解相应的删除步骤:
(1)在debian1节点上,通过命令“cephadm shell -- ceph fs set mycephfs down true”放开监控节点删除文件系统的权限,如下:
在这里插入图片描述
(2)在debian1节点上,通过命令“cephadm shell -- ceph osd pool get cephfs-metadata nodeleteceph fs rm mycephfs --yes-i-really-mean-it”删除文件系统mycephfs,如下:
在这里插入图片描述
(3)在debian1节点,通过命令“cephadm shell -- ceph osd pool get cephfs-metadata nodelete”确认nodelete参数为false,如果不是false,则需要通过命令“cephadm shell -- ceph osd pool set cephfs-metadata nodelete false”修改为false,如下:
在这里插入图片描述
在这里插入图片描述
(4)在debian1节点上,通过命令“cephadm shell -- ceph tell mon.* injectargs --mon-allow-pool-delete=true”将mon-allow-pool-delete参数修改为true,以达到放开监控节点删除存储池权限之目的,如下:
在这里插入图片描述
(5)在debian1节点上,通过命令“cephadm shell -- ceph osd pool rm cephfs-metadata cephfs-metadata --yes-i-really-really-mean-it”删除存储池cephfs-metadata,如下:
在这里插入图片描述
(6)在debian1节点上,通过命令“cephadm shell -- ceph osd pool rm cephfs-data cephfs-data --yes-i-really-really-mean-it”删除存储池cephfs-data,如下:
在这里插入图片描述

5.2、Ceph和GlasterFS的区别

Ceph和GlasterFS都是应用非常广泛的开源分布式存储系统,从部署难度上来说GlasterFS部署更加快速容易,可以通过简单的几个配置便可以达到分布式存储的目的,并且对于操作系统基础环境的要求很低,而对比之下,Ceph的部署难度则比GlasterFS高不少。然而,Ceph支持的特性比GlasterFS多很多,例如,GlasterFS只支持文件系统存储,而Ceph除了支持CephFS这一文件系统存储之外,还支持块存储和对象存储,并且每个osd硬盘上都通过文件副本和纠删码等方式进行了加密存储,因此,如果单独把一个osd设备拿出来,其中的文件是不能直接进行使用的,而GlasterFS的每个节点,文件都是直接放在存储节点上,因此这些文件在存储节点单拿出来时,是可以直接使用的。
另外在Amazon和OpenStack等云平台架构中,Ceph是其重要的组成部分,这一点相比于GlasterFS有着无可比拟的优势。

### 单节点 Ceph 集群部署指南 对于希望在一个单独的服务器上快速启动并运行 Ceph 存储环境的情况,`cephadm` 提供了一种简化的方法来完成这一目标[^1]。以下是针对单节点 Ceph 部署的最佳实践以及具体操作步骤。 #### 准备工作 确保主机满足最低硬件需求,并安装必要的依赖项。建议关闭防火墙和服务隔离设置以便于调试阶段的操作更加顺利。另外,在生产环境中应重新评估安全策略配置。 #### 安装 cephadm 工具 通过官方仓库获取最新版本的 `cephadm` 脚本文件: ```bash curl --silent --remote-name --location https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm chmod +x cephadm sudo mv cephadm /usr/local/bin/ ``` #### 初始化集群 执行如下命令创建新的 Ceph 集群实例: ```bash sudo cephadm bootstrap --mon-ip <NODE_IP> ``` 这里 `<NODE_IP>` 是指当前机器网络接口对外服务所使用的 IP 地址。 #### 添加存储设备 为了使 Ceph 可以管理磁盘空间作为 OSD 使用,需指定哪些物理驱动器参与进来。假设 `/dev/sdb` 和 `/dev/sdc` 就是要分配给 Ceph 的两块硬盘,则可以这样添加它们: ```bash for disk in sdb sdc; do sudo ceph orch apply osd --data-dev ${disk}; done ``` #### 配置监控组件 虽然在单一节点上的应用场景下并非强制要求,但是仍然推荐开启对象网关(RGW)、元数据服务器(MDS)等功能模块以增强功能特性集。 ```bash # 启用 RGW 服务 sudo ceph orch apply rgw myrgw --port=8080 # 如果计划支持 CephFS 文件系统的话还需要 MDS 组件 sudo ceph orch apply mds myfs ``` #### 测试与验证 最后一步就是确认整个架构能否正常运作了。可以通过多种方式来进行测试,比如上传下载一些小文件到 S3 兼容的对象存储里去;或者是挂载 CephFS 并读写几个样本文档等方法检验实际效果。 #### 注意事项 尽管可以在一台计算机上面搭建完整的 Ceph 环境用于学习目的或是初步尝试,但在真实世界里的大规模分布式场景中不提倡这样做。因为这会带来严重的性能瓶颈和可靠性风险。因此当考虑长期稳定性和高可用性时,请务必规划多台独立的工作站组成集群结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值