Swift 对象存储建环实验 + Ceilometer 计量:两个收尾服务

来源:《OpenStack 管理手册》对象存储章节 + PPT《09 OpenStack 计量管理》。

Swift 之前只讲过概念(三兄弟、三大关键技术),这篇补上真正的重头------建环实验:给 Swift 加盘、建 Ring、验证多副本。Ceilometer 只有理论,一节讲透。

一、Swift 定位补全:它不是文件系统

之前讲过:Swift 是对象存储,与 Cinder(块存储)、Manila(文件存储)并列持久存储三兄弟。补三条容易忽略的定位描述:

  1. Swift 不是文件系统、也不是实时数据存储系统------它面向「永久类型的静态数据」的长期存储,这些数据可以检索、调整、必要时更新,但不适合频繁改写的场景;
  2. 最适合存的数据:虚拟机镜像、图片、邮件存储、存档备份;
  3. 没有中心单元或主控节点------这是 Swift 扩展性、冗余和持久性更强的根本原因(对比:传统存储总有单点)。

常用观察命令:swift stat------显示 Swift 中的账户、容器和对象的信息。

二、Ring:三张映射表

Swift 为账户、容器、对象分别定义了 Ring(环):

Ring 对应服务端口 管什么
Account Ring 6002 账户(租户)级映射
Container Ring 6001 容器(对象的组织单元)级映射
Object Ring 6000 对象(真正的数据)级映射

Ring 记录了存储对象与物理位置的映射关系 ,通过四个要素维护:Zone(区域)、Device(设备)、Partition(分区)、Replica(副本)------把虚拟节点(分区)映射到一组物理存储设备上。

对照记忆:上篇 Heat 的 HOT 模板是「一份描述反复建资源」,Ring 是「一张映射表反复找位置」------分布式系统都用「先算后找」代替「中心查询」。

三、建环实验:给 Swift 加两块「真磁盘」

实验环境里 Swift 默认挂的是一个虚拟回环设备(swiftloopback)。实验目标是:加一块 20GB 新盘,分两个区做两个存储点,让 2 副本真的落在两个不同的分区上。

3.1 新添磁盘:分区、格式化、挂载

控制节点新添加一块 20GB 磁盘(/dev/sdb),分成两个区并格式化为 xfs:分区一对应 obs1,分区二对应 obs2。

bash 复制代码
# 卸载并清理原来的 swift 虚拟设备分区
umount /srv/node/swiftloopback
cd /srv/node
rm -rf swiftloopback/
mkdir obs1 obs2                # 创建新的挂载目录,分别对应 sdb1、sdb2

# 配置 /etc/fstab:注释原 swiftloopback 行,添加两行新挂载
/dev/sdb1 /srv/node/obs1 xfs defaults 0 0
/dev/sdb2 /srv/node/obs2 xfs defaults 0 0
mount -a                        # 挂载;若提示 fstab 已改但 systemd 用旧版,先 systemctl daemon-reload
df                              # 确认 obs1、obs2 已挂载

# 改属主:Swift 服务用户要能读写
chown swift:swift obs1
chown swift:swift obs2

3.2 创建 Ring:create → add → rebalance

进 /etc/swift/ 目录。先查三个服务的 bind_port(account 6002 / container 6001 / object 6000),然后对三个 builder 各做一遍三步曲(以 object 为例):

bash 复制代码
cd /etc/swift/

# 第 1 步:create 建环
# 三个数字:12 = 分区数量 2^12;2 = 2 个副本;1 = 最少 1 小时后才允许再改 ring 配置
swift-ring-builder object.builder create 12 2 1
swift-ring-builder account.builder create 12 2 1
swift-ring-builder container.builder create 12 2 1

# 第 2 步:add 加设备(zone-IP:端口/挂载点 权重100;两个分区分属 z1、z2)
swift-ring-builder object.builder add z1-192.168.108.10:6000/obs1 100
swift-ring-builder object.builder add z2-192.168.108.10:6000/obs2 100
# account 用 6002、container 用 6001,同样的 z1/z2 各加一遍

# 第 3 步:rebalance 重平衡(重新分配分区,生成 .ring.gz)
swift-ring-builder object.builder rebalance
swift-ring-builder account.builder rebalance
swift-ring-builder container.builder rebalance

create 12 2 1 的三个数字是必背点:2^12 个分区、2 副本、1 小时变更保护。

3.3 验证:2 副本真的落了两份

界面或命令上传一个文件后:

bash 复制代码
find /srv/node -name *data
# /srv/node/obs1/objects/317/0fe/13d34c83.../1727591964.07735.data
# /srv/node/obs2/objects/317/0fe/13d34c83.../1727591964.07735.data

