OpenStack核心组件管理:Cinder块存储与Swift对象存储重点总结
·
OpenStack核心组件管理:Cinder块存储与Swift对象存储重点总结
一、Cinder 块存储管理
1. Cinder 核心概念与作用
- Cinder 在虚拟机与具体存储设备之间引入“逻辑存储卷”抽象层。
- Cinder 本身不是存储技术,而是提供统一的接口,后端存储以驱动形式接入(LVM、Ceph、EMC、华为等)。
- 提供卷的创建、删除、挂载、卸载、快照、备份等功能。
2. Cinder 架构组件
| 组件 | 功能 |
|---|---|
| Cinder-API | 对外提供 REST API,参数校验,配额管理,卷/快照/备份的增删改查 |
| Cinder-Scheduler | 收集后端存储容量和能力,通过过滤+权重选择合适的后端存储创建卷 |
| Cinder-Volume | 多节点部署,调用具体厂商驱动与后端存储交互,执行卷操作 |
| Cinder-Backup | 将卷数据备份到其他存储介质(Swift、Ceph、TSM 等) |
| SQL Database | 存储卷、快照、备份、服务状态等元数据 |
| Message Queue (RabbitMQ) | 组件间通信 |
3. 常用命令
# 查看 cinder 服务状态
systemctl status openstack-cinder-api.service
systemctl status openstack-cinder-scheduler.service
systemctl status openstack-cinder-volume.service
# 查看进程
ps -e | grep cinder
# 创建卷(指定大小和可用域)
openstack volume create --size <GB> --availability-zone <az_name> <volume_name>
# 列出卷
openstack volume list
# 查看卷详情
openstack volume show <volume_id>
# 删除卷
openstack volume delete <volume_id>
4. 后端存储类型
- 默认后端:LVM(Logical Volume Manager)
- 配置文件:
/etc/cinder/cinder.conf - 卷组名称:
cinder-volumes - 查看卷组:
vgdisplay cinder-volumes
- 配置文件:
- 其他支持的驱动:SAN、Ceph、Sheepdog、EMC、华为等
5. Scheduler 过滤器(类似 Nova)
| 过滤器 | 作用 |
|---|---|
| AvailabilityZoneFilter | 根据存储节点的可用区域过滤 |
| CapacityFilter | 过滤存储空间不足的后端 |
| CapabilitiesFilter | 根据后端特性(如 thin provision)过滤 |
配置文件示例(/etc/cinder/cinder.conf):
scheduler_default_filters = AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter
storage_availability_zone = az1
default_availability_zone = nova
注意:创建卷时指定的 AZ 必须与存储节点的 AZ 匹配,否则会被过滤并报错。
6. 卷挂载流程(Nova 与 Cinder 配合)
- Nova 调用 Cinder API 创建卷,传递主机信息(hostname、iSCSI initiator name 等)。
- Cinder API 将信息传递给 Cinder Volume。
- Cinder Volume 根据存储的 host 信息找到对应 Driver。
- Driver 通知存储允许该主机访问卷,返回连接信息(如 iSCSI portal、IQN)。
- Nova 调用 brick 模块识别磁盘设备。
- Nova 通知 Cinder 挂载完成。
- Nova 将设备信息传递给 Hypervisor,实现虚拟机内挂载磁盘。
7. 配置文件与日志
- 配置文件目录:
/etc/cinder/ - 主配置文件:
cinder.conf - 日志目录:
/var/log/cinder/
8. LVM 后端配置示例(packstack 安装)
[lvm]
volume_backend_name = lvm
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
target_ip_address = 192.168.108.10
target_helper = lioadm
volume_group = cinder-volumes
volumes_dir = /var/lib/cinder/volumes
二、Swift 对象存储
1. Swift 核心特点
- 对象存储,不是文件系统,也不是实时数据存储。
- 适合存储永久性静态数据:虚拟机镜像、图片、邮件、存档备份。
- 无中心单元/主控节点,提供更强的扩展性、冗余和持久性。
- 数据以对象形式存储在容器中,容器位于账户下。
2. Swift 架构核心概念
| 概念 | 说明 |
|---|---|
| Account | 账户,包含多个容器 |
| Container | 容器,类似于文件夹,包含多个对象 |
| Object | 对象,实际存储的数据(文件) |
| Ring(环) | 将虚拟节点(分区)映射到物理存储设备,包括 Account Ring、Container Ring、Object Ring |
| Zone | 区域,用于数据隔离和容灾 |
| Replica | 副本数,保证数据冗余 |
3. 常用命令
# 查看账户、容器、对象信息
swift stat
# 列出容器
swift list
# 创建容器
swift post <container_name>
# 上传对象到容器
swift upload <container_name> <local_file>
# 下载对象
swift download <container_name> <object_name>
# 删除对象
swift delete <container_name> <object_name>
# 删除容器(需为空)
swift delete <container_name>
4. 实验:手动配置 Swift 后端存储(添加磁盘)
步骤概览
- 添加新磁盘(如 20GB),分区并格式化(XFS)。
- 挂载到目录(如
/srv/node/obs1、/srv/node/obs2),修改权限为swift:swift。 - 创建 Ring(account、container、object)。
- 将设备添加到 Ring,指定 zone、IP、端口、设备名、权重。
- 执行 rebalance 生成 Ring 文件。
- 启动 Swift 服务。
关键命令示例
# 分区(使用 fdisk 或 parted)
mkfs.xfs /dev/sdb1
mkfs.xfs /dev/sdb2
# 挂载(修改 /etc/fstab)
/dev/sdb1 /srv/node/obs1 xfs defaults 0 0
/dev/sdb2 /srv/node/obs2 xfs defaults 0 0
mount -a
# 修改权限
chown swift:swift /srv/node/obs1 /srv/node/obs2
# 创建 Ring(part_power=12 → 2^12=4096 个分区,replicas=2,min_part_hours=1)
cd /etc/swift
swift-ring-builder account.builder create 12 2 1
swift-ring-builder container.builder create 12 2 1
swift-ring-builder object.builder create 12 2 1
# 添加设备(zone 1,IP 192.168.108.10,端口对应服务,设备名 obs1,权重 100)
swift-ring-builder account.builder add z1-192.168.108.10:6002/obs1 100
swift-ring-builder container.builder add z1-192.168.108.10:6001/obs1 100
swift-ring-builder object.builder add z1-192.168.108.10:6000/obs1 100
# 同理添加 obs2 设备(可不同 zone)
swift-ring-builder account.builder add z2-192.168.108.10:6002/obs2 100
# ...
# 再平衡
swift-ring-builder account.builder rebalance
swift-ring-builder container.builder rebalance
swift-ring-builder object.builder rebalance
5. 端口对应关系
| Ring 类型 | 默认端口 |
|---|---|
| Account Server | 6002 |
| Container Server | 6001 |
| Object Server | 6000 |
| Proxy Server | 8080(公共访问) |
6. 数据冗余验证
-
上传对象后,会在多个设备上保存副本(如 obs1 和 obs2)。
-
查找对象实际存储位置:
find /srv/node -name "*data"
7. Swift 与 Glance 集成
- 可将 Glance 的后端存储配置为 Swift,实现镜像的存储。
- 修改
/etc/glance/glance-api.conf中[glance_store]相关配置(default_store = swift, swift_store_* 参数)。
8. 华为云 OBS(对象存储服务)体验
- OBS 是华为云的对象存储服务,功能类似 Swift。
- 可通过 OBS Browser+ 客户端管理桶和对象。
- 需创建访问密钥(AK/SK)用于鉴权。
三、Cinder 与 Swift 对比
| 特性 | Cinder(块存储) | Swift(对象存储) |
|---|---|---|
| 访问方式 | 块设备(需挂载) | REST API(HTTP/HTTPS) |
| 数据格式 | 卷(块设备) | 对象(文件+元数据) |
| 适用场景 | 数据库、文件系统、需要随机读写的应用 | 静态数据、备份、归档、镜像存储 |
| 是否可共享 | 通常一个卷只能挂载到一个实例(部分驱动支持共享) | 对象可被多用户并发读取 |
| 持久性 | 持久化(需手动备份) | 高持久性(多副本冗余) |
| 挂载方式 | 需通过 Nova 挂载到虚拟机 | 直接通过 API 访问,无需挂载 |
通过以上内容,可系统掌握 Cinder 块存储和 Swift 对象存储的核心概念、架构、常用操作及配置方法。
更多推荐

所有评论(0)