ceph-v18.2.0(reef)部署安装指南

@

ceph-v18.2.0(reef)部署安装指南

官方文档: https://docs.ceph.com/en/latest/cephadm/

一、安装前的准备

1.1 网络规划

本来有四台2U的服务器可以作为ceph的节点,但是由于节点3少了一块RAID卡,只能排除到ceph集群之外,作为测试节点使用。好在3个节点也可以正常部署ceph集群。
ceph集群的Public网络和Cluster网络使用同一个网段。

设备名 管理IP(网络接口) Public/Cluster IP (网络接口) OS HDD SSD NVME
Node1 192.168.40.31/24(enp5s0f0) 172.18.0.31/24(bond0) rocky9.1 18TB*5 480GB*1 800GB*1
Node2 192.168.40.32/24(enp5s0f0) 172.18.0.32/24(bond0) rocky9.1 18TB*5 480GB*1 800GB*1
Node4 192.168.40.34/24(enp5s0f0) 172.18.0.34/24(bond0) rocky9.1 18TB*5 480GB*1 800GB*1

1.2 系统安装

使用rocky9.1 minimal镜像以UEFI的方式启动系统,系统语言选择Englist,Package选择minimal-environment,额外软件包选择stardard。分区时选择手动,先将系统盘上原先的系统删除,然后点自动分区,删除/home目录,将swap分区调整为32 GB,其余空间全部给/目录。
设置密码时注意勾选允许root登录。

1.3 网络设置

按照规划的样子设置网络,此处使用网络设置脚本进行的设置,故此略过。

1.4 安装额外的软件包

dnf install vim net-tools wget lsof python3 -y

systemctl disable --now firewalld 
sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config 
setenforce 0

systemctl status chronyd.service 
chronyc sources -v

yum install -y yum-utils device-mapper-persistent-data lvm2 

cat << EOF > /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.18.0.31 Node1
172.18.0.32 Node2
172.18.0.34 Node4
EOF

# 内核参数设置:开启IP转发,允许iptables对bridge的数据进行处理 
cat << EOF > /etc/sysctl.conf 
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
EOF

cat << EOF > /etc/sysctl.d/ceph.conf 
kernel.pid_max = 4194303 
vm.swappiness = 0 
EOF

sysctl -p

安装docker 或 podman(选择其一即可)

# 安装 podman
dnf install -y podman
systemctl enable --now podman

# 安装 docker
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 

yum install -y docker-ce 
cat << EOF > /etc/docker/daemon.json 
{ 
  "registry-mirrors": ["https://ud6340vz.mirror.aliyuncs.com"],
  "bip": "172.24.16.1/24"
}
EOF
systemctl enable --now docker

二、安装cephadm

在所有节点上都安装cephadm。

dnf search release-ceph
dnf install --assumeyes centos-release-ceph-reef
dnf install --assumeyes cephadm
which cephadm

三、启动一个新集群

# 在 Node1 上启动 cephadm bootstrap
[root@Node1 ~]# cephadm bootstrap --mon-ip 172.18.0.31

上述指令会为我们完成以下工作:

  • 创建mon
  • 创建ssh key并且添加到 /root/.ssh/authorized_keys 文件
  • 将集群间通信的最小配置写入/etc/ceph/ceph.conf
  • 将client.admin管理secret密钥的副本写入/etc/ceph/ceph.client.admin.keyring。
  • 将公用密钥的副本写入/etc/ceph/ceph.pub

执行结果如下:

[root@Node1 ~]# cephadm bootstrap --mon-ip 172.18.0.31
Creating directory /etc/ceph for ceph.conf
Verifying podman|docker is present...
# 省略部分输出
......
Ceph Dashboard is now available at:

             URL: https://Node1:8443/
            User: admin
        Password: fxwkmeq45z

Enabling client.admin keyring and conf on hosts with "admin" label
Saving cluster configuration to /var/lib/ceph/a8d27998-3683-11ee-a1d3-0cc47a34f238/config directory
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 a8d27998-3683-11ee-a1d3-0cc47a34f238 -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/latest/mgr/telemetry/

Bootstrap complete.
[root@Node1 ~]# 

登录https://192.168.40.31:8443,使用上面给出的账户密码登录dashboard,然后将密码修改为自己想要的密码,以免忘记。

要运行ceph命令需如下:

cephadm shell -- ceph -s

或在所有需要的ceph节点上安装ceph-common包

cephadm add-repo --release reef
# liburing 包需自动下载。从rpmfind(https://rpmfind.net/linux/rpm2html/search.php)搜索到该包的下载地址: 
wget https://rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/liburing-2.3-2.el9.x86_64.rpm
rpm -ivh liburing-2.3-2.el9.x86_64.rpm
# 安装ceph-common包
dnf install -y librbd1 ceph-common
# 查看ceph-common是否正常安装
ceph -v

四、添加ceph节点

在Node1上执行以下命令:

ssh-copy-id -f -i /etc/ceph/ceph.pub root@Node2 # 需手动输入密码
ssh-copy-id -f -i /etc/ceph/ceph.pub root@Node4 # 需手动输入密码
# 添加ceph节点
ceph orch host add Node2 172.18.0.32
ceph orch host add Node4 172.18.0.34
# 查看现在的节点情况
ceph orch host ls
# 添加label后可以允许该节点运行ceph cli(比如cephadm shell命令)
ceph orch host label add Node2 _admin
ceph orch host label add Node4 _admin
# 设置 mon 节点
ceph orch apply mon 3
ceph orch apply mon Node1,Node2,Node4
# 查看 mon 详情
[root@Node1 ~]# ceph mon dump
epoch 3
fsid a8d27998-3683-11ee-a1d3-0cc47a34f238
last_changed 2023-08-09T07:26:38.393240+0000
created 2023-08-09T07:10:49.128856+0000
min_mon_release 18 (reef)
election_strategy: 1
0: [v2:172.18.0.31:3300/0,v1:172.18.0.31:6789/0] mon.Node1
1: [v2:172.18.0.32:3300/0,v1:172.18.0.32:6789/0] mon.Node2
2: [v2:172.18.0.34:3300/0,v1:172.18.0.34:6789/0] mon.Node4
dumped monmap epoch 3

# 设置 mgr 节点
ceph orch apply mgr 3
ceph orch apply mgr Node1,Node2,Node4
[root@Node1 ~]# ceph -s
  cluster:
    id:     a8d27998-3683-11ee-a1d3-0cc47a34f238
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 3 daemons, quorum Node1,Node2,Node4 (age 118s)
    mgr: Node1.nydiaz(active, since 11m), standbys: Node2.gsefca
    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@Node1 ~]# 

五、添加OSD

5.1 磁盘清理并重新分区

三个节点之前都安装过其他厂商的ceph集群,每个磁盘上都存在磁盘系统或lvm分区,需清理后再重新使用。

# 清除除系统外的所有vg和lv
vgs | egrep -v 'VG|rl' | awk '{print $1}' | xargs -I{} vgremove -f {}

# 所有磁盘清除文件系统,系统盘为/dev/sdg,不必担心会被下面的命令清理
for disk in {a..f};do
	parted /dev/sd${disk} mklabel msdos
done
parted /dev/nvme0n1 mklabel msdos

# NVME用作wal和db
parted /dev/nvme0n1 mklabel msdos
pvcreate /dev/nvme0n1
vgcreate nvmevg /dev/nvme0n1

lvcreate -n wal01 -L 4G nvmevg
lvcreate -n wal02 -L 4G nvmevg
lvcreate -n wal03 -L 4G nvmevg
lvcreate -n wal04 -L 4G nvmevg
lvcreate -n wal05 -L 4G nvmevg

lvcreate -n db01 -L 35G nvmevg
lvcreate -n db02 -L 35G nvmevg
lvcreate -n db03 -L 35G nvmevg
lvcreate -n db04 -L 35G nvmevg
lvcreate -n db05 -L 35G nvmevg

# ISSUE
[root@Node4 ~]# lvm lvs
  Devices file sys_wwid nvme.8086-4356465437333333303035343830304d474e-4d54303830304b45585555-00000001 PVID 0omoIgJAPXTlDQxYYFZXrV2Oem3qGp5O last seen on /dev/nvme0n1p6 not found.
# 如果有这样的提示,执行以下代码
lvmdevices --deldev /dev/nvme0n1p6

5.2 添加HDD OSD

# 使用参数 `unmanaged` 禁用在可用设备上自动创建 OSD
ceph orch apply osd --all-available-devices --unmanaged=true
ceph orch device ls

# 创建hdd osd yaml文件,请自行修改hdd设备的路径
cat << EOF > node1_hdd.yaml 
service_type: osd
service_id: node1_hdd
placement:
  hosts:
    - Node1
crush_device_class: hdd
spec:
  data_devices:
    paths:
    - /dev/sda
    - /dev/sdc
    - /dev/sdd
    - /dev/sde
    - /dev/sdf
  db_devices:
    paths:
    - /dev/nvmevg/db01
    - /dev/nvmevg/db02
    - /dev/nvmevg/db03
    - /dev/nvmevg/db04
    - /dev/nvmevg/db05
  wal_devices:
    paths:
    - /dev/nvmevg/wal01
    - /dev/nvmevg/wal02
    - /dev/nvmevg/wal03
    - /dev/nvmevg/wal04
    - /dev/nvmevg/wal05
EOF

cat << EOF1 > node2_hdd.yaml 
service_type: osd
service_id: node2_hdd
placement:
  hosts:
    - Node2
crush_device_class: hdd
spec:
  data_devices:
    paths:
    - /dev/sdc
    - /dev/sdd
    - /dev/sde
    - /dev/sdf
    - /dev/sdg
  db_devices:
    paths:
    - /dev/nvmevg/db01
    - /dev/nvmevg/db02
    - /dev/nvmevg/db03
    - /dev/nvmevg/db04
    - /dev/nvmevg/db05
  wal_devices:
    paths:
    - /dev/nvmevg/wal01
    - /dev/nvmevg/wal02
    - /dev/nvmevg/wal03
    - /dev/nvmevg/wal04
    - /dev/nvmevg/wal05
EOF1


cat << EOF2 > node4_hdd.yaml 
service_type: osd
service_id: node4_hdd
placement:
  hosts:
    - Node4
crush_device_class: hdd
spec:
  data_devices:
    paths:
    - /dev/sdb
    - /dev/sdc
    - /dev/sdd
    - /dev/sde
    - /dev/sdf
  db_devices:
    paths:
    - /dev/nvmevg/db01
    - /dev/nvmevg/db02
    - /dev/nvmevg/db03
    - /dev/nvmevg/db04
    - /dev/nvmevg/db05
  wal_devices:
    paths:
    - /dev/nvmevg/wal01
    - /dev/nvmevg/wal02
    - /dev/nvmevg/wal03
    - /dev/nvmevg/wal04
    - /dev/nvmevg/wal05
EOF2

注意节点中18TB的磁盘是否与spec.data_devices.paths中的设置一一对应,请使用lsblk检查。
检查无误后,执行以下操作:

ceph orch apply -i node1_hdd.yaml
ceph orch apply -i node2_hdd.yaml
ceph orch apply -i node4_hdd.yaml

# 检查 cephadm 日志
ceph -W cephadm       # 实时日志
ceph log last cephadm # 查看上一次cephadm log

5.3 添加SSD OSD

所有节点都有一个480GB(实际447.1GB)的SSD,将其分为4个lv,作为OSD加入集群中
注意,盘符可能不同,有的是sda,有的是sdb

pvcreate /dev/sdb
vgcreate ssd /dev/sdb

lvcreate -n ssd01 -L 110G ssd
lvcreate -n ssd02 -L 110G ssd
lvcreate -n ssd03 -L 110G ssd
lvcreate -n ssd04 -L 100G ssd

# 创建ssd osd yaml文件,请自行修改ssd设备的路径
cat << EOF > node1_ssd.yaml 
service_type: osd
service_id: node1_ssd
placement:
  hosts:
    - Node1
crush_device_class: ssd
spec:
  data_devices:
    paths:
    - /dev/ssd/ssd01
    - /dev/ssd/ssd02
    - /dev/ssd/ssd03
    - /dev/ssd/ssd04
EOF

cat << EOF > node2_ssd.yaml 
service_type: osd
service_id: node2_ssd
placement:
  hosts:
    - Node2
crush_device_class: ssd
spec:
  data_devices:
    paths:
    - /dev/ssd/ssd01
    - /dev/ssd/ssd02
    - /dev/ssd/ssd03
    - /dev/ssd/ssd04
EOF

cat << EOF > node4_ssd.yaml 
service_type: osd
service_id: node4_ssd
placement:
  hosts:
    - Node4
crush_device_class: ssd
spec:
  data_devices:
    paths:
    - /dev/ssd/ssd01
    - /dev/ssd/ssd02
    - /dev/ssd/ssd03
    - /dev/ssd/ssd04
EOF
ceph orch apply -i node1_ssd.yaml
ceph orch apply -i node2_ssd.yaml
ceph orch apply -i node4_ssd.yaml

# 检查 cephadm 日志
ceph -W cephadm       # 实时日志
ceph log last cephadm # 查看上一次cephadm log

ceph config set osd/class:hdd osd_crush_update_on_start false
ceph config set osd/class:ssd osd_crush_update_on_start false

如需要删除osd,请参考如下文章
https://www.cnblogs.com/st2021/p/15026526.html

5.4 编辑 crush map bucket

我们希望所有的SSD OSD与HDD OSD分开,使部分pool位于SSD上,另外的pool位于HDD上。需手动编辑crushmap。

# 添加ssd相关的CRUSH-MAP BUCKET
ceph osd crush add-bucket Node1-ssd host
ceph osd crush add-bucket Node2-ssd host
ceph osd crush add-bucket Node4-ssd host

ceph osd crush move Node1-ssd root=ssd
ceph osd crush move Node2-ssd root=ssd
ceph osd crush move Node4-ssd root=ssd

# 手动更改ssd osd在crush map中的位置
ceph osd crush set osd.15 0.10739 root=ssd host=Node1-ssd
ceph osd crush set osd.16 0.10739 root=ssd host=Node1-ssd
ceph osd crush set osd.17 0.10739 root=ssd host=Node1-ssd
ceph osd crush set osd.18 0.10739 root=ssd host=Node1-ssd

ceph osd crush set osd.19 0.10739 root=ssd host=Node2-ssd
ceph osd crush set osd.20 0.10739 root=ssd host=Node2-ssd
ceph osd crush set osd.21 0.10739 root=ssd host=Node2-ssd
ceph osd crush set osd.22 0.10739 root=ssd host=Node2-ssd

ceph osd crush set osd.23 0.10739 root=ssd host=Node4-ssd
ceph osd crush set osd.24 0.10739 root=ssd host=Node4-ssd
ceph osd crush set osd.25 0.10739 root=ssd host=Node4-ssd
ceph osd crush set osd.26 0.10739 root=ssd host=Node4-ssd

# 完成后效果如下
[root@Node1 ~]# ceph osd tree
ID   CLASS  WEIGHT     TYPE NAME           STATUS  REWEIGHT  PRI-AFF
-16           1.28851  root ssd                                     
-13           0.42950      host Node1-ssd                           
 15    ssd    0.10738          osd.15          up   1.00000  1.00000
 16    ssd    0.10738          osd.16          up   1.00000  1.00000
 17    ssd    0.10738          osd.17          up   1.00000  1.00000
 18    ssd    0.10738          osd.18          up   1.00000  1.00000
