5.3. 添加或删除对象存储节点
要向集群添加新的 Object Storage (swift)节点,您必须增加节点数,更新环,并同步更改。您可以通过添加节点到 overcloud 或扩展裸机节点来增加节点数。
要从集群中删除 Object Storage 节点,您可以执行简单删除或增量删除,具体取决于集群中的数据量。
5.3.1. 向 overcloud 添加节点 复制链接链接已复制到粘贴板!
您可以将更多节点添加到 overcloud。
全新安装 Red Hat OpenStack Platform (RHOSP)不包括某些更新,如安全勘误和程序错误修复。因此,如果您要扩展使用红帽客户门户网站或 Red Hat Satellite Server 的连接环境,RPM 更新不会应用到新节点。要将最新的更新应用到 overcloud 节点,您必须执行以下操作之一:
- 在 scale-out 操作后完成节点的 overcloud 更新。
-
使用
virt-customize
工具,在横向扩展操作前将软件包修改为基础 overcloud 镜像。有关更多信息,请参阅红帽知识库解决方案 使用 virt-customize 修改 Red Hat Linux OpenStack Platform Overcloud 镜像。
流程
创建名为
newnodes.json
的新 JSON 文件,其中包含您要注册的新节点的详情:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
以
stack
用户身份登录 undercloud 主机。 查找
stackrc
undercloud 凭证文件:source ~/stackrc
$ source ~/stackrc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注册新节点:
openstack overcloud node import newnodes.json
$ openstack overcloud node import newnodes.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为每个新节点启动内省过程:
openstack overcloud node introspect \ --provide <node_1> [<node_2>] [<node_n>]
$ openstack overcloud node introspect \ --provide <node_1> [<node_2>] [<node_n>]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用--
provide
选项将所有指定节点在内省后重置为available
状态。 -
将
<node_1&
gt;、<node_
2> 以及所有节点(直到 <node_n
>)替换为您要内省的每个节点的 UUID。
-
使用--
为每个新节点配置镜像属性:
openstack overcloud node configure <node>
$ openstack overcloud node configure <node>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.2. 扩展裸机节点 复制链接链接已复制到粘贴板!
要增加现有 overcloud 中裸机节点的数量,请在 overcloud-baremetal-deploy.yaml
文件中增加节点数并重新部署 overcloud。
先决条件
- 新的裸机节点已注册、内省,并可用于调配和部署。有关更多信息,请参阅为 overcloud 注册节点,以及创建 裸机节点硬件的清单。
流程
-
以
stack
用户身份登录 undercloud 主机。 查找
stackrc
undercloud 凭证文件:source ~/stackrc
$ source ~/stackrc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开用于置备裸机节点的
overcloud-baremetal-deploy.yaml
节点定义文件。 增加您要扩展的角色的
count
参数。例如,以下配置将 Object Storage 节点数增加到 4:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:为新节点配置预测节点放置。例如,使用以下配置在
node03
上置备一个新的 Object Storage 节点:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 可选:定义您要分配给新节点的任何其他属性。有关您可以在节点定义文件中配置节点属性的属性的更多信息,请参阅 裸机节点置备属性。
-
如果您使用 Object Storage 服务(swift)和整个磁盘 overcloud 镜像,
overcloud-hardened-uefi-full
,请根据磁盘大小以及/var
和/srv
的存储要求配置/srv
分区大小。如需更多信息,请参阅为对象存储服务配置整个磁盘分区。 置备 overcloud 节点:
openstack overcloud node provision \ --stack <stack> \ --network-config \ --output <deployment_file> \ /home/stack/templates/overcloud-baremetal-deploy.yaml
$ openstack overcloud node provision \ --stack <stack> \ --network-config \ --output <deployment_file> \ /home/stack/templates/overcloud-baremetal-deploy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
&
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-deployment.yaml
文件,而不是/home/stack/templates/overcloud-baremetal-deployed.yaml
文件。如需更多信息,请参阅 执行 overcloud 的使用和 准备 升级框架(16.2 到 17.1)。
-
将
在单独的终端中监控调配进度。当置备成功后,节点状态会从
available
改为active
:watch openstack baremetal node list
$ watch openstack baremetal node list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用其他环境文件将生成的
overcloud-baremetal-deployed.yaml
文件添加到堆栈中,并部署 overcloud:openstack overcloud deploy --templates \ -e [your environment files] \ -e /home/stack/templates/overcloud-baremetal-deployed.yaml \ --disable-validations \ ...
$ openstack overcloud deploy --templates \ -e [your environment files] \ -e /home/stack/templates/overcloud-baremetal-deployed.yaml \ --disable-validations \ ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.3. 定义专用对象存储节点 复制链接链接已复制到粘贴板!
将额外的节点专用于 Red Hat OpenStack Platform (RHOSP) Object Storage 服务,以提高性能。
如果您要将额外的节点专用于对象存储服务,请编辑自定义 roles_data.yaml
文件,从 Controller 节点中删除 Object Storage 服务条目。具体来说,从 Controller
角色的 ServicesDefault
列表中删除以下行:
- OS::TripleO::Services::SwiftStorage
- OS::TripleO::Services::SwiftStorage
5.3.4. 更新和重新平衡对象存储环 复制链接链接已复制到粘贴板!
Object Storage 服务(swift)需要所有 Controller 和 Object Storage 节点上的相同的 ring 文件。如果替换 Controller 节点或 Object Storage 节点,则必须在 overcloud 更新后同步这些节点,以确保正常工作。
流程
以
stack
用户身份登录 undercloud,再创建一个临时目录:mkdir temp && cd temp/
$ mkdir temp && cd temp/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 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
$ 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提取环,并更改到 ring 子目录:
tar xzvf swift-rings.tar.gz && cd \ var/lib/config-data/puppet-generated/swift_ringbuilder/etc/swift/
$ tar xzvf swift-rings.tar.gz && cd \ var/lib/config-data/puppet-generated/swift_ringbuilder/etc/swift/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据您的设备详情收集以下变量的值:
<device_name>
:openstack baremetal introspection data save \ <node_name> | jq ".inventory.disks"
$ openstack baremetal introspection data save \ <node_name> | jq ".inventory.disks"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <node_ip>
:metalsmith <node_name> show
$ metalsmith <node_name> show
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<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> \ add <zone>-<node_ip>:<port>/<device_name> <weight>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新平衡环,以确保使用新设备:
swift-ring-builder etc/swift/<builder_file> rebalance
$ swift-ring-builder etc/swift/<builder_file> rebalance
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将修改后的环文件上传到 Controller 节点,并确保使用这些 ring 文件。使用类似以下示例的脚本来分发 ring 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将环上传到所有节点并重启对象存储服务:
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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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 节点,并重启这些节点上的对象存储服务容器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取当前的 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
ssh "${SRC}" 'sudo tar -czvf - \ /var/lib/config-data/puppet-generated/swift_ringbuilder/etc/swift \ /{*.builder,*.ring.gz,backups/*.builder}' > swift-rings.tar.gz
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将环上传到所有节点并重启对象存储服务:
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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要确认数据正在移到新磁盘中,请在新存储节点上运行以下命令:
sudo grep -i replication /var/log/container/swift/swift.log
$ sudo grep -i replication /var/log/container/swift/swift.log
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
-
以
stack
用户身份登录 undercloud 主机。 查找
stackrc
undercloud 凭证文件:source ~/stackrc
$ source ~/stackrc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
为您要缩减的角色减少
overcloud-baremetal-deploy.yaml
文件中的count
参数。 -
定义您要从堆栈中删除的每个节点的
主机名和
名称
(如果尚未在角色的instances
属性中定义)。 将属性
provisioned: false
添加到您要删除的节点。例如,要从堆栈中删除节点overcloud-objectstorage-1
,请在overcloud-baremetal-deploy.yaml
文件中包含以下片断:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新部署 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
$ openstack overcloud node delete \ --stack <stack> \ --baremetal-deployment \ /home/stack/templates/overcloud-baremetal-deploy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
&
lt;stack> 替换为置备裸机节点的堆栈的名称。如果未指定,则默认为overcloud
。注意不要将您要从堆栈中删除的节点作为命令参数包括在
openstack overcloud node delete
命令中。
删除 ironic 节点:
openstack baremetal node delete <ironic_node_uuid>
$ openstack baremetal node delete <ironic_node_uuid>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<ironic_node_uuid
> 替换为节点的 UUID。删除已删除的节点的网络代理:
for AGENT in $(openstack network agent list \ --host <ironic_node_uuid> -c ID -f value) ; \ do openstack network agent delete $AGENT ; done
(overcloud)$ for AGENT in $(openstack network agent list \ --host <ironic_node_uuid> -c ID -f value) ; \ do openstack network agent delete $AGENT ; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 置备 overcloud 节点,以生成更新的 heat 环境文件,以包含在部署命令中:
openstack overcloud node provision \ --stack <stack> \ --output <deployment_file> \ /home/stack/templates/overcloud-baremetal-deploy.yaml
$ openstack overcloud node provision \ --stack <stack> \ --output <deployment_file> \ /home/stack/templates/overcloud-baremetal-deploy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<deployment_file>
替换为用于部署命令生成的 heat 环境文件的名称,如/home/stack/templates/overcloud-baremetal-deployed.yaml
。
-
将
使用其他环境文件,将 provisioning 命令生成的
overcloud-baremetal-deployed.yaml
文件添加到堆栈中,并部署 overcloud:Copy to Clipboard Copied! Toggle word wrap Toggle overflow