搜索

5.3. 添加或删除对象存储节点

download PDF

要向集群添加新的 Object Storage (swift)节点,您必须增加节点数,更新环,并同步更改。您可以通过添加节点到 overcloud 或扩展裸机节点来增加节点数。

要从集群中删除 Object Storage 节点,您可以执行简单删除或增量删除,具体取决于集群中的数据量。

5.3.1. 向 overcloud 添加节点

您可以将更多节点添加到 overcloud。

注意

全新安装 Red Hat OpenStack Platform (RHOSP)不包括某些更新,如安全勘误和程序错误修复。因此,如果您要扩展使用红帽客户门户网站或 Red Hat Satellite Server 的连接环境,RPM 更新不会应用到新节点。要将最新的更新应用到 overcloud 节点,您必须执行以下操作之一:

流程

  1. 创建名为 newnodes.json 的新 JSON 文件,其中包含您要注册的新节点的详情:

    {
      "nodes":[
        {
            "mac":[
                "dd:dd:dd:dd:dd:dd"
            ],
            "cpu":"4",
            "memory":"6144",
            "disk":"40",
            "arch":"x86_64",
            "pm_type":"ipmi",
            "pm_user":"admin",
            "pm_password":"p@55w0rd!",
            "pm_addr":"192.02.24.207"
        },
        {
            "mac":[
                "ee:ee:ee:ee:ee:ee"
            ],
            "cpu":"4",
            "memory":"6144",
            "disk":"40",
            "arch":"x86_64",
            "pm_type":"ipmi",
            "pm_user":"admin",
            "pm_password":"p@55w0rd!",
            "pm_addr":"192.02.24.208"
        }
      ]
    }
  2. stack 用户身份登录 undercloud 主机。
  3. 查找 stackrc undercloud 凭证文件:

    $ source ~/stackrc
  4. 注册新节点:

    $ openstack overcloud node import newnodes.json
  5. 为每个新节点启动内省过程:

    $ openstack overcloud node introspect \
     --provide <node_1> [<node_2>] [<node_n>]
    • 使用 --provide 选项,在内省后将所有指定的节点重置为 available 状态。
    • <node_1& gt ; , <node_ 2>,将直到 < node_n > 的所有节点替换为您要内省的每个节点的 UUID。
  6. 为每个新节点配置镜像属性:

    $ openstack overcloud node configure <node>

5.3.2. 扩展裸机节点

要增加现有 overcloud 中的裸机节点数量,请在 overcloud-baremetal-deploy.yaml 文件中增加节点数并重新部署 overcloud。