-14           0.42950      host Node2-ssd                           
 19    ssd    0.10738          osd.19          up   1.00000  1.00000
 20    ssd    0.10738          osd.20          up   1.00000  1.00000
 21    ssd    0.10738          osd.21          up   1.00000  1.00000
 22    ssd    0.10738          osd.22          up   1.00000  1.00000
-15           0.42950      host Node4-ssd                           
 23    ssd    0.10738          osd.23          up   1.00000  1.00000
 24    ssd    0.10738          osd.24          up   1.00000  1.00000
 25    ssd    0.10738          osd.25          up   1.00000  1.00000
 26    ssd    0.10738          osd.26          up   1.00000  1.00000
 -1         246.07933  root default                                 
 -3          82.02644      host Node1                               
  0    hdd   16.40529          osd.0           up   1.00000  1.00000
  1    hdd   16.40529          osd.1           up   1.00000  1.00000
  2    hdd   16.40529          osd.2           up   1.00000  1.00000
  3    hdd   16.40529          osd.3           up   1.00000  1.00000
  4    hdd   16.40529          osd.4           up   1.00000  1.00000
 -5          82.02644      host Node2                               
  5    hdd   16.40529          osd.5           up   1.00000  1.00000
  6    hdd   16.40529          osd.6           up   1.00000  1.00000
  7    hdd   16.40529          osd.7           up   1.00000  1.00000
  8    hdd   16.40529          osd.8           up   1.00000  1.00000
  9    hdd   16.40529          osd.9           up   1.00000  1.00000
 -7          82.02644      host Node4                               
 10    hdd   16.40529          osd.10          up   1.00000  1.00000
 11    hdd   16.40529          osd.11          up   1.00000  1.00000
 12    hdd   16.40529          osd.12          up   1.00000  1.00000
 13    hdd   16.40529          osd.13          up   1.00000  1.00000
 14    hdd   16.40529          osd.14          up   1.00000  1.00000
[root@Node1 ~]# 

5.5 编辑 crush map rules

CRUSH rules定义了管理数据如何在层次结构中的设备之间分布的策略。这些规则定义了放置以及复制策略或分发策略,允许您准确指定 CRUSH 放置数据副本的方式。

rules的使用主要是用于数据分层,元数据相关的pool放在ssd上,数据相关的pool放在hdd上,以用来提高读写速度。

ceph osd crush rule ls
ceph osd crush rule dump

# 创建crush rule,rule名称是ssd-rule,root=ssd,tpye=host,mode=firstn 
ceph osd crush rule create-simple ssd-rule ssd host firstn
# 创建crush rule,rule名称是hdd-rule,root=default,tpye=host,mode=firstn 
ceph osd crush rule create-simple hdd-rule default host firstn

# 查看一下现在的rule
ceph osd crush rule ls
ceph osd crush rule dump
# 将之前存在过的pool池的crush_rule都修一下
ceph osd pool set .mgr crush_rule ssd-rule

# 删除默认的rule
ceph osd crush rule rm replicated_rule

六、配置RGW Service

6.1 设置radosgw区域和用户

cephadm将radosgw部署为管理特定realm和zone的守护程序的集合。详见:https://docs.ceph.com/en/latest/radosgw/multisite/#multisite

注意,使用cephadm时,radosgw守护程序是通过监视器配置数据库而不是通过ceph.conf或命令行来配置的。 如果该配置尚未就绪(通常在client.rgw。。部分中),那么radosgw守护程序将使用默认设置(例如,绑定到端口80)启动。

1.在Node1、Node2和Node4上部署3个服务于nko领域和nko-shenzhen 区域的rgw守护程序:

