3.2. 对象存储服务管理

以下流程描述了如何自定义对象存储服务。

3.2.1. 配置 fast-post

默认情况下,当其元数据的任何部分更改时,对象存储服务都会对对象进行整个复制。您可以使用 fast-post 功能来防止这种情况。当更改多个大型对象的内容类型时,fast-post 功能会节省时间。

要启用 fast-post 功能,请执行以下操作在 Object Storage 代理服务中禁用 object_post_as_copy 选项:

  1. 编辑 swift_params.yaml

    cat > swift_params.yaml << EOF
    parameter_defaults:
        ExtraConfig:
          swift::proxy::copy::object_post_as_copy: False
    EOF
  2. 部署或更新 overcloud 时包含参数文件:

    openstack overcloud deploy [... previous args ...] -e swift_params.yaml

3.2.2. 启用 at-rest 加密

默认情况下,上传到 Object Storage 的对象是未加密的。因此,可以从文件系统中直接访问对象。如果在磁盘被丢弃前没有正确清除磁盘,这可能会带来安全风险。

您可以使用 OpenStack Key Manager (barbican)加密 at-rest swift 对象。如需更多信息,请参阅 加密 at-rest swift 对象

3.2.3. 部署独立对象存储集群

您可以使用可组合角色概念来部署独立 Object Storage (openstack-swift)集群,其最小其他服务(如 Keystone、HAProxy)。创建 roles_data File 部分包含角色的信息。

3.2.3.1. 创建 roles_data.yaml 文件

  1. /usr/share/openstack-tripleo-heat-templates 复制 roles_data.yaml
  2. 编辑新文件。
  3. 删除不需要的控制器角色,如 Aodh*、Ceilometer、Ceph*、Cinder*、Glance*、Ironic*、Manila*、Mistral*、Nova*、Octavia*、Swift*。
  4. roles_data.yaml 中查找 ObjectStorage 角色。
  5. 将此角色复制到同一文件中的新角色,并将其命名为 ObjectProxy
  6. SwiftStorage 替换为此角色中的 SwiftProxy

以下 roles_data.yaml 文件示例显示了示例角色。

- name: Controller
  description: |
	Controller role that has all the controller services loaded and handles
	Database, Messaging and Network functions.
  CountDefault: 1
  tags:
	- primary
	- controller
  networks:
	- External
	- InternalApi
	- Storage
	- StorageMgmt
	- Tenant
  HostnameFormatDefault: '%stackname%-controller-%index%'
  ServicesDefault:
	- OS::TripleO::Services::AuditD
	- OS::TripleO::Services::CACerts
	- OS::TripleO::Services::CertmongerUser
	- OS::TripleO::Services::Clustercheck
	- OS::TripleO::Services::Docker
	- OS::TripleO::Services::Ec2Api
	- OS::TripleO::Services::Etcd
	- OS::TripleO::Services::HAproxy
	- OS::TripleO::Services::Keepalived
	- OS::TripleO::Services::Kernel
	- OS::TripleO::Services::Keystone
	- OS::TripleO::Services::Memcached
	- OS::TripleO::Services::MySQL
	- OS::TripleO::Services::MySQLClient
	- OS::TripleO::Services::Ntp
	- OS::TripleO::Services::Pacemaker
	- OS::TripleO::Services::RabbitMQ
	- OS::TripleO::Services::Securetty
	- OS::TripleO::Services::Snmp
	- OS::TripleO::Services::Sshd
	- OS::TripleO::Services::Timezone
	- OS::TripleO::Services::TripleoFirewall
	- OS::TripleO::Services::TripleoPackages
	- OS::TripleO::Services::Vpp