先决条件

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 stackrc undercloud 凭证文件:

    $ source ~/stackrc
  3. 打开用于置备裸机节点的 overcloud-baremetal-deploy.yaml 节点定义文件。
  4. 增加您要扩展的角色的 count 参数。例如,以下配置将 Object Storage 节点数增加到 4:

    - name: Controller
      count: 3
    - name: Compute
      count: 10
    - name: ObjectStorage
      count: 4
  5. 可选:为新节点配置预测节点放置。例如,使用以下配置在 node03 上置备新的 Object Storage 节点:

    - name: ObjectStorage
      count: 4
      instances:
      - hostname: overcloud-objectstorage-0
        name: node00
      - hostname: overcloud-objectstorage-1
        name: node01
      - hostname: overcloud-objectstorage-2
        name: node02
      - hostname: overcloud-objectstorage-3
        name: node03
  6. 可选:定义您要分配给新节点的任何其他属性。有关您可以在节点定义文件中配置节点属性的属性的更多信息,请参阅 裸机节点置备属性
  7. 如果您使用 Object Storage 服务(swift)和整个磁盘 overcloud 镜像,overcloud-hardened-uefi-full,请根据您的磁盘大小配置 /srv 分区的大小以及 /var/srv 的存储要求。如需更多信息,请参阅为对象存储服务配置整个磁盘分区
  8. 置备 overcloud 节点:

    $ openstack overcloud node provision \
      --stack <stack> \
      --network-config \
      --output <deployment_file> \
      /home/stack/templates/overcloud-baremetal-deploy.yaml
    • & lt;stack> 替换为置备裸机节点的堆栈名称。如果未指定,则默认为 overcloud
    • 包含 --network-config 参数,为 cli-overcloud-node-network-config.yaml Ansible playbook 提供网络定义。
    • <deployment_file> 替换为用于部署命令生成的 heat 环境文件的名称,如 /home/stack/templates/overcloud-baremetal-deployed.yaml

      注意

      如果您从 Red Hat OpenStack Platform 16.2 升级到 17.1,则必须在 openstack overcloud node provision 命令中在升级过程中创建或更新的 YAML 文件。例如,使用 /home/stack/tripleo-[stack]-baremetal-deploy.yaml 文件,而不是 /home/stack/templates/overcloud-baremetal-deployed.yaml 文件。有关更多信息,请参阅 执行 overcloud 的采用和 准备 Framework (16.2 到 17.1)。

  9. 在一个单独的终端中监控置备进度。当置备成功时,节点状态将从 available 变为 active

    $ watch openstack baremetal node list
  10. 使用其他环境文件将生成的 overcloud-baremetal-deployed.yaml 文件添加到堆栈中,并部署 overcloud:

    $ openstack overcloud deploy --templates \
      -e [your environment files] \
      -e /home/stack/templates/overcloud-baremetal-deployed.yaml \
      --deployed-server \
      --disable-validations \
      ...

5.3.3. 定义专用对象存储节点

为 Red Hat OpenStack Platform (RHOSP)对象存储服务指定额外的节点以提高性能。

如果您要将额外的节点专用于对象存储服务,请编辑自定义 roles_data.yaml 文件,从 Controller 节点中删除 Object Storage 服务条目。具体来说,从 Controller 角色的 ServicesDefault 列表中删除以下行:

    - OS::TripleO::Services::SwiftStorage

5.3.4. 更新并重新平衡对象存储环

对象存储服务(swift)需要所有 Controller 和 Object Storage 节点上的相同环文件。如果替换 Controller 节点或 Object Storage 节点,则必须在 overcloud 更新后同步这些节点或 Object Storage 节点,以确保正常工作。

流程

  1. stack 用户身份登录 undercloud,再创建一个临时目录:

    $ mkdir temp && cd temp/
  2. 将 overcloud 环文件从之前现有节点之一(本例中为 controller 0)下载到新目录中:

    $ ssh tripleo-admin@overcloud-controller-0.ctlplane 'sudo tar -czvf - \
      /var/lib/config-data/puppet-generated/swift_ringbuilder/etc/swift \
      /{*.builder,*.ring.gz,backups/*.builder}' > swift-rings.tar.gz
  3. 提取环并更改到 ring 子目录:

    $ tar xzvf swift-rings.tar.gz && cd \
    var/lib/config-data/puppet-generated/swift_ringbuilder/etc/swift/
  4. 根据您的设备详情收集以下变量的值:

    • <device_name>:

      $ openstack baremetal introspection data save \
        <node_name> | jq ".inventory.disks"
    • <node_ip>:

      $ metalsmith <node_name> show
    • <port > : 默认端口为 600x。如果您更改了默认值,请使用适用的端口。
    • <builder_file > :第 3 步中的构建器文件名。
    • <weight &gt ; 和 <zone > 变量是用户定义的。
  5. 使用 swift-ring-builder 将新节点添加到现有环中。根据设备详情替换变量。

    注意

    您必须安装 python3-swift RPM 以使用 swift-ring-builder 命令。

    $ swift-ring-builder etc/swift/<builder_file> \
      add <zone>-<node_ip>:<port>/<device_name> <weight>
  6. 重新平衡环,以确保使用新设备:

    $ swift-ring-builder etc/swift/<builder_file> rebalance
  7. 将修改后的环文件上传到 Controller 节点,并确保使用这些环文件。使用类似以下示例的脚本来分发环文件:

    #!/bin/sh
    set -xe
    
    ALL="tripleo-admin@overcloud-controller-0.ctlplane \
    tripleo-admin@overcloud-controller-1.ctlplane \
    tripleo-admin@overcloud-controller-2.ctlplane"
    • 将环上传到所有节点并重新启动对象存储服务:

      for DST in ${ALL}; do
        cat swift-rings.tar.gz | ssh "${DST}" 'sudo tar -C / -xvzf -'
        ssh "${DST}" 'sudo podman restart swift_copy_rings'
        ssh "${DST}" 'sudo systemctl restart tripleo_swift*'
      done

5.3.5. 同步节点更改并迁移数据

在将新环文件复制到其正确的文件夹后,您必须将更改的环文件发送到 Object Storage (swift)容器。

重要的
  • 不要同时迁移所有数据。以 10% 的增量迁移数据。例如,将源设备的权重配置为等于 90.0,将目标设备配置为 equal 10.0。然后,将源设备的权重配置为等于 80.0 和 20.0。继续逐步迁移数据,直到您完成此过程。在迁移过程中,如果您同时移动所有数据,旧数据位于源设备上,但环会指向所有副本的新目标设备。在 replicators 将所有数据移到目标设备前,数据将无法访问。
  • 在迁移过程中,Object Storage 环会重新分配数据的位置,然后 replicator 将数据移到新位置。当集群活动增加时,因为负载增加,复制过程会减慢。集群越大,复制传递所需的时间越长。这是预期的行为,但如果客户端访问当前被重新定位的数据,则日志文件中可能会导致 404 错误。当代理尝试从新位置检索数据,但数据还没有在新位置上时,swift-proxy 会在日志文件中报告 404 错误。

    当迁移逐渐时,代理会访问没有移动的副本,且不会发生错误。当代理尝试从其他副本检索数据时,日志文件中的 404 错误会解决。要确认复制过程正在进行,请参阅复制日志。Object Storage 服务(swift)每五分钟发出复制日志。

流程

  1. 使用类似以下示例的脚本,将环文件从之前现有的 Controller 节点分发到所有 Controller 节点,并在这些节点上重启对象存储服务容器:

    #!/bin/sh
    set -xe
    
    SRC="tripleo-admin@overcloud-controller-0.ctlplane"
    ALL="tripleo-admin@overcloud-controller-0.ctlplane \
    tripleo-admin@overcloud-controller-1.ctlplane \
    tripleo-admin@overcloud-controller-2.ctlplane"
    • 获取当前的环文件集合:

      ssh "${SRC}" 'sudo tar -czvf - \
        /var/lib/config-data/puppet-generated/swift_ringbuilder/etc/swift \
        /{*.builder,*.ring.gz,backups/*.builder}' > swift-rings.tar.gz
    • 将环上传到所有节点并重新启动对象存储服务:

      for DST in ${ALL}; do
        cat swift-rings.tar.gz | ssh "${DST}" 'sudo tar -C / -xvzf -'
        ssh "${DST}" 'sudo podman restart swift_copy_rings'
        ssh "${DST}" 'sudo systemctl restart tripleo_swift*'
      done
  2. 要确认数据正在移至新磁盘,请在新存储节点上运行以下命令:

    $ sudo grep -i replication  /var/log/container/swift/swift.log

5.3.6. 删除 Object Storage 节点

删除 Object Storage (swift)节点的方法有两种:

  • 简单删除:此方法在一个操作中删除节点,并适用于具有较小的数据量的高效集群。
  • 增量删除 :更改环,以减少您要删除的节点上的磁盘的权重。如果要最大程度降低对存储网络使用量的影响,或者集群包含更大的数据量,则这种方法是适当的。