同一份对象数据在 obs1 和 obs2 各存了一份------2 副本落盘成功,Ring 的分配生效。分区一、分区二分属 z1、z2 两个 zone,坏一块盘数据还在,这就是「多副本冗余」的直观形态。

四、华为 OBS 体验:云上的对象存储

华为云 OBS(Object Storage Service)是 Swift 思路在公有云上的同源产品:桶(bucket)+ 对象 + REST 访问。实验里走了一遍从开通到控制台上传下载的流程,体感上和 Swift 的「容器 + 对象」一一对应------对象存储的抽象模型在各家都是通的。

五、Ceilometer:OpenStack 的电表

5.1 定位

Ceilometer(计量服务)是 OpenStack 的「电表」------把各服务的资源用量统一测出来、存起来、供查询和计费。没有它,云平台的「谁用了多少」就没处出报表。

5.2 发展与衍生

Ceilometer 早期包揽三件事:数据收集 + 数据存储 + 告警,后来项目拆分:

  • 存储 拆给 Gnocchi(时序数据库);
  • 告警 拆给 Aodh;
  • Ceilometer 专注收集。

5.3 整体架构与工作流程

数据流四步:收集 → 处理 → 存储 → 告警/访问。

数据收集用两种代理,方向相反:

代理 方式 说明
轮询代理 Polling 主动「要」 周期性地向各服务 API 请求计量数据
通知代理 Notification 被动「听」 监听消息总线上各服务发出的事件通知

数据处理:对原始数据做采样、转换,经管道(pipeline)输出成统一的计量样本(sample)。

数据存储:样本(sample)与事件(event)落到存储后端(现代部署是 Gnocchi),供 API 查询;界面「计量」面板看资源用量,云平台账单从这出。

告警(Aodh) :对计量数据设阈值,触发时执行动作------比如「CPU 连续 5 分钟超 80% 就扩容」。计量管记账,告警管盯梢,两者配合是 Heat 自动伸缩的数据基础。

六、命令速查与概念锚点

命令 说明
swift stat 查看账户/容器/对象统计信息
swift-ring-builder <builder> create 12 2 1 建环:2^12 分区 / 2 副本 / 1 小时保护
swift-ring-builder <builder> add z1-IP:PORT/挂载点 100 加存储设备(zone-IP:端口/目录 权重)
swift-ring-builder <builder> rebalance 重平衡,生成 ring.gz
find /srv/node -name *data 验证多副本落盘

三个必背锚点:

  1. 三环三端口:Account 6002 / Container 6001 / Object 6000;
  2. create 12 2 1:分区数、副本数、变更保护小时数;
  3. Ring 四要素:Zone / Device / Partition / Replica。

附:关键英文全称

缩写/术语 全称 含义
OBS Object Storage Service 华为云对象存储服务
Ring --- 环,对象到物理位置的映射表
Partition --- 分区,Ring 的虚拟节点单位(2^12 即 4096 个)
Replica --- 副本数(实验为 2)
Gnocchi --- 时序数据库,计量数据存储后端
Aodh --- 告警服务(从 Ceilometer 拆分)
Polling / Notification --- 轮询(主动要)/ 通知(被动听)两种收集代理

📖 Ring 原理图与 OBS 截图见《OpenStack 管理手册》对象存储章节;Ceilometer 架构图见 PPT《09 OpenStack 计量管理》。Swift 与 Cinder/Swift/Manila 三兄弟的对比见 10-28 篇《Cinder 是怎么把一块卷交给虚拟机的?》第一节。

相关推荐
2501_916008893 小时前
iOS App 图标、启动屏和多语言搭配 方法,上架前使用KXBuild一次做好 App 图标
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
2501_915918413 小时前
iOS 推送通知怎么实现,从 APNs p8 密钥到 iOS 真机收到第一条推送
vscode·ios·objective-c·个人开发·swift·敏捷流程
东坡肘子3 小时前
快速消失的硬盘容量 -- 肘子的 Swift 周报 #160
人工智能·swiftui·swift
2501_916007472 天前
Windows OpenSSL 生成 iOS 证书,制作 p12 与描述文件,KXBuild 签名实操
windows·vscode·ios·objective-c·个人开发·swift·敏捷流程
00后程序员张2 天前
Windows 开发 iOS App 入门,用 SwiftUI 写第一个 iOS App 装到 iPhone
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
andyweike3 天前
Swift
开发语言·ios·swift
静以修身zzz3 天前
OpenStack对象存储-Swift、OpenStack编排管理-heat、OpenStack网络管理-neutron
linux·运维·服务器·架构·openstack·swift
瓦瓦gogo4 天前
第一次了解 iOS 开发:从 Swift、SwiftUI 到公共组件
ios·swiftui·swift
青峰讲运维5 天前
OpenStack 存储深度解析|Cinder 块存储 + Swift 对象存储原理与完整实操(Yoga)
开发语言·openstack·swift