- name: ObjectStorage
  CountDefault: 1
  description: |
	Swift Object Storage node role
  networks:
	- InternalApi
	- Storage
	- StorageMgmt
  disable_upgrade_deployment: True
  ServicesDefault:
	- OS::TripleO::Services::AuditD
	- OS::TripleO::Services::CACerts
	- OS::TripleO::Services::CertmongerUser
	- OS::TripleO::Services::Collectd
	- OS::TripleO::Services::Docker
	- OS::TripleO::Services::FluentdClient
	- OS::TripleO::Services::Kernel
	- OS::TripleO::Services::MySQLClient
	- OS::TripleO::Services::Ntp
	- OS::TripleO::Services::Securetty
	- OS::TripleO::Services::SensuClient
	- OS::TripleO::Services::Snmp
	- OS::TripleO::Services::Sshd
	- OS::TripleO::Services::SwiftRingBuilder
	- OS::TripleO::Services::SwiftStorage
	- OS::TripleO::Services::Timezone
	- OS::TripleO::Services::TripleoFirewall
	- OS::TripleO::Services::TripleoPackages

- name: ObjectProxy
  CountDefault: 1
  description: |
	Swift Object proxy node role
  networks:
	- InternalApi
	- Storage
	- StorageMgmt
  disable_upgrade_deployment: True
  ServicesDefault:
	- OS::TripleO::Services::AuditD
	- OS::TripleO::Services::CACerts
	- OS::TripleO::Services::CertmongerUser
	- OS::TripleO::Services::Collectd
	- OS::TripleO::Services::Docker
	- OS::TripleO::Services::FluentdClient
	- OS::TripleO::Services::Kernel
	- OS::TripleO::Services::MySQLClient
	- OS::TripleO::Services::Ntp
	- OS::TripleO::Services::Securetty
	- OS::TripleO::Services::SensuClient
	- OS::TripleO::Services::Snmp
	- OS::TripleO::Services::Sshd
	- OS::TripleO::Services::SwiftRingBuilder
	- OS::TripleO::Services::SwiftProxy
	- OS::TripleO::Services::Timezone
	- OS::TripleO::Services::TripleoFirewall
	- OS::TripleO::Services::TripleoPackages

3.2.3.2. 部署新角色

使用常规的 openstack deploy 命令部署 overcloud,包括新角色。

openstack overcloud deploy --templates -r roles_data.yaml -e [...]

3.2.4. 使用外部 SAN 磁盘

默认情况下,当 Red Hat OpenStack Platform director 部署 Object Storage 服务(swift)时,对象存储会被配置和优化以使用独立本地磁盘。此配置可确保工作负载在所有磁盘上分布,这有助于在节点故障或其他系统问题期间最大程度降低性能影响。

在类似的性能影响事件时,使用单个 SAN 的环境可能会遇到所有 LUN 的性能降低。对象存储服务无法缓解使用 SAN 磁盘的环境中的性能问题。

因此,红帽强烈建议您为对象存储使用额外的本地磁盘来满足性能和磁盘空间要求。如需更多信息,请参阅特定 Red Hat OpenStack Platform 服务指南中的部署建议 中的 对象存储

将外部 SAN 用于对象存储需要根据具体情况进行评估。如需更多信息,请联系红帽支持团队。

重要

如果您选择将外部 SAN 用于对象存储,请注意以下条件:

  • 对象存储服务默认存储遥测数据和镜像服务(glance)镜像。Glance 镜像需要更多磁盘空间,但从性能角度而言,存储 glance 镜像的影响比存储遥测数据的影响要小。存储和处理遥测数据需要提高性能。红帽不为与使用外部 SAN 进行对象存储造成的性能相关的问题提供支持。
  • 红帽不提供对核心对象存储服务产品之外的问题提供支持。要获得高可用性和性能的支持,请联系您的存储厂商。
  • 红帽没有使用对象存储服务测试 SAN 解决方案。有关第三方产品的兼容性、指导和支持的更多信息,请联系您的存储供应商。
  • 红帽建议您使用部署评估和测试性能需求。要确认您的 SAN 部署经过测试、受支持并满足您的性能要求,请联系您的存储供应商。

3.2.4.1. SAN 磁盘部署配置

此模板是用于对象存储存储的两个设备(/dev/mapper/vdb/dev/mapper/vdc)的示例:

parameter_defaults:
  SwiftMountCheck: true
  SwiftUseLocalDir: false
  SwiftRawDisks: {"vdb": {"base_dir":"/dev/mapper/"}, "vdc": {"base_dir":"/dev/mapper/"}}