块存储(RBD)
核心概念
- RADOS 块设备提供虚拟块设备,以镜像形式存储在池中,支持精简配置、快照、克隆
- 数据默认按 4 MiB 切分为对象,对象命名
rbd_data.<image-id>.<object-seq> - I/O 流程:librbd → pool → rbd image → object → PG → CRUSH 映射到 OSD → 主 OSD 写入副本
常用命令
| 命令 | 功能 |
|---|---|
rbd create |
创建块设备镜像 |
rbd ls |
列出池中镜像 |
rbd info |
查看镜像详细信息 |
rbd map/unmap |
映射/取消映射为本地块设备 |
rbd showmapped |
查看已映射设备 |
rbd resize |
调整镜像大小 |
rbd rm |
删除镜像 |
rbd trash mv/ls/restore/rm |
垃圾箱管理 |
镜像功能(Features)
- layering、striping、exclusive-lock、object-map、fast-diff、deep-flatten、journaling、data-pool
- 默认启用:
layering, exclusive-lock, object-map, fast-diff, deep-flatten
访问方式
- KRBD(内核模块) :
rbd map映射为/dev/rbdX,可格式化挂载;持久化需配置/etc/ceph/rbdmap和/etc/fstab,启用rbdmap.service - librbd:用户空间库,供 QEMU/KVM、OpenStack 等使用,支持 COW/COR
缓存
- 位于客户端内存(librbd),模式:
writearound(默认)、writeback、writethrough - 关键参数:
rbd_cache、rbd_cache_size、rbd_cache_max_dirty等
快照
- 创建:
rbd snap create <pool>/<td>@<snap> - 列出:
rbd snap ls - 回滚:
rbd snap rollback(需先卸载映射) - 删除:
rbd snap rm或rbd snap purge - 存在快照时无法删除镜像,快照为只读
克隆
- 基于受保护的快照创建可写克隆
- 步骤:创建快照 →
rbd snap protect→rbd clone - COW(写时复制)默认支持;COR(读时复制)需启用
rbd_clone_copy_on_read - 扁平化:
rbd flatten将克隆转为独立镜像
导入导出
rbd export/rbd import:完整镜像导入导出rbd export-diff/rbd import-diff:增量导入导出(基于快照)rbd diff:比较两个时间点之间的差异块
镜像(Mirroring)
- 用于两个集群间异步复制,支持单向(主动-被动)或双向(主动-主动)
- 模式:池模式(自动镜像池内所有镜像)或镜像模式(选择性启用)
- 基于日志或基于快照实现
- 关键命令:
rbd mirror pool enable/disable,rbd mirror pool peer bootstrap create/import
对象存储(RGW)
基础概念
- 对象由 Key(对象名)、Metadata(元数据)、Data(数据内容)组成
- 桶/容器为扁平命名空间,无目录树结构
- 访问协议:Amazon S3 和 OpenStack Swift(兼容大部分 API)
RADOS 网关架构
- 守护进程:
radosgw(基于 Beast HTTP 库) - 域(realm)→ 区域组(zonegroup)→ 区域(zone)→ 期间(period)跟踪配置版本
- 默认池:
.rgw.root、.default.rgw.control、.default.rgw.meta、.default.rgw.log、.default.rgw.buckets.index、.default.rgw.buckets.data
部署
- 创建 realm/zonegroup/zone:
radosgw-admin realm create、zonegroup create、zone create - 部署网关服务:
ceph orch apply rgw <name> --realm=<name> --zone=<name> --port=<port> - 支持 YAML 服务规范文件(placement、count、rgw_frontend_port)
- 删除服务:
ceph orch rm rgw.<id>(不删除池中数据)
用户管理
- 创建用户:
radosgw-admin user create --uid=<id> --display-name=<name> [--access-key --secret] - 查看/列表:
radosgw-admin user info / user list - 密钥管理:
radosgw-admin key create/rm - 启用/禁用用户:
radosgw-admin user enable/suspend - 子用户(用于 Swift):
radosgw-admin subuser create
S3 接口访问
- 客户端:
awscli(pip 安装) - 配置:
aws configure设置 access_key/secret_key - 常用操作:
aws s3 mb(创建桶)、cp(上传/下载)、rm、ls、rb(删除桶) - 匿名访问:
wget http://<rgw-host>:<port>/<bucket>/<object>
Swift 接口访问
- 客户端:
python-swiftclient(pip 安装) - 环境变量:
ST_AUTH、ST_USER、ST_KEY(v1.0)或OS_*(v2.0) - 常用命令:
swift post(创建容器)、upload、download、list、delete
配额管理
- 用户配额:
radosgw-admin quota set --quota-scope=user --uid=<id> --max-objects=<n> --max-size=<bytes> - 桶配额:
--quota-scope=bucket --bucket=<name> - 全局配额:
radosgw-admin global quota set --quota-scope=user/bucket - 启用/禁用:
radosgw-admin quota enable/disable
多站点对象网关
- 用于跨集群主动/主动复制,灾难恢复
- 元数据操作由主区域管理,数据操作为增量同步
- 配置步骤:
- 主集群创建 realm、zonegroup、zone,创建系统用户并绑定
- 备集群拉取 realm 配置:
radosgw-admin realm pull - 备集群创建非 master zone,部署 RGW
- 验证同步:
radosgw-admin sync status
- 故障转移:提升次要区域为主区域
radosgw-admin zone modify --master
文件系统(CephFS)
概述
- POSIX 兼容的分布式文件系统,基于 librados
- MDS(元数据服务器)管理目录层次结构、文件元数据、客户端缓存一致性
- 运行模式:活动 MDS + 备用 MDS(高可用)
- 支持多文件系统(需多个 MDS)
部署
- 手动部署 :
- 创建数据池和元数据池(至少各一个)
ceph fs new <fs_name> <metadata_pool> <data_pool>ceph orch apply mds <fs_name> --placement="<hosts>"
- 卷部署 (简化):
ceph fs volume create <fs_name> --placement="..."
挂载
- Kernel 挂载 :
- 命令:
mount.ceph <mon_ip>:/ /mnt/cephfs -o name=<client_id>,fs=<fs_name> - 支持子目录挂载:
mount.ceph <mon_ip>:/subdir ... - 持久化:
/etc/fstab添加条目,选项_netdev
- 命令:
- FUSE 挂载 :
- 安装
ceph-fuse - 命令:
ceph-fuse -n client.<id> -r /subdir /mnt/cephfs - 支持配额和 ACL(需配置
user_allow_other)
- 安装
用户授权
ceph fs authorize <fs_name> client.<id> <path> <perms>- 权限:
r(读)、w(写)、p(布局/配额)、s(快照) - 示例:
ceph fs authorize cephfs1 client.myuser / rw
快照
- 存储在目录下的
.snap隐藏目录中 - 启用/停用快照:
ceph fs set <fs_name> allow_new_snaps true/false - 创建快照:在
.snap下创建子目录(如mkdir /mnt/cephfs/.snap/snap1) - 恢复文件:从
.snap/<snap_name>/复制 - 删除快照:
rmdir /mnt/cephfs/.snap/<snap_name>
CephFS 镜像(Mirroring)
- 用于两个集群间异步复制,基于快照实现增量同步
- 前提:源和目标集群均 ≥ Pacific (v16.2.0)
- 配置步骤:
- 源集群部署 cephfs-mirror 守护进程:
ceph orch apply cephfs-mirror <host> - 目标集群创建专用用户:
ceph fs authorize cephfs client.cephfs-mirror / rwps - 两端启用 mirroring 模块:
ceph mgr module enable mirroring - 源集群启用文件系统镜像:
ceph fs snapshot mirror enable <fs_name> - 目标集群创建引导令牌,源集群导入令牌
- 指定需要镜像的目录:
ceph fs snapshot mirror add <fs_name> <path>
- 源集群部署 cephfs-mirror 守护进程: