5.3. 添加或删除 Object Storage 节点
要向集群添加新的 Object Storage (swift)节点,您必须增加节点数,更新环,并同步更改。您可以通过向 overcloud 添加节点或扩展裸机节点来增加节点数。
要从集群中删除 Object Storage 节点,您可以根据集群中的数据量执行简单的删除或增量移除。
5.3.1. 向 overcloud 添加节点 复制链接链接已复制到粘贴板!
您可以向 overcloud 添加更多节点。
Red Hat OpenStack Platform 的新安装不包括某些更新,如安全勘误和程序错误修复。因此,如果您要扩展使用红帽客户门户网站或 Red Hat Satellite Server 的连接的环境,RPM 更新不会应用到新节点。要将最新的更新应用到 overcloud 节点,您必须执行以下操作之一:
- 在 scale-out 操作后完成节点的 overcloud 更新。
-
使用
virt-customize工具,在横向扩展操作前将软件包修改为基础 overcloud 镜像。有关更多信息,请参阅红帽知识库解决方案 使用 virt-customize 修改 Red Hat Linux OpenStack Platform Overcloud 镜像。
流程
创建名为
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.168.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.168.24.208" } ] }注册新节点:
$ source ~/stackrc (undercloud)$ openstack overcloud node import newnodes.json为每个新节点启动内省过程:
(undercloud)$ openstack overcloud node introspect \ --provide <node_1> [node_2] [node_n]-
使用--
provide选项将所有指定节点在内省后重置为available状态。 -
将
<node_1>、[node_2]和所有节点(直到[node_n])替换为您要内省的每个节点的 UUID。
-
使用--
为每个新节点配置镜像属性:
(undercloud)$ openstack overcloud node configure <node>
5.3.2. 扩展裸机节点 复制链接链接已复制到粘贴板!
要增加现有 overcloud 中裸机节点的数量,请在 overcloud-baremetal-deploy.yaml 文件中增加节点数并重新部署 overcloud。
先决条件
- 新的裸机节点已注册、内省,并可用于调配和部署。有关更多信息,请参阅为 overcloud 注册节点,以及创建 裸机节点硬件的清单。
流程
查找
stackrcundercloud 凭据文件:$ source ~/stackrc-
打开用于置备裸机节点的
overcloud-baremetal-deploy.yaml节点定义文件。 增加您要扩展的角色的
count参数。例如,以下配置将 Object Storage 节点数增加到 4:- name: Controller count: 3 - name: Compute count: 10 - name: ObjectStorage count: 4可选:为新节点配置预测节点放置。例如,使用以下配置在
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- 可选:定义您要分配给新节点的任何其他属性。有关您可以在节点定义文件中配置节点属性的属性的更多信息,请参阅 裸机节点置备属性。
-
如果您使用 Object Storage 服务(swift)和整个磁盘 overcloud 镜像,
overcloud-hardened-uefi-full,请根据磁盘大小以及/var和/srv的存储要求配置/srv分区大小。如需更多信息,请参阅为对象存储服务配置整个磁盘分区。 置备 overcloud 节点:
(undercloud)$ openstack overcloud node provision \ --stack <stack> \ --output <deployment_file> \ /home/stack/templates/overcloud-baremetal-deploy.yaml-
将
<stack> 替换为置备裸机节点的堆栈的名称。如果未指定,则默认为overcloud。 -
将
<deployment_file>替换为用于部署命令生成的 heat 环境文件的名称,如/home/stack/templates/overcloud-baremetal-deployed.yaml。
-
将
在单独的终端中监控调配进度。当置备成功后,节点状态会从
available改为active:(undercloud)$ watch openstack baremetal node list使用其他环境文件将生成的
overcloud-baremetal-deployed.yaml文件添加到堆栈中,并部署 overcloud:(undercloud)$ 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) Object Storage 服务,以提高性能。
如果您要将额外的节点专用于对象存储服务,请编辑自定义 roles_data.yaml 文件,从 Controller 节点中删除 Object Storage 服务条目。具体来说,从 Controller 角色的 ServicesDefault 列表中删除以下行:
- OS::TripleO::Services::SwiftStorage
5.3.4. 更新和重新平衡对象存储环 复制链接链接已复制到粘贴板!
Object Storage 服务(swift)需要所有 Controller 和 Object Storage 节点上的相同的 ring 文件。如果替换 Controller 节点或 Object Storage 节点,则必须在 overcloud 更新后同步这些节点,以确保正常工作。
流程
以
stack用户身份登录 undercloud,再创建一个临时目录:$ mkdir temp && cd temp/将 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提取环,并更改到 ring 子目录:
$ tar xzvf swift-rings.tar.gz && cd var/lib/config-data/puppet-generated/swift_ringbuilder/etc/swift/根据您的设备详情收集以下变量的值:
<device_name>:$ openstack baremetal introspection data save <node_name> | jq ".inventory.disks"<node_ip>:$ metalsmith <node_name> show-
<port> : 默认端口为600x。如果您更改了默认值,请使用适用端口。 -
<builder_file> : 第 3 步中的构建器文件名。 -
<weight> 和 <zone> 变量是用户定义的。
使用
swift-ring-builder将新节点添加到现有环中。根据设备详情替换变量。注意您必须安装
python3-swiftRPM 以使用swift-ring-builder命令。$ swift-ring-builder etc/swift/<builder_file> add <zone>-<node_ip>:<port>/<device_name> <weight>重新平衡环,以确保使用新设备:
$ swift-ring-builder etc/swift/<builder_file> rebalance将修改后的环文件上传到 Controller 节点,并确保使用这些 ring 文件。使用类似以下示例的脚本来分发 ring 文件:
#!/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. 同步节点更改并迁移数据 复制链接链接已复制到粘贴板!
在将新 ring 文件复制到其正确的文件夹后,您必须将更改的环文件发送到 Object Storage (swift)容器。
- 重要的
- 不要同时迁移所有数据。以 10% 为单位迁移数据。例如,将源设备的 weight 配置为 90.0,目标设备配置为 equal 10.0。然后,将源设备的权重配置为 80.0 和 20.0。继续逐步迁移数据,直到您完成这个过程。在迁移过程中,如果您同时移动所有数据,旧数据位于源设备上,但环指向所有副本的新目标设备。在 replicators 已将所有数据移至目标设备之前,无法访问数据。
在迁移过程中,对象存储环会重新分配数据的位置,然后复制器将数据移到新位置。随着集群活动增加,因为负载增加,复制过程会减慢。集群越大,复制传递所需的时间越长。这是预期的行为,但如果客户端访问当前被重新定位的数据,则日志文件中可能会导致 404 错误。当代理尝试从新位置检索数据时,但数据还没有在新位置中检索数据时,
swift-proxy会在日志文件中报告 404 错误。当迁移逐渐时,代理会访问没有移动的副本,且不会发生错误。当代理尝试从替代副本检索数据时,日志文件中的 404 错误会被解决。要确认复制过程正在进行,请参阅复制日志。Object Storage 服务(swift)每五分钟发出复制日志。
流程
使用类似以下示例的脚本,将之前存在的 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"获取当前的 ring 文件集合:
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
要确认数据正在移到新磁盘中,请在新存储节点上运行以下命令:
$ sudo grep -i replication /var/log/container/swift/swift.log
5.3.6. 删除 Object Storage 节点 复制链接链接已复制到粘贴板!
删除 Object Storage (swift)节点的方法有两种:
- 简单移除:此方法在一个操作中删除节点,并适合以较小的数据量为中心的集群。
- 增量移除:更改环,以降低您要删除的节点上磁盘的权重。如果要最大程度降低对存储网络使用量的影响,或者集群包含更多数量的数据,这个方法是适当的。
对于这两种方法,您遵循 缩减裸机节点 流程。但是,为了进行增量移除,请完成这些先决条件,以更改存储环,以减少您要删除的节点上的磁盘权重:
先决条件
- 对象存储环被更新并重新平衡。如需更多信息,请参阅更新和重新平衡对象存储环。
- Object Storage 环中的更改会被同步。如需更多信息,请参阅 同步节点更改和迁移数据。
有关替换对象存储节点的详情,请查看 缩减裸机节点 开始的先决条件。
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
流程
查找
stackrcundercloud 凭据文件:$ source ~/stackrc-
为您要缩减的角色减少
overcloud-baremetal-deploy.yaml文件中的count参数。 -
定义您要从堆栈中删除的每个节点的
主机名和名称(如果尚未在角色的instances属性中定义)。 将属性
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,以将节点返回到堆栈。从 overcloud 中删除节点:
(undercloud)$ openstack overcloud node delete \ --stack <stack> \ --baremetal-deployment /home/stack/templates/overcloud-baremetal-deploy.yaml将
<stack> 替换为置备裸机节点的堆栈的名称。如果未指定,则默认为overcloud。注意不要将您要从堆栈中删除的节点作为命令参数包括在
openstack overcloud node delete命令中。
置备 overcloud 节点,以生成更新的 heat 环境文件,以包含在部署命令中:
(undercloud)$ 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。
-
将
使用其他环境文件,将 provisioning 命令生成的
overcloud-baremetal-deployed.yaml文件添加到堆栈中,并部署 overcloud:(undercloud)$ openstack overcloud deploy \ ... -e /usr/share/openstack-tripleo-heat-templates/environments/deployed-server-environment.yaml \ -e /home/stack/templates/overcloud-baremetal-deployed.yaml \ --deployed-server \ --disable-validations \ ...