# 如果尚未创建 realm,请首先创建一个 realm :
radosgw-admin realm create --rgw-realm=nko
# 接下来创建一个新的 zonegroup:
radosgw-admin zonegroup create --rgw-zonegroup=nko-shenzhen  --master
#接下来创建一个 zone:
radosgw-admin zone create --rgw-zonegroup=nko-shenzhen --rgw-zone=nko-shenzhen-zone1 --master
radosgw-admin period update --rgw-realm=nko --commit

ceph orch apply rgw nko-rgw --realm=nko --zonegroup=nko-shenzhen --zone=nko-shenzhen-zone1 --placement="3 Node1 Node2 Node4"

# 查看各节点 rgw 是否启动
ceph orch ps --daemon-type rgw

# 创建创建 radosgw 用户
radosgw-admin user create --uid="admin" --display-name="admin user"

# 创建完成之后需要把access_key和secret_key保存下来,也可以使用下面的命令来查看
radosgw-admin user info --uid=admin

"keys": [
    {
        "user": "admin",
        "access_key": "IS9K8XGFQ5RA9ZG2K2LH",
        "secret_key": "WSaTwrzjCFD3AAbVJeR13RwjjzHLKAIDMWOg9n0S"
    }
...
]

使用s3 browser,将以上ak sk填上,可以正常连接,但是没有桶,手动创建一个桶,并上传文件,正常。

6.2 修改RGW相关pool的位置

修改pool的位置,将数据相关的pool放到hdd上,其他pool放到ssd上。

[root@Node1 ceph]# ceph df
--- RAW STORAGE ---
CLASS     SIZE    AVAIL     USED  RAW USED  %RAW USED
hdd    246 TiB  246 TiB  525 GiB   525 GiB       0.21
ssd    1.3 TiB  1.3 TiB  451 MiB   451 MiB       0.03
TOTAL  247 TiB  247 TiB  526 GiB   526 GiB       0.21
 
--- POOLS ---
POOL                                  ID  PGS   STORED  OBJECTS     USED  %USED  MAX AVAIL
.mgr                                   1    1  4.8 MiB        2   14 MiB      0    380 GiB
.rgw.root                              2   32  4.7 KiB       17  192 KiB      0    380 GiB
nko-shenzhen-zone1.rgw.log             3   32  3.7 KiB      179  420 KiB      0    380 GiB
nko-shenzhen-zone1.rgw.control         4   32      0 B        8      0 B      0    380 GiB
nko-shenzhen-zone1.rgw.meta            5   32  1.6 KiB       10  108 KiB      0    380 GiB
nko-shenzhen-zone1.rgw.buckets.index   6   32      0 B       11      0 B      0    380 GiB
nko-shenzhen-zone1.rgw.buckets.data    7  512  1.9 KiB        1   12 KiB      0    380 GiB


# 将 nko-shenzhen-zone1.rgw.buckets.data 设置为 hdd-rule
ceph osd pool set nko-shenzhen-zone1.rgw.buckets.data crush_rule hdd-rule


# 将其余的 pool 都修改为 ssd-rule
ceph osd pool set .rgw.root crush_rule ssd-rule
ceph osd pool set nko-shenzhen-zone1.rgw.log     crush_rule ssd-rule
ceph osd pool set nko-shenzhen-zone1.rgw.control crush_rule ssd-rule
ceph osd pool set nko-shenzhen-zone1.rgw.meta    crush_rule ssd-rule
ceph osd pool set nko-shenzhen-zone1.rgw.buckets.index crush_rule ssd-rule

# 关闭 pg 自动调节
ceph osd pool set nko-shenzhen-zone1.rgw.buckets.data pg_autoscale_mode off
ceph osd pool set nko-shenzhen-zone1.rgw.buckets.index pg_autoscale_mode off

# 更改pg数
ceph osd pool set nko-shenzhen-zone1.rgw.buckets.data pg_num 1024
ceph osd pool set nko-shenzhen-zone1.rgw.buckets.data pgp_num 1024

ceph osd pool set nko-shenzhen-zone1.rgw.buckets.index pg_num 128
ceph osd pool set nko-shenzhen-zone1.rgw.buckets.index pgp_num 128

# 关闭动态 resharding
ceph config set global rgw_dynamic_resharding false

# 设置 bucket 最大分片数
ceph config set global rgw_override_bucket_index_max_shards 1023

# 查看相关配置
ceph config dump

# 存入配置中
ceph config assimilate-conf

6.3 配置RGW高可用

新版本的ceph可以使用容器自动部署haproxy+keepalived,所需的只是一个很简单的yaml配置文件。

[root@Node1 ceph]# cat rgw_ingress.yaml 
service_type: ingress
service_id: rgw.nko-rgw           # 与现有的 rgw service id 相一致
placement:
  hosts:
    - Node1
    - Node2
    - Node4
spec:
  backend_service: rgw.nko-rgw   # 与现有的 rgw service id 相一致
  virtual_ip: 172.18.0.36        # 虚拟ip
  frontend_port: 8080            # 进入 ingress 的端口 ,ex: 8080
  monitor_port: 9002             # ex: 1967, used by haproxy for load balancer status
[root@Node1 ceph]# ceph orch apply -i rgw_ingress.yaml 
# 监控运行状态
[root@Node1 ceph]# ceph -W cephadm
[root@Node1 ceph]# ceph log last cephadm

高可用设置完成后,即可使用172.18.0.36:8080这个地址访问s3 存储服务了。

七、部署NFS Service

7.1 设置cephfs

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

ceph fs volume create cephfs --placement="3 Node1 Node2 Node2"
# 查看状态
ceph fs volume ls
ceph orch ps --daemon-type mds
ceph fs status cephfs
ceph mds stat
# 将cephfs的数据文件放到hdd上,元数据放到ssd上
ceph osd pool set cephfs.cephfs.data crush_rule hdd-rule
ceph osd pool set cephfs.cephfs.meta crush_rule ssd-rule

7.2 设置NFS

先生成nfs和nfs_ingress配置文件。其中nfs_ingress是为了nfs高可用配置的。

cat <<EOF > nfs.yaml
service_type: nfs
service_id: nkonfs
placement:
  hosts:
    - Node1
    - Node2
    - Node4
spec:
  port: 2048
EOF

cat <<EOF >nfs_ingress.yaml
service_type: ingress
service_id: nfs.nkonfs
placement:
  count: 3
spec:
  backend_service: nfs.nkonfs
  frontend_port: 2049
  monitor_port: 9001
  virtual_ip: 172.18.0.36/24
EOF

ceph orch apply -i nfs.yaml
ceph orch apply -i nfs_ingress.yaml

# 注意监控运行状态
ceph -W cephadm

ceph orch ls --service_name=nfs.nkonfs
ceph orch ls --service_name=ingress.nfs.nkonfs
ceph nfs cluster ls
ceph nfs cluster info nkonfs

7.3 导出NFS

目前,nfs 界面未与dashboard集成。dashboard和 nfs 界面具有不同的导出要求,并且创建导出的方式也不同。不支持管理dashboard创建的导出。
所以,尽量不要使用 dashboard 创建 nfs 的导出。

[root@Node1 ceph]# ceph nfs export create cephfs --cluster-id nkonfs --pseudo-path /nfs1 --fsname cephfs
# 查看详情
[root@Node1 ceph]# ceph nfs export info nkonfs /nfs1

# 导出桶,事先创建一个名为bucket001的桶
[root@Node1 ceph]# ceph nfs export create rgw --cluster-id nkonfs --pseudo-path /bucketdata --bucket bucket001

各个参数的含义详见官方文档:https://docs.ceph.com/en/reef/mgr/nfs/

7.4 客户端挂载NFS

注意:只支持 NFS v4.0+ 的协议。
由于showmount 不支持 NFS v4,纯 NFSv4又不提供其他获取导出列表的方法,只能期望挂载的时候命令不要输错了。
在客户端执行以下命令:

