小工具知识网

当前位置: 首页 > 行业知识 > Ceph集群存储案例

行业知识

Ceph集群存储案例

2026-11-12 11:32:52 来源:互联网转载

Ceph是一种可靠的、可扩展的、统一的、分布式的存储系统。Ceph高度可靠、易于管理且免费。Ceph提供了非凡的可扩展性——数以千计的客户端访问PB到EB的数据。Ceph存储集群相互通信以动态复制和重新分配数据。目前众多云厂商都在使用Ceph,应用广泛。如:华为、阿里、腾讯等等。目前火热的云技术OpenStack、Kubernetes都支持后端整合Ceph,从而提高数据的可用性、扩展性、容错等能力。

本案例主要介绍使用3台云主机搭建Ceph分布式集群存储系统和使用Ceph分布式集群存储系统。

1. 规划节点

表1 规划节点

IP地址主机名节点
192.168.169.3ceph-node1Monitor/OSD
192.168.169.4ceph-node2OSD
192.168.169.5ceph-node3OSD

2. 基础准备

在OpenStack平台中,使用提供的CentOS7.9镜像创建3个云主机,flavor使用2vCPU/4G/40G硬盘+临时磁盘20G类型。创建完成后,修改三个节点的主机名为ceph-node1、ceph-node2和ceph-node3,命令如下:

[root@ceph-node1 ~]# hostnamectl set-hostname ceph-node1[root@ceph-node1 ~]# hostnamectl  Static hostname: ceph-node1         Icon name: computer-vm           Chassis: vm        Machine ID: cc2c86fe566741e6a2ff6d399c5d5daa           Boot ID: 677af9a2cd3046b7958bbb268342ad69    Virtualization: kvm  Operating System: CentOS Linux 7 (Core)       CPE OS Name: cpe:/o:centos:centos:7            Kernel: Linux 3.10.0-1160.el7.x86_64      Architecture: x86-64

这3台虚拟机各需要有20 GB的空闲硬盘。可以使用lsblk命令进行验证。

[root@ceph-node1 ~]# lsblkNAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINTvda    253:0    0  40G  0 disk └─vda1 253:1    0  40G  0 part /vdb    253:16   0  20G  0 disk

修改3台虚拟机的/etc/hosts文件,修改主机名地址映射关系。

192.168.169.3  ceph-node1192.168.169.4  ceph-node2192.168.169.5  ceph-node3

在所有Ceph节点上修改Yum源,均使用本地源。(软件包使用提供的ceph-14.2.22.tar.gz)

三个节点下载ceph-14.2.22.tar.gz软件包至/root目录下,并解压缩到/opt目录下,命令如下:(三个节点都要执行)

[root@ceph-node1 ~]# curl -O http://mirrors.douxuedu.com/competition/ceph-14.2.22.tar.gz[root@ceph-node1 ~]# tar -zxvf ceph-14.2.22.tar.gz -C /opt

解压完成,然后配置repo文件,首先将/etc/yum.repos.d下面的所有repo文件移走,并创建local.repo文件,命令如下:(三个节点都要执行)

[root@ceph-node1 ~]# mv /etc/yum.repos.d/* /media/ [root@ceph-node1 ~]# vi /etc/yum.repos.d/ceph.repo [ceph]name=cephbaseurl=file:///opt/cephgpgcheck=0enabled=1[centos]name=centpsbaseurl=file:///opt/centosgpgcheck=0enabled=1[iaas]name=iaasbaseurl=file:///opt/iaas/iaas-repogpgcheck=0enabled=1

要部署Ceph集群,需要使用ceph-deploy工具在3台虚拟机上安装和配置Ceph。ceph-deploy是Ceph软件定义存储系统的一部分,用来方便地配置和管理Ceph存储集群。

1. 创建Ceph集群

首先,在ceph-node1上安装Ceph,并配置它为Ceph monitor和OSD节点。

(1)在ceph-node1上安装ceph-deploy。

