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 配合)

  1. Nova 调用 Cinder API 创建卷,传递主机信息(hostname、iSCSI initiator name 等)。
  2. Cinder API 将信息传递给 Cinder Volume。
  3. Cinder Volume 根据存储的 host 信息找到对应 Driver。
  4. Driver 通知存储允许该主机访问卷,返回连接信息(如 iSCSI portal、IQN)。
  5. Nova 调用 brick 模块识别磁盘设备。
  6. Nova 通知 Cinder 挂载完成。
  7. 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 后端存储(添加磁盘)

步骤概览
  1. 添加新磁盘(如 20GB),分区并格式化(XFS)。
  2. 挂载到目录(如 /srv/node/obs1/srv/node/obs2),修改权限为 swift:swift
  3. 创建 Ring(account、container、object)。
  4. 将设备添加到 Ring,指定 zone、IP、端口、设备名、权重。
  5. 执行 rebalance 生成 Ring 文件。
  6. 启动 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 对象存储的核心概念、架构、常用操作及配置方法。

更多推荐