精读笔记(RHCA 英文教材)· CL260 Chapter 7 Expanding Block Storage Operations
精读笔记(RHCA 英文教材)· CL260 Chapter 7 Expanding Block Storage Operations
教材原文:RHCA 官方英文教材(PDF 第 249~280 页)(OCR 整书版已从本站移除,本页为章节精读) 关联知识:Ch6(RBD 基础)、RH436 的 iSCSI/multipath 概念;
00-RHCA教材精读-导航与学习法.md
Chapter Goal / Objectives(原文+译)
- GOAL: Expand block storage operations: cross-cluster disaster recovery and iSCSI export(RBD 镜像容灾 + iSCSI 网关导出).
- OBJECTIVES: ① 配置 RBD 镜像在两集群间复制(容灾);② 配置 Ceph iSCSI Gateway 用 iSCSI 协议导出 RBD、并配置客户端。
- 结构:两个 Section + Guided Exercise(镜像)+ Quiz + 章末 Lab(
lab grade mirror-review)。
7.1 Configuring RBD Mirrors(跨集群容灾)
基本概念
- rbd-mirror daemon 把 primary(源)映像复制到远端集群的 secondary(目标)映像;源不可用时 demote/promote 切换,重启应用继续读写。
- 镜像方向:
- One-way / active-passive:只单向往备份集群同步,rbd-mirror 只需跑在远端;可配多个二级集群;对端导入用
--direction rx-only。源集群不感知复制状态(status 只由目标侧 agent 更新)。 - Two-way / active-active:两集群互为主备(成对 primary/secondary),agent 两端都要跑;只支持两个集群。
- One-way / active-passive:只单向往备份集群同步,rbd-mirror 只需跑在远端;可配多个二级集群;对端导入用
- 镜像模式:
- Pool mode:池里每个新映像自动开镜像(源端建映像→远端自动生成 secondary);
- Image mode:池内选择性对个别映像开镜像(
rbd mirror image enable/disable)。
- 镜像类型:
- Journal-based(默认,需映像带
exclusive-lock,journaling特性):基于 RBD journal 的时间点/崩溃一致复制,写操作先记 journal,远端读取回放; - Snapshot-based:定时/手动建 mirror snapshot,远端用 fast-diff 快速找两快照间的增量(免全盘扫描)再复制;故障切换前必须把两快照间完整增量同步完,半截增量在 failover 时自动回滚。
- Journal-based(默认,需映像带
- 状态不一致时 agent 不会镜像该映像,用
rbd mirror image resync POOL/IMG重新同步。
配置步骤(prod → backup,one-way pool mode 实例)
# 两端都建同名池(prod 上操作)
ceph osd pool create rbd 32 32 && ceph osd pool application enable rbd rbd && rbd pool init -p rbd
rbd create rbd/my-image --size 1024 --image-feature=exclusive-lock,journaling # 镜像前提特性
rbd mirror pool enable rbd pool # pool mode;image mode 则逐个 enable
rbd info rbd/my-image # 看 features: exclusive-lock,journaling;mirroring state/mode
# prod:引导生成 peer 令牌并拷给 backup
rbd mirror pool peer bootstrap create --site-name prod rbd > /mnt/bootstrap_token_prod
rsync -avp /mnt/bootstrap_token_prod backup-node:/home/admin/token/
# backup:建同名池 → 部署 rbd-mirror daemon → 导入令牌
ceph osd pool create rbd 32 32 && ceph osd pool application enable rbd rbd && rbd pool init -p rbd
ceph orch apply rbd-mirror --placement=backup-node.example.com
cephadm shell --mount /home/admin/token/
rbd mirror pool peer bootstrap import --site-name backup --direction rx-only rbd /mnt/bootstrap_token_prod
# 验证
rbd -p rbd ls # 已自动出现 my-image(secondary)
rbd mirror pool info rbd # Mode/Site Name/Peer(UUID+Name+Direction+client)
rbd mirror pool status # health/daemon health/image health、1 replaying- 注意:每个 rbd-mirror daemon 要同时连两端集群;two-way 要两端都 apply rbd-mirror。
Failover 流程
# 1) 停掉所有使用 primary 的应用/虚拟机
rbd mirror image demote rbd/my-image # 源降级(被锁、不可写)
rbd mirror image promote rbd/my-image # 目标升级(可读写)→ 重开应用- 非正常关停后的 failover:demote 无法传到源集群 → 到 backup 集群的 MON 节点上对非 primary 映像用
rbd mirror image promote --force rbd/my-image。
实验要点 · Guided Exercise + Lab(lab: mirror-review)
GE:两集群各建 rbd 池 → prod 开 pool-mode 与 image-mode 镜像 → 生成/导入 bootstrap token → 部署 rbd-mirror daemon → rbd mirror pool status 验证 1 replaying → 在源写数据、对端看到复制 → 练习 demote/promote。Lab:完整 one-way pool-mode 双集群镜像 + lab grade mirror-review。
7.2 Providing iSCSI Block Storage
iSCSI 网关原理
- 客户端(initiator)用 iSCSI(SCSI over TCP/IP)访问 target;双方用 IQN 唯一标识。普通标准 iSCSI 发起端无需 Ceph 原生 RBD 客户端即可用集群存储。
- 网关内核用 TCM/LIO iSCSI target 子系统;**TCMU(user-space pass-through)**把 librbd 暴露给 iSCSI 客户端。
- 网关可独立节点部署也可与 OSD 共置;RHEL8.3+ 与 RHCS5+;每映像建议预留 90MiB RAM。
- OSD 侧 iSCSI 专属调优(降低客户端 SCSI 超时感知):缩小 OSD 故障检测时间窗:
ceph config set osd osd_heartbeat_interval 5
ceph config set osd osd_heartbeat_grace 20
ceph config set osd osd_client_watch_timeout 15部署网关(服务规格文件)
service_type: iscsi
service_id: iscsi
placement: { hosts: [serverc.lab.example.com, servere.lab.example.com] }
spec:
pool: iscsipool1
trusted_ip_list: "172.25.250.12,172.25.250.14" # 允许调用网关 API 的主机
api_port: 5000
api_secure: false
api_user: admin
api_password: redhatceph orch apply -i /etc/ceph/iscsi-gateway.yaml # Scheduled iscsi.iscsi update
ceph dashboard iscsi-gateway-list # 验证网关 URL(http://admin:redhat@IP:5000)- 之后在 Dashboard → Block → iSCSI(或
gwcli工具)创建 target:Target IQN → +Add portal(至少两个网关)→ +Add image → Create Target。
客户端配置(多网关 + multipath)
yum install iscsi-initiator-utils device-mapper-multipath
mpathconf --enable --with_multipathd y # 启用并生成默认 multipath 配置
# /etc/multipath.conf 增加 LIO-ORG 设备段:
# vendor "LIO-ORG" hardware_handler "1 alua" path_grouping_policy "failover"
# path_selector "queue-length 0" path_checker tur prio alua no_path_retry queue
systemctl reload multipathd
# /etc/iscsi/iscsid.conf:CHAP 认证(若网关启用)
# node.session.auth.authmethod = CHAP
# node.session.auth.username = user
# node.session.auth.password = password
iscsiadm --mode discovery --type sendtargets --portal 10.30.0.210:3260 # 发现两个门户
iscsiadm --mode node --targetname iqn.2001-07.com.ceph:1634089632951 --portal 10.30.0.210:3260 --login
lsblk && multipath -ll # 多网关 → /dev/mapper/mpatha(LIO-ORG,TCMU device,两 path 两个 prio)- 单网关(测试):会生成普通物理设备
/dev/sdX,可跳过 multipath;多网关必须 multipath:Device Mapper 生成mpatha虚拟设备,路径故障自动切到另一条(active/enabled 两 priority group)。
命令速查表(本章)
| 命令 | 作用 | | rbd mirror pool enable POOL pool\|image | 开 pool/image 模式镜像 | | rbd mirror image enable\|disable POOL/IMG [snapshot] | 单映像镜像开关(snapshot 切快照型) | | rbd mirror pool peer bootstrap create --site-name SITE POOL | 生成 peer 引导令牌 | | rbd mirror pool peer bootstrap import --site-name SITE [--direction rx-only] POOL TOKEN | 对端导入令牌 | | ceph orch apply rbd-mirror --placement=HOST | 部署 rbd-mirror daemon | | rbd mirror pool info/status POOL | peer/模式与同步健康 | | rbd mirror image demote/promote POOL/IMG [--force] | 降级/升级主备映像(切换) | | rbd mirror image resync POOL/IMG | 状态不一致时重同步 | | ceph orch apply -i iscsi-gateway.yaml | 部署 iSCSI 网关服务 | | ceph dashboard iscsi-gateway-list | 列网关与 API URL | | iscsiadm -m discovery -t sendtargets -p IP:3260 | 发现 target | | iscsiadm -m node -T IQN -p IP:3260 --login | 登录 target | | mpathconf --enable --with_multipathd y / multipath -ll | 启用/查看 multipath |
词汇表(本章)
| 英文术语 | 中文 | 一句话速记 |
|---|---|---|
| rbd-mirror | 块镜像守护进程 | 跨集群异步复制 RBD 映像 |
| primary / secondary | 主映像/备映像 | 源可读写、备同步;failover 时 promote |
| one-way / two-way | 单向/双向镜像 | active-passive(可多备)vs active-active(仅两集群) |
| pool mode / image mode | 池模式/映像模式 | 全池自动 vs 单映像选择 |
| journal-based / snapshot-based | 日志型/快照型镜像 | 崩溃一致实时 vs 周期快照+fast-diff 增量 |
| exclusive-lock / journaling | 排他锁/日志特性 | 镜像映像必备 feature |
| bootstrap token | 引导令牌 | 一键注册 peer+账号(client.rbd-mirror-peer) |
| promote / demote | 升级/降级 | 故障切换的核心动作(--force 用于非正常关停) |
| resync | 重新同步 | 手工修复不一致映像 |
| iSCSI initiator/target | 发起端/目标端 | IQN 标识,SCSI over TCP/IP |
| IQN | iSCSI 限定名 | iqn.2001-07.com.ceph:<id> |
| TCM / TCMU | 内核 target 子系统/用户态透传 | LIO 内核态 + librbd 用户态桥接 |
| trusted_ip_list | 可信 API 主机列表 | 网关 REST API 白名单 |
| CHAP | 双向挑战握手认证 | iSCSI 用户名/密码认证 |
| multipath | 多路径 | 多网关/多链路 → mpatha 虚拟设备自动切换 |
自测
- one-way 与 two-way 镜像对 rbd-mirror daemon 部署位置的要求差异?哪种支持多个二级集群?
- pool mode 与 image mode 的取舍;journal 型与 snapshot 型的 crash 一致性/开销差异?
- 建可镜像映像必须带哪两个 feature?镜像后
rbd info里会多出哪些镜像字段? - bootstrap token 完成了几件事(peer 注册+自动建账号)?rx-only 用在哪一侧?
- 源集群为什么在 one-way 模式下
rbd mirror pool status是 UNKNOWN?(agent 在目标侧) - 写出正常 failover 与“非正常关停”failover 的命令差异(--force + 在哪台跑)?
- resync 什么时候用?快照型镜像 failover 前必须满足什么条件(完整增量同步)?
- iSCSI 网关把 librbd 暴露给普通 initiator 依赖内核哪个子系统(TCM/TCMU)?为什么要调 osd_heartbeat_*?
- iscsi-gateway 规格文件里 trusted_ip_list/api_port/api_user 的意义?部署后怎么在 Dashboard 建 target?
- 客户端单网关与多网关的设备形态差异(/dev/sdX vs mpatha)?multipath.conf 里 LIO-ORG 段至少配哪几项?