[root@rhel20 ~] mount -t nfs -o nfsvers=4.1,proto=tcp 172.18.0.36:/nfs1 /mnt/nfs
[root@rhel20 ~] mount -t nfs -o nfsvers=4.1,proto=tcp 172.18.0.36:/bucketdata /mnt/bucket
[root@rhel20 ~] -h                
172.18.0.36:/nfs1           78T     0   78T   0% /mnt/nfs
172.18.0.36:/bucketdata    248T  585G  247T   1% /mnt/bucket

八、配置RBD Service

8.1 配置rbd

ceph osd pool create rbd 128 128  hdd-rule 
ceph osd pool application enable 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'
# output
[client.rbduser]
        key = AQA4T9xktgRlGRAAaxh9Czn4DaCliyvzVONsHw==
vim /etc/ceph/ceph.client.rbd.keyring # 将output填入

rbd create --size 512000 rbd/rbd1
rbd ls rbd
rbd info rbd/rbd1

8.2 客户端挂载rbd

# 在 rbd 客户端挂载rbd
rbd create foo --size 4096 --image-feature layering # 可选参数 [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] [-p {pool-name}]
rbd map foo --name client.admin  # 可选参数  [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] [-p {pool-name}]
mkfs.ext4 -m0 /dev/rbd/rbd/foo 
mkdir /rbd
mount /dev/rbd/rbd/foo /rbd
df -h
/dev/rbd0            3.9G   24K  3.9G   1% /rbd

8.3 配置iSCSI

# 网关
vim iscsi.yaml  # 内容如下
service_type: iscsi
service_id: iscsi
placement:
  hosts:
  - Node1
  - Node2
  - Node4
spec:
  pool: iscsi
  api_port: 5000

ceph orch apply -i iscsi.yaml 

登录 dashboard ,Block-->iSCSI-->Targets,创建一个Target,IQN自动生成既可,Portals 选择 172.18.0.31、 172.18.0.32 和 172.18.0.34 三个入口,Images选择rbd/rbd1,其余默认,点击Create Target。

Target 创建完成后,打开windows 自带的iSCSI发起程序,在目标页输入172.18.0.31(其余两个portal也可),即可连接iSCSI Target了。

连接成功后,就可以在磁盘管理中发现该磁盘了。之后格式化挂载等不再赘述。

九、EC测试

Ceph 提供了一种在存储池中正常复制数据的替代方案,称为纠删存储池或纠删码存储池。纠删码存储池不能提供副本存储池的所有功能(例如,它们无法存储 RBD 存储池的元数据),但其所需的原始存储空间更少。一个能够存储 1 TB 数据的默认纠删码存储池需要 1.5 TB 的原始存储空间,以应对发生单个磁盘故障的情况。从这方面而言,纠删码存储池优于副本存储池,因为后者需要 2 TB 的原始存储空间才能实现相同目的。

# 查看默认的规则
[root@Node2 ~]# ceph osd erasure-code-profile get default
k=2
m=2
plugin=jerasure
technique=reed_sol_van
# 创建一个2+1 的ec pool
[root@Node2 ~]# ceph osd erasure-code-profile set ec21hdd crush-root=default crush-failure-domain=host crush-device-class=hdd k=2 m=1
# 使用该规则创建一个pool
[root@Node2 ~]# ceph osd pool create ecpool 128 128 erasure ec21hdd


ceph osd erasure-code-profile set ec21ssd crush-root=ssd crush-failure-domain=host crush-device-class=ssd k=2 m=1


创建ec规则的相关参数:

  • crush-root:存储数据时放在哪个CRUSH节点上,默认为default
  • crush-failure-domain:分发纠删码分片时使用的 CRUSH 存储桶类型,默认为host
  • crush-device-class:放置数据的设备类型,默认值:none,表示使用所有设备
  • k and m:它们决定了纠删码分片的数量,从而影响生成的 CRUSH 规则
posted @   GustabM  阅读(5445)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示