5.3. 添加新对象存储节点


要在集群中添加新的 Object Storage (swift)节点,您必须增加节点数、更新环并同步更改。以下示例流程将三个节点增加到四个节点。

流程

  1. stack 用户身份登录 undercloud 节点,并提供 stackrc 凭证文件:

    $ source ~/stackrc
  2. 使用 ObjectStorageCount 参数将 Object Storage 数增加到 1。此参数通常位于 node-info.yaml 文件中,这是包含节点数的环境文件:

    parameter_defaults:
      ObjectStorageCount: 4
  3. 将新节点的 IP 地址添加到 node-info.yaml 文件中的 ObjectStorageIPs 参数中:

    ObjectStorageIPs: <ip_address>
  4. 创建一个环境文件,如 hostname-map.yaml,并将新存储节点的主机名添加,如 overcloud-objectstorage-4HostnameMap 参数中:

    parameter_defaults:
      HostnameMap:
        overcloud-objectstorage-4: overcloud-objectstorage-4
  5. 将新节点的硬件和电源管理信息添加到节点定义模板。节点定义模板是手动创建的文件,用于在初始 overcloud 配置期间注册 overcloud 节点。例如,模板可以是: /home/stack/nodes.json。以下示例使用 JSON 格式,但如果模板是 YAML 文件,但根据 YAML 格式和属性添加信息。有关节点定义模板的更多信息,请参阅 Director 安装和使用指南中的 为 overcloud 注册节点

    "ports":[
    "bb:bb:bb:bb:bb:bb"
    ],
    "name":"node01",
    "cpu":"4",
    "memory":"6144",
    "disk":"40",
    "arch":"x86_64",
    "pm_type":"pxe_ipmitool",
    "pm_user":"admin",
    "pm_password":"p@55w0rd!",
    "pm_addr":"192.168.24.205"
  6. 将新节点的功能信息添加到节点定义模板中:

    "capabilities": "profile:swift-storage,boot_option:local,boot_mode:uefi,node:objectstorage-4",
  7. 将节点导入到 overcloud,并在节点上执行内省:

    $ openstack overcloud node import ~/nodes.yaml
    $ openstack overcloud node introspect objectstorage-4 --provide
  8. 在新节点中添加根磁盘序列号:

    $ openstack baremetal introspection data save objectstorage-4 | jq ".inventory.disks"
    $ openstack baremetal node set --property root_device='{"serial": "<disk_serial_num>"}' <node_UUID>

    根据您的新节点替换 < disk_serial_num > 和 <node_UUID >。

  9. 在部署命令中包括您创建的文件,其中包含与您的环境相关的任何其他环境文件:

    $ openstack overcloud deploy \
    --templates \
    …
    -e <existing_overcloud_environment_files> \
    -e node-info.yaml \
    -e hostname-map.yaml \

5.3.1. 更新和重新平衡对象存储环

Object Storage 服务(swift)在 undercloud 上存储环文件副本,以部署新的存储节点并替换现有的 Controller 和 Object Storage 节点。使用此副本修改 overcloud 环文件,并将它们分发到节点之间。

流程

  1. stack 用户身份登录 undercloud,再提供 stackrc 凭证文件:

    $ source ~/stackrc
  2. 创建以下目录:

    $ mkdir temp && cd temp/
  3. 将 overcloud 环构建器文件下载到新目录中:

    $ openstack object save overcloud-swift-rings swift-rings.tar.gz
  4. 提取环:

    $ tar xzvf swift-rings.tar.gz
  5. 创建一个目录来备份环的原始版本:

    $ mkdir backup && cp swift-rings.tar.gz backup/

    对象存储环文件位于 etc/swift 文件夹中。

  6. 根据您的设备详情收集以下变量的值:

    • <device_name>:

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

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

    $ swift-ring-builder etc/swift/<builder_file> add <zone>-<node_ip>:<port>/<device_name> <weight>
  8. 将修改后的 ring 文件上传到 undercloud 上的对象存储服务:

    $ tar cvzf swift-rings.tar.gz etc/
    $ openstack object create overcloud-swift-rings swift-rings.tar.gz

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

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

重要的
不要同时迁移所有数据。以 10% 为单位迁移数据。例如,将源设备的 weight 配置为 90.0,目标设备配置为 equal 10.0。然后,将源设备的权重配置为 80.0 和 20.0。继续逐步迁移数据,直到您完成这个过程。在迁移过程中,如果您同时移动所有数据,旧数据位于源设备上,但环指向所有副本的新目标设备。在 replicators 已将所有数据移至目标设备之前,无法访问数据。
重要的

在迁移过程中,对象存储环会重新分配数据的位置,然后复制器将数据移到新位置。随着集群活动增加,因为负载增加,复制过程会减慢。集群越大,复制传递所需的时间越长。这是预期的行为,但如果客户端访问当前被重新定位的数据,则日志文件中可能会导致 404 错误。当代理尝试从新位置检索数据时,但数据还没有在新位置中检索数据时,swift-proxy 会在日志文件中报告 404 错误。

当迁移逐渐时,代理会访问没有移动的副本,且不会发生错误。当代理尝试从替代副本检索数据时,日志文件中的 404 错误将解析。要确认复制过程正在进行,请参阅复制日志。对象存储服务每 5 分钟发出复制日志的问题。

流程

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

    cd etc/swift/
    for j in 8 11 23; do
      ssh heat-admin@192.168.24."$j" "rm *.ring.gz"
      for i in account.ring.gz container.ring.gz object.ring.gz; do
        scp $i heat-admin@192.168.24."$j":~/
        ssh heat-admin@192.168.24."$j" "sudo cp -f "$i" /var/lib/config-data/puppet-generated/swift/etc/swift/"
        ssh heat-admin@192.168.24."$j" "sudo chown root:root /var/lib/config-data/puppet-generated/swift/etc/swift/"$i""
        ssh heat-admin@192.168.24."$j" "sudo restorecon /var/lib/config-data/puppet-generated/swift/etc/swift/"$i""
      done
      ssh heat-admin@192.168.24."$j" "rm *.builder"
      for i in account.builder container.builder object.builder; do
        scp $i heat-admin@192.168.24."$j":~/
        ssh heat-admin@192.168.24."$j" "cat "$i" | sudo tee  /var/lib/config-data/puppet-generated/swift/etc/swift/"$i" >/dev/null"
      done
      ssh heat-admin@192.168.24."$j" 'for k in `sudo podman ps --format "{{.Names}}" | grep swift`; do sudo podman restart $k; done'
    done
    cd ../../
  2. 要确认数据正在移到新磁盘中,请在新存储节点上运行以下命令:

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部