Ceph 学习指南 集群部署【 cephadm 】

文章目录

  • 引言
    • [初识 Server SAN](#初识 Server SAN)
    • [Server SAN 和传统存储对比](#Server SAN 和传统存储对比)
  • [Ceph 概述](#Ceph 概述)
    • [Ceph 的架构设计](#Ceph 的架构设计)
    • [Ceph 的特点](#Ceph 的特点)
    • [Ceph 块存储](#Ceph 块存储)
    • [Ceph 文件系统](#Ceph 文件系统)
    • [Ceph 对象存储](#Ceph 对象存储)
    • [Ceph 介绍](#Ceph 介绍)
  • [Ceph 集群部署](#Ceph 集群部署)
    • [配置 aliyun 源](#配置 aliyun 源)
    • 配置时间同步
    • [配置 hosts 文件](#配置 hosts 文件)
    • [安装 docker](#安装 docker)
    • 配置免密登录
    • [ceph 集群部署](#ceph 集群部署)
      • [ceph1 配置](#ceph1 配置)
        • [安装 python3](#安装 python3)
        • [安装 cephadm](#安装 cephadm)
        • 创建新集群
        • 访问
        • 重置密码
        • [下载 ceph-common](#下载 ceph-common)
        • [添加 mon 节点](#添加 mon 节点)
        • 添加OSD节点
        • [创建 RBD](#创建 RBD)
        • [创建 CEPHFS](#创建 CEPHFS)
      • 其他节点

引言

初识 Server SAN

由多个独立的服务器自带的存储组件组成一个资源池,同时融合了计算和存储资源

  • 专有设备变通用设备
  • 计算与存储线性扩展
  • 简单管理,性价比高

Server SAN 和传统存储对比

  • 从性能对比:Server SAN 服务器数量达到一定量可以超越传统存储
  • 从稳定性对比:Server SAN 通过软件来维持集群的稳定性
  • 从数据可靠性对比:Server SAN 基于副本实现高可用
  • 从扩展性对比:Server SAN 扩展性强 轻松达到 PB 级别
  • 从可管理性对比:Server SAN 通常具备 web 界面管理便捷
  • 从使用场景对比:Server SAN 适用于海量存储场景

Ceph 概述

Ceph 是一个开源项目,它提供软件定义的、统一的存储解决方案 。 Ceph 是一个可大规 模扩展、高性能并且无单点故障的分布式存储系统。 从一开始它就运行在通用商用硬件上, 具有高度可伸缩性,容量可扩展至 EB 级别,甚至更大。

Ceph 的架构设计

下图说明了基本的Ceph开发工作流程:

Ceph 的特点

Ceph 的架构在设计之初就包含以下特征:

  • 所有的组件必须可扩展
  • 不能存在单点故障
  • 解决方案必须是软件定义的,开源的并且可适配的
  • Ceph 软件应该运作在通用商用硬件之上

Ceph 块存储

Ceph 引入了 RBD 协议,RBD 已经被 Linux 内核支持,几乎所有的Linux 操作系统发行版都支持 RDB 。除了可靠性和性能之外, RDB 也支持其他的企业级特性,例如完整和增量式快照,精简的配置 . 写时复制( copy-on-write)式克隆,以及其他特性。 RBD 还支持全内存式缓存,这可以大大提高它的性能。

Ceph RBD 支持的最大镜像为 16EB。这些镜像可以作为磁盘映射到物理裸机、虚拟机或者其他主机使用 。业界领先的开源 hypervisor ,例如 KVM 和 Xen 完全支恃 RBD ,并利用它为自个的客户虚拟机提供 RBD 特性。 其他专有的 hypervisor (例如 VMware 和微软的 HyperV) 也支持了 RBD

Ceph 文件系统

Ceph 文件系统(也就是 CephFS) , Linux 内核驱动程序支持 CephFS ,这也使得 CcphFS 高度适用于各大 Linux 操作系统发行版 。CephFS 将数据和元数据分开存储,为上层的应用程序提供较高的性能以及可靠性。

在 Cpeh 集群内部, Ceph 文件系统库( libcephfs) 运行在 RADOS 库(librados) 之上, 后者是 Ceph 存储集群协议,由文件 、块和对象存储共用。要使用 CephFS ,你的集群节点上最少要配置一个 Ceph 元数据服务器 (MDS) 。

除此之外,客户端可以使用第三 方开源程序,例如 NFS 的 Ganesha 和 SMB/CIFS 的 Samba。

Ceph 对象存储

对象存储是一种以对象形式而不是传统文件和块形式存储的数据的方法。对象存储是一种以对象形式而不是传统文件和块形式存储的数据的方法。

通过它的对象网关(object gateway) ,也就是 RADOS 网关 (radosgw) 提供对象存储接口 。 RADOS 网关利用 librgw (RADOS 网关库)和 librados 这些库,允许应用程序跟 Ceph 对象存储建立连接。 Ceph 通过 RESTful API 提供可 访问且最稳定的多租户对象存储解决方案之一。

RADOS 网关接口满足以下特点:

  • 兼容 Swift: 这是为 OpenStack Swift API 提供的对象存储功能。
  • 兼容 S3: 这是为 Amazon S3 API 提供的对象存储功能。
  • AdminAPl: 这也称为管理 API 或者原生 API ,应用程序可以直接使用它来获取访问存储系统的权限以管理存储系统。

Ceph 介绍

Ccph 提供了各种接门让客户端庄接 Ceph 集群,这为客户端增加了灵活性。 对于数据保护,Ceph 并不依赖 RAlD 技术,因为它存在本章前面提到的各种限制。而是采用了已经被证明比 RAID 更好的副本和纠删码方案

Ceph 最大的优点是它的统一特性 ,它同时提供了现成的块、文件和对象存储解决方案

Ceph 既适合存储小文件,也适合存储大文件,而且不存在任何性能问题。

Ceph 是一个分布式存储系统;客户端可以与 Ceph 快速地交。它不采用传统的数据存储方法去维护一个绑定到某个物理位置或者文件的元数据;而是引人一个新的机制,允许客户端动态计算它们所需要的数据存储位置。这提升了客户端的性能。因为它们不再需要等待从集群的元数据服务器获取数据的位置和内容。 此外,在 Ceph 集群内部,数据的存放位置绝对是透明和自动的;客户端和管理员都不需要对数据在不同放障区域存放位置感到烦恼 Ceph 的智能系统自动管理这一切

Ceph能够检测并修正每一种故障区域中的故障,例如磁盘、节点、网络、机架、集装箱式数据中心、数据中心,甚至不同地域。Ceph 试图自动地管理故障状况,并在数据中断前尽可能修复它。其他的存储解决方案至多仅提供磁盘的可靠性或在节点故障时的可靠性。

Ceph 集群部署

Ceph 官方文档

配置 aliyun 源

备份原来的 yum 源

BASH 复制代码
cd /etc/yum.repos.d/
mkdir bak
mv * bak

下载 CentOS-Base.repo

BASH 复制代码
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

下载 epel 源

BASH 复制代码
yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm

将 repo 配置中的地址替换为阿里云镜像站地址

BASH 复制代码
sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*

配置时间同步

BASH 复制代码
yum install -y chrony

备份配置文件

BASH 复制代码
cp /etc/chrony.conf /etc/chrony.conf.bak

修改配置文件

BASH 复制代码
sed -i '3ipool ntp.tencent.com iburst' /etc/chrony.conf
sed -i '4d' /etc/chrony.conf

重启

BASH 复制代码
systemctl restart chronyd.service

查看是否同步成功

BASH 复制代码
chronyc sources -v
BASH 复制代码
  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current best, '+' = combined, '-' = not combined,
| /             'x' = may be in error, '~' = too variable, '?' = unusable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 106.55.184.199                2   6   277    40   +638us[ +711us] +/-   43ms

[!Important] 看到 ^* 说明同步成功

配置 hosts 文件

BASH 复制代码
cat >> /etc/hosts << EOF
192.168.142.130 ceph1
192.168.142.131 ceph2
192.168.142.132 ceph3
EOF

安装 docker

卸载老版本

BAHS 复制代码
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

安装必要的一些系统工具

BASH 复制代码
yum install -y yum-utils device-mapper-persistent-data lvm2

设置稳定仓库

BASH 复制代码
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker Engine - Community --此命令会安装最新版本(latest)

BASH 复制代码
yum makecache
BASH 复制代码
yum install -y docker-ce docker-ce-cli containerd.io

如果遇到报错

BASH 复制代码
Error: Problem 1: problem with installed package podman-3.0.1-6.module_el8.4.0+781+acf4c33b.x86_64 - package podman-3.0.1-6.module_el8.4.0+781+acf4c33b.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed

...

none of the providers can be installed - package containerd.io-1.6.32-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64

...

这说明:CentOS 8 默认使用 Podman 作为容器工具,这可能会导致与 Docker 的冲突。

解决办法

[!Important] 卸载 Podman 和 Buildah

BASH 复制代码
yum erase podman buildah -y

再次尝试下载

BASH 复制代码
yum install -y docker-ce docker-ce-cli containerd.io

配置加速器

BASH 复制代码
cat >> /etc/docker/daemon.json << EOF
{ 
    "registry-mirrors": [ "https://fb273a16b77a4b0f8e84856a8043410d.mirror.swr.myhuaweicloud.com" ]
}
EOF

启动

BASH 复制代码
systemctl enable docker --now

查看 docker 版本

BASH 复制代码
docker -v
BASH 复制代码
Docker version 26.1.3, build b72abbb

配置免密登录

[!important] 只需要一个单项的免密就可以了

BASH 复制代码
[root@ceph1 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:EzXNWcU+L3Rg6RFztLKpWytCpiTM740W9jaSsqbIL7I root@ceph1
The key's randomart image is:
+---[RSA 3072]----+
|          oo o+*+|
|         . .+ =oo|
|        .    + = |
|         .    *.o|
|    o   S    + .o|
|     + + +  . . .|
|      = B  . . . |
|o..  o *o= .o .  |
|E+ooo.=oo.o...   |
+----[SHA256]-----+
BASH 复制代码
[root@ceph1 ~]# ssh-copy-id ceph1
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'ceph1 (192.168.142.130)' can't be established.
ECDSA key fingerprint is SHA256:zc5sF+tspeNmn9cFdjo3vhVsoKmBCGOOuzwjer4712c.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@ceph1's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'ceph1'"
and check to make sure that only the key(s) you wanted were added.

[root@ceph1 ~]# ssh-copy-id ceph2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'ceph2 (192.168.142.131)' can't be established.
ECDSA key fingerprint is SHA256:Fl+OkgYRflV2F5gentG4p7xeezw3Ri/0cDXKIn0ZL/A.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@ceph2's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'ceph2'"
and check to make sure that only the key(s) you wanted were added.

[root@ceph1 ~]# ssh-copy-id ceph3
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'ceph3 (192.168.142.132)' can't be established.
ECDSA key fingerprint is SHA256:s/qYVgvndDT6jNdWCY6Gk/AECM5yZK6e7fV0E7LozlU.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@ceph3's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'ceph3'"
and check to make sure that only the key(s) you wanted were added.

ceph 集群部署

ceph1 配置

安装 python3

查看 python3 是否安装

BASH 复制代码
python3 --version

如果没有,就安装

BASH 复制代码
sudo dnf install -y python3

如果在创建软连接之后还是无法查看版本,可以试着将 python3.x改成对应的版本再试试,比如 python3.6

BASH 复制代码
sudo ln -s /usr/bin/python3.x /usr/bin/python3

再次查看

BASH 复制代码
python3 --version
Python 3.6.8
安装 cephadm
BASH 复制代码
CEPH_RELEASE=18.2.0

curl --silent --remote-name --location
https://download.ceph.com/rpm-${CEPH_RELEASE}/el8/noarch/cephadm

chmod +x cephadm
mv cephadm /usr/bin/
创建新集群

[!Warning] 在执行这句话的时候,在拉取镜像的时候可能会很慢,耐心等一下看能不能拉取,在执行这条命令之后会给一个初始密码,因为我没太注意,没看到密码,下面有操作如何重置密码

BASH 复制代码
cephadm bootstrap --mon-ip 192.168.142.130 --cluster-network 192.168.142.0/24 --allow-fqdn-hostname
访问

打开浏览器 通过 8443 端口访问

BASH 复制代码
192.168.142.130:8443
重置密码

先无认证登录 ceph shell

BASH 复制代码
cephadm shell

[!Warning] 记住

Inferring fsid 032cf98e-9783-11ef-bed0-000c293a0cf1

写一个密码文件

BASH 复制代码
echo "123456" >  dashboard_password.yml

重置密码

BASH 复制代码
ceph dashboard ac-user-set-password admin -i dashboard_password.yml --force-password

结果,出现下述信息则表示密码重置成功,并且返回了一个新的加密密码

BASH 复制代码
{"username": "admin", "password": "$2b$12$0Hkr5qeqiORTTd.SY64KKO6igcljzCEz5d2134kPaka1xTW1XHVIO", "roles": ["administrator"], "name": null, "email": null, "lastUpdate": 1730429877, "enabled": true, "pwdExpirationDate": null, "pwdUpdateRequired": false}

关键信息: 这是一串加密后的密码

BASH 复制代码
"password": "$2b$12$0Hkr5qeqiORTTd.SY64KKO6igcljzCEz5d2134kPaka1xTW1XHVIO"

再次通过

admin

123456

登录

另外:

通过这种方式进入集群模式

BASH 复制代码
$(which cephadm)  shell --fsid 032cf98e-9783-11ef-bed0-000c293a0cf1 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring

查看集群状态

BASH 复制代码
ceph -s
BASH 复制代码
 cluster:
    id:     032cf98e-9783-11ef-bed0-000c293a0cf1
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 1 daemons, quorum ceph1 (age 3h)
    mgr: ceph1.kbrwjm(active, since 2h)
    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:     
下载 ceph-common

添加 ceph.repo 源

BASH 复制代码
cat > /etc/yum.repos.d/ceph.repo << EOF
[Ceph]
name=Ceph $basearch
baseurl=https://download.ceph.com/rpm-pacific/el8/$basearch
enabled=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.gpg

[Ceph-noarch]
name=Ceph noarch
baseurl=https://download.ceph.com/rpm-pacific/el8/noarch
enabled=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.gpg

[Ceph-source]
name=Ceph SRPMS
baseurl=https://download.ceph.com/rpm-pacific/el8/SRPMS
enabled=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.gpg
EOF

再尝试

BASH 复制代码
cephadm install ceph-common

如果还是不行,就只能通过下面的方式进行安装了,下面对应的依赖,大家再尝试解压的时候可能还会遇到缺包的情况,但是这些包一般情况下也都可以在 阿里 可以找到,详细地址还是看下面

[!Warning] rpm 包有依赖关系,按照步骤来

这几个 rpm 该在哪下? 阿里ceph-common rpm包下载地址

BASH 复制代码
dnf install -y ../libcephfs2-18.2.0-0.el8.x86_64.rpm 
dnf install -y ../librados2-18.2.0-0.el8.x86_64.rpm
dnf install -y ../libradosstriper1-18.2.0-0.el8.x86_64.rpm
dnf install -y ../librbd1-18.2.0-0.el8.x86_64.rpm
dnf install -y ../python3-ceph-argparse-18.2.0-0.el8.x86_64.rpm
dnf install -y ../python3-ceph-common-18.2.0-0.el8.x86_64.rpm
dnf install -y --nobest ../python3-cephfs-18.2.0-0.el8.x86_64.rpm
dnf install -y ../python3-rados-18.2.0-0.el8.x86_64.rpm
dnf install -y ../python3-rbd-18.2.0-0.el8.x86_64.rpm
BASH 复制代码
cephadm install ceph-common

查看版本

BASH 复制代码
ceph -v
ceph version 16.2.15 (618f440892089921c3e944a991122ddc44e60516) pacific (stable)
添加 mon 节点

报错

BASH 复制代码
[root@ceph1 ~]# ceph orch host add ceph2 192.168.142.131
Error EINVAL: Failed to connect to ceph2 (192.168.142.131). Permission denied
Log: Opening SSH connection to 192.168.142.131, port 22
[conn=8] Connected to SSH server at 192.168.142.131, port 22
[conn=8]   Local address: 192.168.142.130, port 41576
[conn=8]   Peer address: 192.168.142.131, port 22
[conn=8] Beginning auth for user root
[conn=8] Auth failed for user root
[conn=8] Connection failure: Permission denied
[conn=8] Aborting connection

解决办法

还是密钥的问题,ssh-keygen 生成的不行

BASH 复制代码
cd /etc/ceph

ll
total 16
-rw-------. 1 root root 151 Nov  1 11:07 ceph.client.admin.keyring
-rw-r--r--. 1 root root 181 Nov  1 11:07 ceph.conf
-rw-r--r--. 1 root root 595 Oct 31 20:35 ceph.pub
-rw-r--r--. 1 root root  92 Feb 27  2024 rbdmap
BASH 复制代码
ssh-copy-id -f -i /etc/ceph/ceph.pub ceph2
ssh-copy-id -f -i /etc/ceph/ceph.pub ceph3

添加 mon 节点

BASH 复制代码
ceph orch host add ceph2 192.168.142.131
ceph orch host add ceph3 192.168.142.132
ceph orch host label add ceph2 _admin
ceph orch host label add ceph3 _admin

查看集群状态

BASH 复制代码
ceph orch host ls

HOST   ADDR             LABELS  STATUS  
ceph1  192.168.142.130  _admin          
ceph2  192.168.142.131  _admin          
ceph3  192.168.142.132  _admin          
3 hosts in cluster

查看当前活跃的节点

BASH 复制代码
ceph mon dump
BASH 复制代码
epoch 3
fsid 032cf98e-9783-11ef-bed0-000c293a0cf1
last_changed 2024-11-01T08:08:50.979451+0000
created 2024-10-31T12:34:51.829314+0000
min_mon_release 18 (reef)
election_strategy: 1
0: [v2:192.168.142.130:3300/0,v1:192.168.142.130:6789/0] mon.ceph1
1: [v2:192.168.142.131:3300/0,v1:192.168.142.131:6789/0] mon.ceph2
2: [v2:192.168.142.132:3300/0,v1:192.168.142.132:6789/0] mon.ceph3

查看集群信息

ceph -s

cluster:
    id:     032cf98e-9783-11ef-bed0-000c293a0cf1
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 3 daemons, quorum ceph1,ceph2,ceph3 (age 2m)
    mgr: ceph1.kbrwjm(active, since 5h), standbys: ceph2.lwdrvf, ceph3.nnfyap
    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:     

[!Warning] mon 此时此刻有三个节点

如果有从节点没有显示活跃,可能是从节点的 docker 没有起来,去从节点看看 docker 是否起来了,可以看看 docker image ls 是否有镜像存在,如果没有镜像,可以在主机点上考被镜像到其他两个节点上然后在其他的节点上运行以下就行了

添加OSD节点
BASH 复制代码
[root@ceph1 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1  9.3G  0 rom  
nvme0n1     259:0    0   20G  0 disk 
├─nvme0n1p1 259:1    0    1G  0 part /boot
└─nvme0n1p2 259:2    0   19G  0 part 
  ├─cl-root 253:0    0   17G  0 lvm  /
  └─cl-swap 253:1    0    2G  0 lvm  [SWAP]
nvme0n2     259:3    0   20G  0 disk 
nvme0n3     259:4    0   20G  0 disk 

[!Warning] 在三个节点上都有三个硬盘

创建分区,下面的操作不方便细说,看清除步骤

BASH 复制代码
[root@ceph1 ~]# gdisk /dev/nvme0n2
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/nvme0n2.
The operation has completed successfully.

让内核识别分区表的变更

partprobe /dev/nvme0n2
BASH 复制代码
[root@ceph1 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1  9.3G  0 rom  
nvme0n1     259:0    0   20G  0 disk 
├─nvme0n1p1 259:1    0    1G  0 part /boot
└─nvme0n1p2 259:2    0   19G  0 part 
  ├─cl-root 253:0    0   17G  0 lvm  /
  └─cl-swap 253:1    0    2G  0 lvm  [SWAP]
nvme0n2     259:3    0   20G  0 disk 
└─nvme0n2p1 259:6    0   20G  0 part 
nvme0n3     259:4    0   20G  0 disk

创建逻辑卷

BASH 复制代码
pvcreate /dev/nvme0n2p1
vgcreate osd /dev/nvme0n2p1
lvcreate -n osd00 -L 5G osd
lvcreate -n osd01 -L 5G osd
lvcreate -n osd02 -L 5G osd
BASH 复制代码
[root@ceph2 ~]# lvcreate -n osd03 -L 5G osd
  Logical volume "osd03" created.
[root@ceph2 ~]# lvcreate -n osd04 -L 5G osd
  Logical volume "osd04" created.
[root@ceph2 ~]# lvcreate -n osd05 -L 5G osd
  Logical volume "osd05" created.
BASH 复制代码
[root@ceph3 ~]# lvcreate -n osd06 -L 5G osd
  Logical volume "osd06" created.
[root@ceph3 ~]# lvcreate -n osd07 -L 5G osd
  Logical volume "osd07" created.
[root@ceph3 ~]# lvcreate -n osd08 -L 5G osd
  Logical volume "osd08" created.

[!Warning] 一直到这里,我们需要在三个节点上分别执行 gdisk /dev/nvme0n2 操作,下面的添加就需要主节点上执行了

BASH 复制代码
ceph orch daemon add osd ceph1:/dev/osd/osd00
ceph orch daemon add osd ceph1:/dev/osd/osd01
ceph orch daemon add osd ceph1:/dev/osd/osd02

ceph orch daemon add osd ceph2:/dev/osd/osd03
ceph orch daemon add osd ceph2:/dev/osd/osd04
ceph orch daemon add osd ceph2:/dev/osd/osd05

ceph orch daemon add osd ceph3:/dev/osd/osd06
ceph orch daemon add osd ceph3:/dev/osd/osd07
ceph orch daemon add osd ceph3:/dev/osd/osd08

查看 osd 节点

BASH 复制代码
ceph -s
BASH 复制代码
[root@ceph1 ~]# ceph -s
  cluster:
    id:     032cf98e-9783-11ef-bed0-000c293a0cf1
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph1,ceph2,ceph3 (age 43m)
    mgr: ceph1.kbrwjm(active, since 5h), standbys: ceph2.lwdrvf, ceph3.nnfyap
    osd: 9 osds: 9 up (since 6s), 9 in (since 23s)
 
  data:
    pools:   1 pools, 1 pgs
    objects: 2 objects, 449 KiB
    usage:   244 MiB used, 45 GiB / 45 GiB avail
    pgs:     1 active+clean

关键信息

BASH 复制代码
osd: 9 osds: 9 up (since 6s), 9 in (since 23s)
创建 RBD
BASH 复制代码
[root@ceph1 ~]# ceph osd pool create rbd 128
pool 'rbd' created
[root@ceph1 ~]# ceph osd pool ls
.mgr
rbd
[root@ceph1 ~]# ceph osd pool application enable rbd rbd
enabled application 'rbd' on pool 'rbd'
[root@ceph1 ~]# rbd pool init rbd
[root@ceph1 ~]# ceph auth get-or-create client.rbduser mon 'profile rbd' osd 'profile rbd pool=rbd' mgr 'profile rbd pool=rbd'
[client.rbduser]
        key = AQA0lyRn+hv0MBAAFYpPB0X0N1i3DtFhyKiXwA==

命令解释:

BASH 复制代码
ceph osd pool create rbd 128 # 创建一个存储池名为 rbd , 并指定该存储池有 128 个放置组

ceph osd pool ls # 查看存储池信息

ceph osd pool application enable rbd rbd # 为 rbd 存储池启动了名为 rbd 的应用,在 ceph 中 rbd 是一种将 ceph 块作为存储的应用。启动 rbd 应用后,该存储池可以被使用来创建和管理 rbd 镜像

rbd pool init rbd # 初始化 rbd 存储池

ceph auth get-or-create client.rbduser mon 'profile rbd' osd 'profile rbd pool=rbd' mgr 'profile rbd pool=rbd' # 创建或者获取一个名为 client.rbduser 的新的 ceph 客户端实体,并且为其设置权限。这个实例被授权 mon , osd , mgr 的访问权限
创建 CEPHFS

要使用CephFS文件系统,需要一个或多个MDS守护程序。如果使用较新的ceph fs volume 接口创建文件系统,则会自动创建mds。 部署元数据服务器,创建一个CephFS, 名字为cephfs

BASH 复制代码
ceph fs volume create k8scephfs --placement="3 ceph1 ceph2 ceph3"

查看 ceph fs volume

[root@ceph1 ~]# ceph fs volume ls
[
    {
        "name": "k8scephfs"
    }
]

查看 ceph 集群中所有元数据服务器 mds 的运行状态

BASH 复制代码
[root@ceph1 ~]# ceph orch ps --daemon-type mds
NAME                        HOST   PORTS  STATUS         REFRESHED  AGE  MEM USE  MEM LIM  VERSION  IMAGE ID      CONTAINER ID  
mds.k8scephfs.ceph1.mvjfro  ceph1         running (92s)    86s ago  92s    18.6M        -  18.2.4   2bc0b0f4375d  818d30f907e5  
mds.k8scephfs.ceph2.isrpsy  ceph2         running (91s)    86s ago  92s    13.9M        -  18.2.4   2bc0b0f4375d  255585a48327  
mds.k8scephfs.ceph3.ekkzco  ceph3         running (93s)    86s ago  93s    15.0M        -  18.2.4   2bc0b0f4375d  55ebc3c3a005 

查看文件系统状态信息

BASH 复制代码
[root@ceph1 ~]# ceph fs status cephfs
     STANDBY MDS        
k8scephfs.ceph1.mvjfro  
k8scephfs.ceph3.ekkzco  
MDS version: ceph version 18.2.4 (e7ad5345525c7aa95470c26863873b581076945d) reef (stable)

查看 mds 的状态信息

BASH 复制代码
[root@ceph1 ~]# ceph mds stat
k8scephfs:1 {0=k8scephfs.ceph2.isrpsy=up:active} 2 up:standby

列出所有的存储池

BASH 复制代码
[root@ceph1 ~]# ceph osd pool ls
.mgr
rbd
cephfs.k8scephfs.meta
cephfs.k8scephfs.data

其他节点

把该弄的环境都准备好, python3 , docker , 时间同步等,cephadm 在 其他节点上可有可无

相关推荐
萤火夜2 天前
Linux之信号量
中间件
idealzouhu2 天前
【Canal 中间件】Canal 实现 MySQL 增量数据的异步缓存更新
mysql·缓存·中间件·canal
乄bluefox2 天前
学习RocketMQ(记录了个人艰难学习RocketMQ的笔记)
java·spring boot·中间件·rocketmq
橘色的喵3 天前
Iceoryx2:高性能进程间通信框架(中间件)
中间件·rust·高性能·iceoryx·iceoryx2
无厌3203 天前
Django-中间件
python·中间件·django
H4_9Y4 天前
linux命令:关键词过滤日志
linux·中间件
隔着天花板看星星4 天前
Kafka-生产者源码分析
大数据·分布式·中间件·kafka
此乃大忽悠4 天前
Apache HTTPD多后缀解析漏洞
笔记·安全·中间件·apache