第 6 章 将 Object Storage 服务迁移到 OpenShift 节点上的 Red Hat OpenStack Services


如果将 Red Hat OpenStack Platform Object Storage 服务(swift)用作对象存储服务,您必须将 Object Storage 服务迁移到 OpenShift 节点上的 Red Hat OpenStack Services。

如果您使用 Ceph 对象网关(RGW)的 Object Storage API,您可以跳过本章并迁移 Red Hat Ceph Storage 集群。有关更多信息,请参阅 迁移 Red Hat Ceph Storage 集群。如果您不规划从 Controller 节点迁移 Ceph 守护进程,您必须执行 部署 Ceph ingress 守护进程和 创建或更新 Object Storage 服务端点 中描述的步骤。

数据迁移按副本发生。例如,如果您有 3 个副本,请一次移动它们,以确保其他 2 个副本仍在运行,这样可允许您在迁移期间继续使用 Object Storage 服务。

注意

数据迁移到新部署是一个长时间运行的进程,主要在后台执行。对象存储服务 replicators 将数据从旧节点移到新节点,这可能需要很长时间,具体取决于所使用的存储量。要减少停机时间,如果节点正在运行,可以在等待迁移完成时继续使用其他服务,则可以使用它们。由于网络中的复制流量数量,性能可能会降低。

Object Storage 服务(swift)迁移涉及以下步骤:

  1. 将新节点添加到对象存储服务环中。
  2. 将现有节点的 weight 设置为 0。
  3. 通过移动一个副本来重新平衡环。
  4. 将 ring 复制到旧节点并重新启动服务。
  5. 检查复制状态并重复前面的两个步骤,直到旧节点排空为止。
  6. 从环中删除旧节点。

先决条件

  • 采用对象存储服务。如需更多信息,请参阅 使用对象存储服务
  • 对于 DNS 服务器,请确保所有现有节点能够解析 Red Hat OpenShift Container Platform (RHOCP) pod 的主机名,例如,将 DNSMasq 服务的外部 IP 用作 /etc/resolv.conf 中的名称服务器:

    $ oc get service dnsmasq-dns -o jsonpath="{.status.loadBalancer.ingress[0].ip}" | $CONTROLLER1_SSH sudo tee /etc/resolv.conf
    Copy to Clipboard Toggle word wrap
  • 使用 swift-dispersion 工具跟踪复制的当前状态:

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-dispersion-populate'
    Copy to Clipboard Toggle word wrap

    命令可能需要几分钟时间来完成。它创建在对象存储服务部署中分发的 0 字节对象,之后您可以使用 swift-dispersion-report 来显示当前的复制状态:

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-dispersion-report'
    Copy to Clipboard Toggle word wrap

    swift-dispersion-report 命令的输出类似如下:

    Queried 1024 containers for dispersion reporting, 5s, 0 retries
    100.00% of container copies found (3072 of 3072)
    Sample represents 100.00% of the container partition space
    Queried 1024 objects for dispersion reporting, 4s, 0 retries
    There were 1024 partitions missing 0 copies.
    100.00% of object copies found (3072 of 3072)
    Sample represents 100.00% of the object partition space
    Copy to Clipboard Toggle word wrap

流程

  1. 通过将 SwiftStorage 资源从 0 扩展到 3 来添加新节点:

    $ oc patch openstackcontrolplane openstack --type=merge -p='{"spec":{"swift":{"template":{"swiftStorage":{"replicas": 3}}}}}'
    Copy to Clipboard Toggle word wrap

    此命令在使用持久性卷声明的 Red Hat OpenShift Container Platform (RHOCP)集群上创建三个存储实例。

  2. 等待所有三个 pod 都在运行,且环包括新设备:

    $ oc wait pods --for condition=Ready -l component=swift-storage
    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-ring-builder object.builder search --device pv'
    Copy to Clipboard Toggle word wrap
  3. 从当前的环中,获取节点的存储管理 IP 地址以排空:

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-ring-builder object.builder search _' | tail -n +2 | awk '{print $4}' | sort -u
    Copy to Clipboard Toggle word wrap

    输出结果类似如下:

    172.20.0.100
    swift-storage-0.swift-storage.openstack.svc
    swift-storage-1.swift-storage.openstack.svc
    swift-storage-2.swift-storage.openstack.svc
    Copy to Clipboard Toggle word wrap
  4. 排空旧节点。在以下示例中,旧节点 172.20.0.100 排空:

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c '
    swift-ring-tool get
    swift-ring-tool drain 172.20.0.100
    swift-ring-tool rebalance
    swift-ring-tool push'
    Copy to Clipboard Toggle word wrap

    根据您的部署,您可能在命令中包含更多节点。

  5. 将更新的环复制到原始节点。为存储对象存储服务数据的现有节点运行 ssh 命令:

    $ oc extract --confirm cm/swift-ring-files
    $CONTROLLER1_SSH "tar -C /var/lib/config-data/puppet-generated/swift/etc/swift/ -xzf -" < swiftrings.tar.gz
    $CONTROLLER1_SSH "systemctl restart tripleo_swift_*"
    Copy to Clipboard Toggle word wrap
  6. 使用 swift-dispersion-report 工具跟踪复制进度:

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c "swift-ring-tool get && swift-dispersion-report"
    Copy to Clipboard Toggle word wrap

    输出显示找到的副本的 100% 少。重复该命令,直到找到所有容器和对象副本:

    Queried 1024 containers for dispersion reporting, 6s, 0 retries
    There were 5 partitions missing 1 copy.
    99.84% of container copies found (3067 of 3072)
    Sample represents 100.00% of the container partition space
    Queried 1024 objects for dispersion reporting, 7s, 0 retries
    There were 739 partitions missing 1 copy.
    There were 285 partitions missing 0 copies.
    75.94% of object copies found (2333 of 3072)
    Sample represents 100.00% of the object partition space
    Copy to Clipboard Toggle word wrap
  7. 通过重新平衡并分发环,将下一个副本移到新节点:

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c '
    swift-ring-tool get
    swift-ring-tool rebalance
    swift-ring-tool push'
    
    $ oc extract --confirm cm/swift-ring-files
    $CONTROLLER1_SSH "tar -C /var/lib/config-data/puppet-generated/swift/etc/swift/ -xzf -" < swiftrings.tar.gz
    $CONTROLLER1_SSH "systemctl restart tripleo_swift_*"
    Copy to Clipboard Toggle word wrap

    再次监控 swift-dispersion-report 输出,等待所有副本都找到,然后重复这个步骤,直到所有副本都移到新节点。

  8. 从环移除节点:

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c '
    swift-ring-tool get
    swift-ring-tool remove 172.20.0.100
    swift-ring-tool rebalance
    swift-ring-tool push'
    Copy to Clipboard Toggle word wrap
    注意

    即使所有副本都位于新节点上,而 swift-dispersion-report 命令也会报告找到副本的 100%,可能仍然是旧节点上的数据。replicators 删除这个数据,但可能需要更长的时间。

验证

  1. 检查集群中的所有磁盘的磁盘用量:

    $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-recon -d'
    Copy to Clipboard Toggle word wrap
  2. 确认节点上的 /srv/node 目录中 没有更多 \*.db 或 5.2.data 文件:

    $CONTROLLER1_SSH "find /srv/node/ -type f -name '*.db' -o -name '*.data' | wc -l"
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat