ceph使用教程


ceph安装命令

[root@node01 ~]# dnf search release-ceph
[root@node01 ~]# dnf install --assumeyes centos-release-ceph-squid
[root@node01 ~]# dnf install --assumeyes cephadm
[root@node01 ~]# CEPH_RELEASE=19.2.3
[root@node01 ~]# curl --silent --remote-name --location https://download.ceph.com/rpm-${CEPH_RELEASE}/el9/noarch/cephadm
[root@node01 ~]# chmod +x cephadm
[root@node01 ~]# curl -o /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-9 https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-9
[root@node01 ~]# ./cephadm add-repo --release 19.2.3
[root@node01 ~]# ./cephadm install

[root@node01 ~]# yum -y install python3-jinja2 python3-yaml
[root@node01 ~]# cephadm bootstrap --mon-ip 192.168.173.201
Ceph Dashboard is now available at:

	     URL: https://node01:8443/
	    User: admin
	Password: 5p176ukk0r

Enabling client.admin keyring and conf on hosts with "admin" label

[root@node01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub node02
[root@node01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub node03

[root@node01 ~]# yum -y install ceph-common-19.2.3
[root@node01 ~]# ceph orch host label add node01 --labels _admin
[root@node01 ~]# ceph orch host add node02 192.168.173.202 --labels osd
[root@node01 ~]# ceph orch host add node03 192.168.173.203 --labels osd

[root@node01 ~]# ceph orch daemon add osd node01:/dev/nvme0n2 
[root@node01 ~]# ceph orch daemon add osd node02:/dev/nvme0n2 
[root@node01 ~]# ceph orch daemon add osd node03:/dev/nvme0n2

# 设置监视器,默认会加入,也可以手动添加
[root@node01 ~]# ceph orch daemon add mon node02
[root@node01 ~]# ceph orch daemon add mon node03
[root@node01 ~]# ceph mon stat
[root@node01 ~]# ceph orch ps --daemon-type mon

1. 主机管理命令

  • 添加节点到ceph集群
# 基础添加(指定节点名、IP)
ceph orch host add node02 192.168.1.102

# 可选:添加时指定标签(用于分组管理,如 osd节点、mon节点)
ceph orch host add node03 192.168.1.103 --labels osd,mon
  • 节点信息查看
# 基础查看(节点名、IP、标签、状态)
ceph orch host ls

# 格式化输出(更清晰,适合脚本解析)
ceph orch host ls --format json-pretty
  • 查看节点上运行的服务
# 查看单个节点的服务(如 node02)
ceph orch ps --host node02

# 查看所有节点的服务分布
ceph orch ps
  • 查看节点磁盘信息(osd相关)
# 列出节点的可用磁盘(用于部署OSD)
ceph orch device ls node02

# 查看磁盘详情(含健康状态)
ceph orch device ls node02 --detail
  • 节点维护模式
# 进入维护模式
ceph orch host maintenance enter node02

# 退出维护模式(维护完成后)
ceph orch host maintenance exit node02
  • 修改节点标签
# 添加标签(如给node02添加osd标签)
ceph orch host label add node02 osd

# 删除标签(如移除node02的mon标签)
ceph orch host label rm node02 mon

# 查看节点标签
ceph orch host ls --host node02
  • 更新节点上的ceph版本
# 升级单个节点的所有服务
ceph orch upgrade start --host node02 --image quay.io/ceph/ceph:v20.2.0

# 升级集群所有节点(全量升级)
ceph orch upgrade start --image quay.io/ceph/ceph:v20.2.0
  • 删除节点
# 1. 进入维护模式(迁移服务)
ceph orch host maintenance enter node02

# 2. 移除节点(删除集群中的节点记录)
ceph orch host rm node02

# 3. 可选:清理节点上的Ceph残留(在node02本地执行)
cephadm rm-cluster --fsid $(ceph fsid) --force

# 强制移除节点(紧急场景,慎用)
ceph orch host rm node02 --force

2. osd管理命令

  • osd创建
# 指定节点+磁盘创建(如 node01 的 nvme0n2)
ceph orch daemon add osd node01:/dev/nvme0n2

# 批量创建(为节点所有可用磁盘创建 OSD)
ceph orch apply osd --all-available-devices --placement="node01,node02"
  • 验证创建结果
ceph osd ls          # 列出所有 OSD 编号(如 osd.0、osd.1)
ceph osd tree        # 查看 OSD 拓扑(节点-OSD 对应关系、状态)
  • 基础状态查看
# 查看所有 OSD 状态(up/down、in/out、权重等)
ceph osd status
# 简写:ceph osd stat

# 查看 OSD 详细拓扑(含节点、磁盘、状态、权重)
ceph osd tree

# 查看单个 OSD 信息(如 osd.0)
ceph osd info osd.0
  • 性能/健康查看
# 查看 OSD 性能指标(吞吐量、IOPS、延迟)
ceph osd perf

# 查看 OSD 磁盘使用情况(容量、使用率)
ceph osd df
# 格式化输出(更清晰)
ceph osd df --format json-pretty
  • 查看osd对应的磁盘/进程
# 查看 OSD 进程分布(节点、PID、磁盘路径)
ceph orch ps --daemon-type osd

# 查看节点上的 OSD 磁盘映射(如 node01)
ceph orch device ls node01 --detail | grep -A5 "osd."
  • osd维护操作
# 先将 OSD 标记为 out,Ceph 会自动迁移该 OSD 上的数据到其他 OSD,避免数据丢失
# 标记单个 OSD 为 out(如 osd.0)
ceph osd out osd.0

# 批量标记(如 osd.0、osd.1)
ceph osd out osd.0 osd.1

# 停止 OSD(如 osd.0)
ceph orch daemon stop osd.0

# 启动 OSD
ceph orch daemon start osd.0

# 重启 OSD
ceph orch daemon restart osd.0

# 重启节点上所有 OSD(如 node01)
ceph orch daemon restart osd --host node01

# OSD 标记为「in」(维护完成后恢复)
ceph osd in osd.0

# # 设置 OSD 权重(如 osd.0 权重为 1.0,默认 1.0)
ceph osd crush set osd.0 1.0 host=node01

# 查看 OSD 权重
ceph osd crush tree

# 安全删除 OSD(推荐)
# 步骤 1:标记 OSD 为 out(迁移数据)
ceph osd out osd.0

# 步骤 2:停止 OSD 进程
ceph orch daemon stop osd.0

# 步骤 3:从集群中删除 OSD
ceph osd rm osd.0

# 步骤 4:删除 OSD 认证密钥(可选,清理残留)
ceph auth del osd.0

# 步骤 5:从 CRUSH 映射中移除 OSD
ceph osd crush rm osd.0

# 强制删除 OSD(紧急场景,慎用)
ceph osd rm osd.0 --force
  • OSD 故障排查常用命令
# 查看 OSD 错误日志
ceph logs --name osd.0

# 检查 OSD 心跳状态
ceph osd ping osd.0

# 查看集群健康状态(重点关注 OSD 相关告警)
ceph health detail

3. 存储池相关命令

  • 创建存储池
# 先创建 RBD 存储池(若未创建)
ceph osd pool create rbd 128 128  # 128为PG/PGP数量,测试环境可设小些
rbd pool init rbd  # 初始化 RBD 存储池

3.1 rbd块存储

  • 创建 RBD 映像
# 基础创建:创建名为 demo.img、大小 10GB 的映像(默认池 rbd)
rbd create demo.img --size 10G

# 指定存储池创建:在 pool1 池中创建 test.img,大小 20GB
rbd create pool1/test.img --size 20G

# 高级创建:指定块大小(4M)、特性(如开启分层)
rbd create demo2.img --size 5G --object-size 4M --features layering
  • 查看 RBD 映像
# 查看默认池(rbd)所有映像
rbd ls

# 查看指定池的映像
rbd ls pool1

# 查看映像详细信息(如 demo.img)
rbd info demo.img

# 查看指定池的映像信息
rbd info pool1/test.img

# 查看映像占用空间(含快照)
rbd du demo.img
  • 修改映像大小(扩容 / 缩容)
# 扩容:将 demo.img 扩容到 15GB
rbd resize demo.img --size 15G

# 缩容:将 demo.img 缩容到 8GB(需先卸载并确保数据已迁移,慎用)
rbd resize demo.img --size 8G --allow-shrink

# 查看扩容/缩容结果
rbd info demo.img
  • 删除 RBD 映像
# 删除默认池的 demo.img
rbd rm demo.img

# 删除指定池的映像
rbd rm pool1/test.img

# 强制删除(映像被占用时,慎用)
rbd rm demo.img --force
  • 创建快照
# 为 demo.img 创建名为 snap1 的快照
rbd snap create demo.img@snap1

# 一次性创建带时间戳的快照(便于管理)
rbd snap create demo.img@$(date +%Y%m%d_%H%M%S)
  • 查看快照
# 查看 demo.img 的所有快照
rbd snap ls demo.img

# 查看快照详细信息
rbd info demo.img@snap1
  • 恢复快照
# 将 demo.img 恢复到 snap1 快照状态(需先卸载映像)
rbd snap rollback demo.img@snap1
  • 删除快照
# 删除单个快照
rbd snap rm demo.img@snap1

# 删除所有快照(批量清理)
rbd snap purge demo.img
  • 快照设置为保护状态,方便后续克隆
# 为快照 snap1 开启保护(防止快照被删除)
rbd snap protect demo.img@snap1

# 取消保护(如需删除快照)
rbd snap unprotect demo.img@snap1
  • 创建克隆映像
# 从 demo.img@snap1 克隆出 new_demo.img
rbd clone demo.img@snap1 new_demo.img

# 指定存储池克隆
rbd clone demo.img@snap1 pool1/clone_demo.img
  • 查看克隆关系
# 查看映像的父快照(确认克隆来源)
rbd info new_demo.img | grep parent
  • 扁平化克隆(脱离父快照,独立存储)
# 扁平化 new_demo.img
rbd flatten new_demo.img

# 查看扁平化结果(parent 字段消失)
rbd info new_demo.img
  • 映射映像到本地设备
# 映射 demo.img 到本地(生成 /dev/rbd0 设备)
rbd map demo.img

# 指定用户/密钥映射(非 root 用户)
rbd map demo.img --name client.admin --keyring /etc/ceph/ceph.client.admin.keyring

# 查看映射关系
rbd showmapped
  • 格式化并挂载映像
# 格式化映像(ext4 文件系统)
mkfs.ext4 /dev/rbd0

# 挂载到 /mnt/rbd 目录
mount /dev/rbd0 /mnt/rbd
  • 卸载并取消映射
# 先卸载
umount /mnt/rbd

# 取消映射
rbd unmap /dev/rbd0

# 强制取消映射(设备被占用时)
rbd unmap /dev/rbd0 --force

3.1.1 iscsi挂载

  • 纯 targetcli 实现 RBD → iSCSI(无需 ceph-iscsi)
dnf install -y targetcli python3-kmod python3-pyparsing

# 映射 demo.img(默认 rbd 池)
rbd map demo.img

# 验证映射结果(输出 /dev/rbd0 即成功)
rbd showmapped

# 进入交互式界面
targetcli
  • 进入 targetcli 后执行:
# 1. 创建块存储后端(关联 RBD 映射的设备 /dev/rbd0)
/backstores/block create demo_iscsi /dev/rbd0

# 2. 创建 iSCSI 目标名称(格式固定,可自定义后半段)
/iscsi create iqn.2026-03.com.ceph:demo-rbd

# 3. 为 iSCSI 目标添加 LUN(关联第一步的块存储)
/iscsi/iqn.2026-03.com.ceph:demo-rbd/tpg1/luns create /backstores/block/demo_iscsi

# 4. 关闭认证(测试环境简化,生产可加 CHAP)
/iscsi/iqn.2026-03.com.ceph:demo-rbd/tpg1 set attribute authentication=0 demo_mode_write_protect=0 generate_node_acls=1 cache_dynamic_acls=1

# 5. 允许所有客户端访问(测试用,生产可指定客户端 IQN)
/iscsi/iqn.2026-03.com.ceph:demo-rbd/tpg1/acls create ANY

# 6. 保存配置(重启后不丢失)
saveconfig

# 7. 退出
exit
  • 启动并配置 iSCSI 服务自启
# 启动 target 服务(即 iSCSI 目标服务)
systemctl enable --now target

# 验证服务状态(active (running) 即正常)
systemctl status target
  • windows使用iscsi发起程序连接iscsi

image-20260302144643469

  • 关键验证与维护命令
# 查看 iSCSI 配置(确认目标和 LUN 已创建)
targetcli ls

# 查看当前 iSCSI 连接(Windows 连接后可看到会话)
targetcli /iscsi/iqn.2026-03.com.ceph:demo-rbd/tpg1/connections ls

# 停止/重启 iSCSI 服务
systemctl stop target
systemctl restart target

# 取消 RBD 映射(如需卸载)
rbd unmap /dev/rbd0

4. 对象存储

  • Ceph 对象存储依赖 RGW 守护进程和专用存储池,先完成基础部署
# 1. 创建 RGW 所需存储池(默认池名,也可自定义)
ceph osd pool create default.rgw.buckets.data 8 8
ceph osd pool create default.rgw.control 8 8
ceph osd pool create default.rgw.meta 8 8
ceph osd pool create default.rgw.log 8 8

# 2. 创建 RGW 服务,指定部署节点为 node01,服务名自定义为 rgw.node01
ceph orch daemon add rgw node01:rgw.node01

# 查看 RGW 服务状态(确认服务已创建)
ceph orch ls | grep rgw

# 查看 RGW 守护进程(确认 node01 上已启动)
ceph orch ps --daemon-type rgw
  • 重启 / 停止 / 删除 RGW 网关
# 重启指定 RGW 进程(如 rgw.node01)
ceph orch daemon restart rgw.node01

# 停止 RGW 进程
ceph orch daemon stop rgw.node01

# 删除 RGW 进程(如需重新部署)
ceph orch daemon rm rgw.node01
  • 配置 RGW 端口 / 域名(自定义)
# 修改 RGW 监听端口(默认 8080,改为 80)
ceph config set rgw rgw_frontends "civetweb port=80"

# 配置 RGW 域名(如 s3.ceph.com)
ceph config set rgw rgw_dns_name s3.ceph.com

# 重启 RGW 使配置生效
ceph orch daemon restart rgw.node01
  • 创建 S3 协议用户(最常用)
# 创建名为 s3-user1 的用户,指定所属租户(默认 default)
radosgw-admin user create --uid="s3-user1" --display-name="S3 User 1"

# 输出示例(关键信息:access_key/secret_key,用于客户端连接):
# "access_key": "554Z2786E8824792980C",
# "secret_key": "87654321ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  • 查看用户信息
# 查看单个用户详情
radosgw-admin user info --uid="s3-user1"

# 列出所有用户
radosgw-admin user list

# 查看用户的桶/配额等统计信息
radosgw-admin user stats --uid="s3-user1"
  • 修改用户信息(重置密钥 / 显示名)
# 重置用户的 S3 密钥
radosgw-admin key create --uid="s3-user1" --key-type="s3" --gen-access-key --gen-secret-key

# 修改用户显示名
radosgw-admin user modify --uid="s3-user1" --display-name="New S3 User 1"
  • 删除用户
# 先删除用户的所有桶(否则删除失败)
radosgw-admin bucket rm --bucket="user1-bucket" --uid="s3-user1"

# 删除用户
radosgw-admin user rm --uid="s3-user1"
  • 创建桶(两种方式)
  • 方式 1:通过 radosgw-admin(服务端)
radosgw-admin bucket create --bucket="test-bucket" --uid="s3-user1"
  • 方式 2:通过 s3cmd(客户端,需先安装)
# 安装 s3cmd
dnf install -y s3cmd

# 配置 s3cmd(填入 access_key/secret_key 和 RGW 地址)
s3cmd --configure

# 创建桶
s3cmd mb s3://test-bucket
  • 查看桶信息
# 列出所有桶
radosgw-admin bucket list

# 查看单个桶详情
radosgw-admin bucket info --bucket="test-bucket"

# 查看桶内对象
s3cmd ls s3://test-bucket
  • 设置桶配额(限制大小 / 对象数)
# 为桶设置配额:最大 10GB,最多 1000 个对象
radosgw-admin bucket quota set --bucket="test-bucket" --max-size=10G --max-objects=1000

# 查看桶配额
radosgw-admin bucket quota get --bucket="test-bucket"
  • 删除桶
# 空桶直接删除
radosgw-admin bucket rm --bucket="test-bucket" --uid="s3-user1"

# 非空桶强制删除(先删对象再删桶)
s3cmd rm --recursive s3://test-bucket
radosgw-admin bucket rm --bucket="test-bucket" --uid="s3-user1"
  • 对象(Object)管理
  • 上传 / 下载 / 删除对象
# 上传本地文件到桶(s3cmd 方式)
s3cmd put local-file.txt s3://test-bucket/remote-file.txt

# 下载桶内对象到本地
s3cmd get s3://test-bucket/remote-file.txt local-file-download.txt

# 删除桶内对象
s3cmd rm s3://test-bucket/remote-file.txt

# 批量删除桶内所有对象
s3cmd rm --recursive s3://test-bucket/
  • 查看对象元数据
# 查看单个对象元数据
s3cmd info s3://test-bucket/remote-file.txt

# 服务端查看对象信息
radosgw-admin object info --bucket="test-bucket" --object="remote-file.txt"
  • 权限与配额管理
  • 设置用户全局配额
# 限制用户 s3-user1 最大存储 50GB,最多 5000 个对象
radosgw-admin user quota set --uid="s3-user1" --max-size=50G --max-objects=5000

# 查看用户配额
radosgw-admin user quota get --uid="s3-user1"
  • 配置桶访问权限(公开 / 私有)
# 设置桶为公有读(所有人可下载对象)
s3cmd setacl s3://test-bucket --acl-public

# 设置桶为私有(仅用户自己访问)
s3cmd setacl s3://test-bucket --acl-private

# 给指定用户授予桶的读写权限
s3cmd setacl s3://test-bucket --acl-grant=write:another-user-uid --uid="s3-user1"
  • 故障排查常用命令
# 查看 RGW 日志(定位连接/权限错误)
ceph logs --name rgw.node01

# 检查 RGW 存储池状态
ceph osd pool stats default.rgw.buckets.data

# 修复 RGW 元数据不一致
radosgw-admin bucket sync --bucket="test-bucket"

文章作者: AaronXu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AaronXu !
评论
  目录