对于这两种方法,您遵循 缩减裸机节点 的步骤。但是,为了进行增量删除,请完成这些先决条件来更改存储环,以减少您要删除的节点上的磁盘权重:

先决条件

有关替换对象存储节点的详情,请查看 缩减裸机节点 开始时的先决条件。

5.3.7. 缩减裸机节点

若要缩减 overcloud 中的裸机节点数量,请标记您要从节点定义文件的堆栈中删除的节点,重新部署 overcloud,然后从 overcloud 中删除裸机节点。

先决条件

  • 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director
  • 成功部署 overcloud。如需更多信息,请参阅 使用预置备节点配置基本 overcloud
  • 如果要替换 Object Storage 节点,请将您要删除的节点中的数据复制到新替换节点。等待新节点上复制传递完成。在 /var/log/swift/swift.log 文件中检查复制传递进度。传递完成后,Object Storage 服务(swift)会将条目添加到类似以下示例的日志中:

    Mar 29 08:49:05 localhost object-server: Object replication complete.
    Mar 29 08:49:11 localhost container-server: Replication run OVER
    Mar 29 08:49:13 localhost account-server: Replication run OVER

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 stackrc undercloud 凭证文件:

    $ source ~/stackrc
  3. 对于您要缩减的角色,减少 overcloud-baremetal-deploy.yaml 文件中的 count 参数。
  4. 定义您要从堆栈中删除的每个节点的 主机名和 名称 (如果它们尚未在角色的 instances 属性中定义)。
  5. 将 attribute provisioned: false 添加到您要删除的节点。例如,要从堆栈中删除节点 overcloud-objectstorage-1,请在 overcloud-baremetal-deploy.yaml 文件中包含以下代码片段:

    - name: ObjectStorage
      count: 3
      instances:
      - hostname: overcloud-objectstorage-0
        name: node00
      - hostname: overcloud-objectstorage-1
        name: node01
        # Removed from cluster due to disk failure
        provisioned: false
      - hostname: overcloud-objectstorage-2
        name: node02
      - hostname: overcloud-objectstorage-3
        name: node03

    重新部署 overcloud 后,堆栈中不再存在使用 provisioned: false 属性定义的节点。但是,这些节点仍然以置备状态运行。

    注意

    要从堆栈中临时删除节点,请使用 provisioned: false 属性部署 overcloud,然后使用 provisioned: true 属性重新部署 overcloud,以将节点返回到堆栈。

  6. 从 overcloud 删除节点:

    $ openstack overcloud node delete \
      --stack <stack> \
      --baremetal-deployment \
       /home/stack/templates/overcloud-baremetal-deploy.yaml
    • & lt;stack> 替换为置备裸机节点的堆栈名称。如果未指定,则默认为 overcloud

      注意

      不要将您要从堆栈中删除的节点作为命令参数包括在 openstack overcloud node delete 命令中。

  7. 删除 ironic 节点:

    $ openstack baremetal node delete <IRONIC_NODE_UUID>

    IRONIC_NODE_UUID 替换为节点的 UUID。

  8. 置备 overcloud 节点以生成更新的 heat 环境文件,以包括在部署命令中:

    $ openstack overcloud node provision \
      --stack <stack> \
      --output <deployment_file> \
      /home/stack/templates/overcloud-baremetal-deploy.yaml
    • <deployment_file> 替换为用于部署命令生成的 heat 环境文件的名称,如 /home/stack/templates/overcloud-baremetal-deployed.yaml
  9. 将 provisioning 命令生成的 overcloud-baremetal-deployed.yaml 文件添加到与其他环境文件的堆栈中,并部署 overcloud:

    $ openstack overcloud deploy \
      ...
      -e /usr/share/openstack-tripleo-heat-templates/environments \
      -e /home/stack/templates/overcloud-baremetal-deployed.yaml \
      --deployed-server \
      --disable-validations \
      ...
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.