[root@ceph-node1 ~]# yum install ceph-deploy -y python-setuptools

(2)通过在cep-node1上执行以下命令,用ceph-deploy创建一个Ceph集群。

[root@ceph-node1 ~]# mkdir /etc/ceph[root@ceph-node1 ~]# cd /etc/ceph[root@ceph-node1 ceph]# ceph-deploy new ceph-node1

(3)ceph-deploy的new子命令能够部署一个默认名称为Ceph的新集群,并且它能生成集群配置文件和密钥文件。列出当前的工作目录,可以查看到ceph.conf和ceph.mon.keying文件。

[root@ceph-node1 ceph]# lltotal 12-rw-r--r-- 1 root root  229 Sep 20 16:20 ceph.conf-rw-r--r-- 1 root root 2960 Sep 20 16:20 ceph-deploy-ceph.log-rw------- 1 root root   73 Sep 20 16:20 ceph.mon.keyring

(4)在ceph-node1上执行以下命令,使用ceph-deploy工具在所有节点上安装Ceph二进制软件包。命令如下:(注意需要加上–no-adjust-repos参数,不然系统会默认去安装epel-release源,此处全使用本地安装)

[root@ceph-node1 ceph]# ceph-deploy install ceph-node1 ceph-node2 ceph-node3 --no-adjust-repos[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf......[ceph-node3][INFO  ] Running command: ceph --version[ceph-node3][DEBUG ] ceph version 14.2.22 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)

(5)ceph-deploy工具包首先会安装Ceph组件所有的依赖包。命令成功完成后,检查所有节点上Ceph的版本信息。

[root@ceph-node1 ceph]# ceph -vceph version 14.2.22 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)[root@ceph-node2 ~]# ceph -vceph version 14.2.22 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)[root@ceph-node3 ~]# ceph -vceph version 14.2.22 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)

(6)在ceph-node1上创建第一个Ceph monitor。

ceph-deploy mon create-initial 命令用于在初始阶段创建 Ceph Monitor(监视器)节点。这个命令会在一个或多个指定的主机上创建并初始化 Ceph Monitor

[root@ceph-node1 ceph]# ceph-deploy mon create-initial[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf......[ceph_deploy.gatherkeys][DEBUG ] Got ceph.bootstrap-rgw.keyring key from ceph-node1.

(7)Monitor创建成功后,检查集群的状态,这个时候Ceph集群并不处于健康状态。

[root@ceph-node1 ceph]# ceph -s  cluster:    id:     e901edda-49e8-4910-a5de-b860da4811c2    health: HEALTH_WARN            mon is allowing insecure global_id reclaim   services:    mon: 1 daemons, quorum ceph-node1 (age 47s)    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:     
复制密钥
[root@ceph-node1 ceph]# ceph-deploy admin ceph-node{1,2,3}
2. 创建OSD

(1)列出ceph-node1上所有的可用磁盘。

[root@ceph-node1 ceph]# ceph-deploy disk list ceph-node1... ...[ceph-node1][INFO  ] Disk /dev/vda: 53.7 GB, 53687091200 bytes, 104857600 sectors[ceph-node1][INFO  ] Disk /dev/vdb: 21.5 GB, 21474836480 bytes, 41943040 sectors

(2) 创建共享磁盘,3个节点都要执行。对系统上的空闲硬盘进行分区操作。

先umount磁盘,在使用fdisk工具分区。

(3)分区完毕后,使用命令将这些分区添加至osd,命令如下:

  • ceph-node{1,2,3}都需要进行分区

    ceph-node1节点:

    OSD (Object Storage Daemon)对象存储

    [root@ceph-node1 ceph]# ceph-deploy osd create --data /dev/vdb1 ceph-node1[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /usr/bin/ceph-deploy osd create --data /dev/vdb1 ceph-node1... ...[ceph-node1][INFO  ] Running command: /bin/ceph --cluster=ceph osd stat --format=json[ceph_deploy.osd][DEBUG ] Host ceph-node1 is now ready for osd use.

    ceph-node2节点:

    [root@ceph-node1 ceph]# ceph-deploy osd create --data /dev/vdb1 ceph-node2[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /usr/bin/ceph-deploy osd create --data /dev/vdb1 ceph-node2... ...[ceph-node2][INFO  ] Running command: /bin/ceph --cluster=ceph osd stat --format=json[ceph_deploy.osd][DEBUG ] Host ceph-node2 is now ready for osd use.

    ceph-node3节点:

    [root@ceph-node1 ceph]# ceph-deploy osd create --data /dev/vdb1 ceph-node3[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /usr/bin/ceph-deploy osd create --data /dev/vdb1 ceph-node3... ...[ceph-node3][INFO  ] Running command: /bin/ceph --cluster=ceph osd stat --format=json[ceph_deploy.osd][DEBUG ] Host ceph-node3 is now ready for osd use.

    (4)添加完osd节点后,查看集群的状态,命令如下:

    [root@ceph-node1 ceph]# ceph -s  cluster:    id:     09226a46-f96d-4bfa-b20b-9021898ddf53    health: HEALTH_WARN            no active mgr   services:    mon: 1 daemons, quorum ceph-node1    mgr: no daemons active    osd: 3 osds: 3 up, 3 in   data:    pools:   0 pools, 0 pgs    objects: 0 objects, 0B    usage:   0B used, 0B / 0B avail    pgs:  

    可以看到此时的状态为警告,因为还没有设置mgr节点,安装mgr,命令如下:

    ceph-deploy 命令是用于部署和管理 Ceph 集群的工具。在您的命令中,您使用 ceph-deploy mgr create 命令来创建 Ceph 管理器(Manager)ceph-deploy 将在指定的主机上创建一个 Manager 节点,并将其添加到 Ceph 集群中。Manager 节点将负责集群管理任务,例如监控、维护和提供 RESTful API 服务

    [root@ceph-node1 ceph]# ceph-deploy mgr create ceph-node1 ceph-node2 ceph-node3[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /usr/bin/ceph-deploy mgr create ceph-node1 ceph-node2 ceph-node3... ...[ceph-node3][INFO  ] Running command: systemctl start ceph-mgr@ceph-node3[ceph-node3][INFO  ] Running command: systemctl enable ceph.target

    (5)检查Ceph集群的状态。此时仍然是warn的状态,需要禁用不安全模式命令如下:

    [root@ceph-node1 ceph]# ceph -s  cluster:    id:     e901edda-49e8-4910-a5de-b860da4811c2    health: HEALTH_WARN            mon is allowing insecure global_id reclaim   services:    mon: 1 daemons, quorum ceph-node1 (age 6m)    mgr: ceph-node1(active, since 27s), standbys: ceph-node2, ceph-node3    osd: 3 osds: 3 up (since 47s), 3 in (since 47s)   data:    pools:   0 pools, 0 pgs    objects: 0 objects, 0 B    usage:   3.0 GiB used, 57 GiB / 60 GiB avail    pgs:     

    使用如下命令禁用不安全模式:

    [root@ceph-node1 ceph]# ceph config set mon auth_allow_insecure_global_id_reclaim false

    再次查看集群状态,集群是HEALTH_OK状态。

    [root@ceph-node1 ceph]# ceph -s  cluster:    id:     e901edda-49e8-4910-a5de-b860da4811c2    health: HEALTH_OK   services:    mon: 1 daemons, quorum ceph-node1 (age 9m)    mgr: ceph-node1(active, since 3m), standbys: ceph-node2, ceph-node3    osd: 3 osds: 3 up (since 3m), 3 in (since 3m)   data:    pools:   0 pools, 0 pgs    objects: 0 objects, 0 B    usage:   3.0 GiB used, 57 GiB / 60 GiB avail    pgs:     

    (6)开放权限给其他节点,进行灾备处理。

    # ceph-deploy admin ceph-node{1,2,3}[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf[ceph_deploy.cli][INFO  ] Invoked (1.5.31): /usr/bin/ceph-deploy admin ceph-node1 ceph-node2 ceph-node3[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to ceph-node1[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to ceph-node2[ceph-node2][DEBUG ] connected to host: ceph-node2 [ceph-node2][DEBUG ] detect platform information from remote host[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to ceph-node3[ceph-node3][DEBUG ] connected to host: ceph-node3 [ceph-node3][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf# chmod +r /etc/ceph/ceph.client.admin.keyring
    [root@ceph-node1 ~]# ceph healthHEALTH_OK
    3. Ceph集群运维命令

    有了可运行的Ceph集群后,现在可以用一些简单的命令来体验Ceph。

    (1)检查Ceph的安装状态。

    # ceph status

    (2)观察集群的健康状况。

    # ceph w

    (3)检查Ceph monitor仲裁状态。

    # ceph quorum_status --format json-pretty

    (4)导出Ceph monitor信息。

    # ceph mon dump

    (5) 检查集群使用状态。

    # ceph df

    (6) 检查Ceph Monitor、OSD和PG(配置组)状态。

    # ceph mon stat# ceph osd stat# ceph pg stat

    (7)列表PG。

    # ceph pg dump

    (8)列表Ceph存储池。

    # ceph osd lspools

    (9)检查OSD的CRUSH。

    # ceph osd tree

    ceph 删除osd

    1、删除osd

    查看osd

    [root@ceph-node1 ceph]# ceph osd treeID CLASS WEIGHT  TYPE NAME           STATUS REWEIGHT PRI-AFF-1       0.01959 root default-3       0.00980     host ceph-node1 0   hdd 0.00490         osd.0           up  1.00000 1.00000 1   hdd 0.00490         osd.1           up  1.00000 1.00000-5       0.00490     host ceph-node2 2   hdd 0.00490         osd.2           up  1.00000 1.00000-7       0.00490     host ceph-node3 3   hdd 0.00490         osd.3           up  1.00000 1.00000

    2、停止此osd进程,执行,我的因为坏盘原因已经停止

    [root@ceph-node1 ceph]# systemctl stop ceph-osd@1[root@ceph-node1 ceph]# ceph osd treeID CLASS WEIGHT  TYPE NAME           STATUS REWEIGHT PRI-AFF-1       0.01959 root default-3       0.00980     host ceph-node1 0   hdd 0.00490         osd.0           up  1.00000 1.00000 1   hdd 0.00490         osd.1         down  1.00000 1.00000-5       0.00490     host ceph-node2 2   hdd 0.00490         osd.2           up  1.00000 1.00000-7       0.00490     host ceph-node3 3   hdd 0.00490         osd.3           up  1.00000 1.00000

    3、下线 osd 执行

    [root@ceph-node1 ceph]# ceph osd out 1marked out osd.1.[root@ceph-node1 ceph]# ceph osd treeID CLASS WEIGHT  TYPE NAME           STATUS REWEIGHT PRI-AFF-1       0.01959 root default-3       0.00980     host ceph-node1 0   hdd 0.00490         osd.0           up  1.00000 1.00000 1   hdd 0.00490         osd.1         down        0 1.00000-5       0.00490     host ceph-node2 2   hdd 0.00490         osd.2           up  1.00000 1.00000-7       0.00490     host ceph-node3 3   hdd 0.00490         osd.3           up  1.00000 1.00000

    4、将osd.0踢出集群,执行:ceph osd crush remove osd.1 ,此时osd.1已经不再osd tree中了

    格式化

    [root@ceph-node1 ceph]# ceph osd crush remove osd.1removed item id 1 name 'osd.1' from crush map[root@ceph-node1 ceph]# ceph osd treeID CLASS WEIGHT  TYPE NAME           STATUS REWEIGHT PRI-AFF-1       0.01469 root default-3       0.00490     host ceph-node1 0   hdd 0.00490         osd.0           up  1.00000 1.00000-5       0.00490     host ceph-node2 2   hdd 0.00490         osd.2           up  1.00000 1.00000-7       0.00490     host ceph-node3 3   hdd 0.00490         osd.3           up  1.00000 1.00000 1             0 osd.1                 down        0 1.00000

    5、执行ceph auth del osd.0 和 ceph osd rm 0,此时删除成功但是原来的数据和日志目录还在,也就是数据还在

    [root@ceph-node1 ceph]# ceph auth del osd.1updated[root@ceph-node1 ceph]# ceph osd rm 1removed osd.1[root@ceph-node1 ceph]# ceph osd treeID CLASS WEIGHT  TYPE NAME           STATUS REWEIGHT PRI-AFF-1       0.01469 root default-3       0.00490     host ceph-node1 0   hdd 0.00490         osd.0           up  1.00000 1.00000-5       0.00490     host ceph-node2 2   hdd 0.00490         osd.2           up  1.00000 1.00000-7       0.00490     host ceph-node3 3   hdd 0.00490         osd.3           up  1.00000 1.00000

    6、此时我们将/dev/sdc磁盘umount,然后将磁盘进行擦除那么数据就会被完全删除了,然后执行

    [root@ceph-node1 ceph]# df -hFilesystem               Size  Used Avail Use% Mounted ondevtmpfs                 2.0G     0  2.0G   0% /devtmpfs                    2.0G     0  2.0G   0% /dev/shmtmpfs                    2.0G   12M  2.0G   1% /runtmpfs                    2.0G     0  2.0G   0% /sys/fs/cgroup/dev/mapper/centos-root   17G  2.3G   15G  14% //dev/sda1               1014M  138M  877M  14% /boottmpfs                    394M     0  394M   0% /run/user/0tmpfs                    2.0G   52K  2.0G   1% /var/lib/ceph/osd/ceph-0tmpfs                    2.0G   52K  2.0G   1% /var/lib/ceph/osd/ceph-1[root@ceph-node1 ceph]# umount /var/lib/ceph/osd/ceph-1[root@ceph-node1 ceph]# df -hFilesystem               Size  Used Avail Use% Mounted ondevtmpfs                 2.0G     0  2.0G   0% /devtmpfs                    2.0G     0  2.0G   0% /dev/shmtmpfs                    2.0G   12M  2.0G   1% /runtmpfs                    2.0G     0  2.0G   0% /sys/fs/cgroup/dev/mapper/centos-root   17G  2.3G   15G  14% //dev/sda1               1014M  138M  877M  14% /boottmpfs                    394M     0  394M   0% /run/user/0tmpfs                    2.0G   52K  2.0G   1% /var/lib/ceph/osd/ceph-0
    [root@ceph-node1 ceph]# dmsetup remove_alldmsetup remove_all:该命令用于移除所有的设备映射(Device Mapper mappings)。Device Mapper 是 Linux 内核中的一个子系统,用于进行逻辑卷管理和设备映射。执行 dmsetup remove_all 将移除所有当前活动的设备映射,包括与 Ceph 相关的映射。

    7、格式化

    [root@ceph-node1 ceph]# sudo mkfs -t ext4 /dev/sdb3

    (10)列表集群的认证密钥。

    # ceph auth list
    ceph-dashboard界面安装:

    三个节点都需要安装:

    ceph-rpm-nautilus-el7-x86_64安装包下载_开源镜像站-阿里云 (aliyun.com)

    [ceph-noarch]name=Ceph noarch packagesbaseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/noarchenabled=1gpgcheck=1priority=1type=rpm-mdgpgkey=http://mirrors.163.com/ceph/keys/release.asc[centos]name=centosbaseurl=http://192.168.162.15/centosgpgcheck=0enabled=1[iaas]name=iaaasbaseurl=http://192.168.162.15/iaas/iaas-repogpgcheck=0
    ### 安装依赖Dashboard[root@ceph-node1 ceph]# yum install -y ceph-mgr-dashboard### 启动Dashboard --force 强制开启[root@ceph-node1 ceph]# ceph mgr module enable dashboard --force### 创建证书并安装自签名的证书https[root@ceph-node1 ceph]# ceph dashboard create-self-signed-certSelf-signed certificate created### 创建登录密码[root@ceph-node1 ceph]# echo 'gxl@ceph' > cephadmin-password[root@ceph-node1 ceph]# cat cephadmin-passwordgxl@ceph### 创建用户[root@ceph-node1 ceph]# ceph dashboard ac-user-create cephadmin -i cephadmin-password administrator{"username": "cephadmin", "lastUpdate": 1699617115, "name": null, "roles": ["administrator"], "password": "b$sRwYqfNmS.FQ0SvyN/J6FOZn5j6GBrq3BJR6a.zxm7nJP72KUjgI.", "email": null}- cephadmin `用户`- -i`指定密码文件`- cephadmin-password`密码文件`- administrator`用户身份`### 验证服务[root@ceph-node1 ceph]# ceph mgr services{    "dashboard": "https://ceph-node1:8443/"}
    报错解决
    [root@ceph-node1 ceph]# ceph -s  cluster:    id:     3bc797b7-582f-48aa-8c9b-972cb4da1603    health: HEALTH_WARN            1 osds down            1 host (1 osds) down  services:    mon: 1 daemons, quorum ceph-node1 (age 5m)    mgr: ceph-node3(active, since 73s), standbys: ceph-node1, ceph-node2    osd: 3 osds: 2 up (since 2m), 3 in (since 10m)  data:    pools:   0 pools, 0 pgs    objects: 0 objects, 0 B    usage:   0 B used, 0 B / 0 B avail    pgs:[root@ceph-node1 ceph]# ceph osd treeID CLASS WEIGHT  TYPE NAME           STATUS REWEIGHT PRI-AFF-1       0.02939 root default-3       0.00980     host ceph-node1 0   hdd 0.00980         osd.0           up  1.00000 1.00000-5       0.00980     host ceph-node2 1   hdd 0.00980         osd.1           up  1.00000 1.00000-7       0.00980     host ceph-node3 2   hdd 0.00980         osd.2         down  1.00000 1.00000[root@ceph-node1 ceph]# ceph osd out 2marked out osd.2.[root@ceph-node1 ceph]# ceph osd treeID CLASS WEIGHT  TYPE NAME           STATUS REWEIGHT PRI-AFF-1       0.02939 root default-3       0.00980     host ceph-node1 0   hdd 0.00980         osd.0           up  1.00000 1.00000-5       0.00980     host ceph-node2 1   hdd 0.00980         osd.1           up  1.00000 1.00000-7       0.00980     host ceph-node3 2   hdd 0.00980         osd.2         down        0 1.00000[root@ceph-node1 ceph]# ceph osd in 2marked in osd.2.[root@ceph-node3 ~]# systemctl enable ceph-osd@2 --now[root@ceph-node3 ~]# systemctl status ceph-osd@2● ceph-osd@2.service - Ceph object storage daemon osd.2   Loaded: loaded (/usr/lib/systemd/system/ceph-osd@.service; enabled; vendor preset: disabled)   Active: active (running) since Sat 2023-11-11 18:54:58 CST; 1s ago  Process: 1983 ExecStartPre=/usr/lib/ceph/ceph-osd-prestart.sh --cluster ${CLUSTER} --id %i (code=exited, status=0/SUCCESS) Main PID: 1988 (ceph-osd)   CGroup: /system.slice/system-ceph\x2dosd.slice/ceph-osd@2.service           └─1988 /usr/bin/ceph-osd -f --cluster ceph --id 2 --setuser ceph --setgroup ceph

上一篇:tft手游怎么连接服务器?

下一篇:易语言界面字体大小调整指南,一键操作,舒适阅读!