5.3. 添加或删除对象存储节点
要向集群添加新的 Object Storage (swift)节点,您必须增加节点数,更新环,并同步更改。您可以通过添加节点到 overcloud 或扩展裸机节点来增加节点数。
要从集群中删除 Object Storage 节点,您可以执行简单删除或增量删除,具体取决于集群中的数据量。
5.3.1. 向 overcloud 添加节点
您可以将更多节点添加到 overcloud。
全新安装 Red Hat OpenStack Platform (RHOSP)不包括某些更新,如安全勘误和程序错误修复。因此,如果您要扩展使用红帽客户门户网站或 Red Hat Satellite Server 的连接环境,RPM 更新不会应用到新节点。要将最新的更新应用到 overcloud 节点,您必须执行以下操作之一:
- 在横向扩展操作后,完成节点的 overcloud 更新。
-
在 scale-out 操作前,使用
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.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" } ] }
-
以
stack
用户身份登录 undercloud 主机。 查找
stackrc
undercloud 凭证文件:$ source ~/stackrc
注册新节点:
$ openstack overcloud node import newnodes.json
为每个新节点启动内省过程:
$ openstack overcloud node introspect \ --provide <node_1> [<node_2>] [<node_n>]
-
使用
--provide
选项,在内省后将所有指定的节点重置为available
状态。 -
将
<node_1&
gt; , <node_
2>,将直到 <node_n
> 的所有节点替换为您要内省的每个节点的 UUID。
-
使用
为每个新节点配置镜像属性:
$ openstack overcloud node configure <node>
5.3.2. 扩展裸机节点
要增加现有 overcloud 中的裸机节点数量,请在 overcloud-baremetal-deploy.yaml
文件中增加节点数并重新部署 overcloud。
先决条件
- 新的裸机节点已注册、内省,并可用于调配和部署。如需更多信息,请参阅为 overcloud 注册节点 和 创建裸机节点硬件清单。
流程
-
以
stack
用户身份登录 undercloud 主机。 查找
stackrc
undercloud 凭证文件:$ 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
,请根据您的磁盘大小配置/srv
分区的大小以及/var
和/srv
的存储要求。如需更多信息,请参阅为对象存储服务配置整个磁盘分区。 置备 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)。
-
将
在一个单独的终端中监控置备进度。当置备成功时,节点状态将从
available
变为active
:$ watch openstack baremetal node list
使用其他环境文件将生成的
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 节点,以确保正常工作。
流程
以
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-swift
RPM 以使用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 节点,并确保使用这些环文件。使用类似以下示例的脚本来分发环文件:
#!/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)每五分钟发出复制日志。
流程
使用类似以下示例的脚本,将环文件从之前现有的 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
要确认数据正在移至新磁盘,请在新存储节点上运行以下命令:
$ 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
流程
-
以
stack
用户身份登录 undercloud 主机。 查找
stackrc
undercloud 凭证文件:$ source ~/stackrc
-
对于您要缩减的角色,减少
overcloud-baremetal-deploy.yaml
文件中的count
参数。 -
定义您要从堆栈中删除的每个节点的
主机名和
名称
(如果它们尚未在角色的instances
属性中定义)。 将 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,以将节点返回到堆栈。从 overcloud 删除节点:
$ openstack overcloud node delete \ --stack <stack> \ --baremetal-deployment \ /home/stack/templates/overcloud-baremetal-deploy.yaml
将
&
lt;stack> 替换为置备裸机节点的堆栈名称。如果未指定,则默认为overcloud
。注意不要将您要从堆栈中删除的节点作为命令参数包括在
openstack overcloud node delete
命令中。
删除 ironic 节点:
$ openstack baremetal node delete <IRONIC_NODE_UUID>
将
IRONIC_NODE_UUID
替换为节点的 UUID。置备 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
。
-
将
将 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 \ ...