Show Table of Contents
9.5. 替换 Object 存储节点
要在 Object 存储集群中替换节点,您需要:
- 更新带有新 Object 存储节点的 Overcloud,防止 Director 创建 ring 文件。
- 使用
swift-ring-builder对节点手工添加或删除节点。
以下介绍了在保证集群正常的情况下,如何替换节点的方法。在这个示例中,有一个带有 2 个节点 的 Object 存储集群。我们需要添加一个额外的节点,然后替换有问题的节点。
首先,创建一个包括以下内容的环境文件(名为
~/templates/swift-ring-prevent.yaml):
parameter_defaults: SwiftRingBuild: false RingBuild: false ObjectStorageCount: 3
SwiftRingBuild 和 RingBuild 参数分别定义了 Overcloud 是否自动为 Object 存储和 Controller 节点自动构建 ring 文件。ObjectStorageCount 定义了在环境中有多少个 Object 存储节点。在这里,我们把节点数从 2 个扩展为 3 个。
在
openstack overcloud deploy 命令中包括 swift-ring-prevent.yaml 文件,以及 Overcloud 中的其它环境文件:
$ openstack overcloud deploy --templates [ENVIRONMENT_FILES] -e swift-ring-prevent.yaml
注意
把这个文件添加到环境文件的最后,从而使它的参数可以覆盖前面的环境文件参数。
在部署完成后,Overcloud 就包括了一个额外的 Object 存储节点。但是,这个节点的存储目录还没有创建,用于节点对象存储的 ring 文件也没有构建。这意味着,您需要手工创建存储目录,并手工构建 ring 文件。
登录到新节点并创建存储目录:
$ sudo mkdir -p /srv/node/d1 $ sudo chown -R swift:swift /srv/node/d1
注意
您还可以在这个目录中挂载一个外部存储设备。
把存在的 ring 文件复制到节点。以
heat-admin 用户身份登录到一个 Controller 节点,然后切换到超级用户(superuser)。例如,对于一个 IP 地址为 192.168.201.24 的 Controller 节点:
$ ssh heat-admin@192.168.201.24 $ sudo -i
把
/etc/swift/*.builder 文件从 Controller 节点复制到新的 Object 存储节点的 /etc/swift/ 目录中。如果需要,把文件放到 director 主机上:
[root@overcloud-controller-0 ~]# scp /etc/swift/*.builder stack@192.1.2.1:~/.
然后,把文件放到新节点上:
[stack@director ~]$ scp ~/*.builder heat-admin@192.1.2.24:~/.
以
heat-admin 用户的身份登录到新的 Object 存储节点上,然后切换到超级用户。例如,对于 IP 地址为 192.168.201.29 的 Object 存储节点:
$ ssh heat-admin@192.168.201.29 $ sudo -i
把文件复制到
/etc/swift 目录:
# cp /home/heat-admin/*.builder /etc/swift/.
把新的 Object 存储节点添加到帐号、容器和对象 ring 中。为新节点运行以下命令:
# swift-ring-builder /etc/swift/account.builder add zX-IP:6002/d1 weight # swift-ring-builder /etc/swift/container.builder add zX-IP:6001/d1 weight # swift-ring-builder /etc/swift/object.builder add zX-IP:6000/d1 weight
在这些命令中替换以下值:
- zX
- 使用代表特定区的一个整数替换 X(例如,Zone 1 的值为 1)。
- IP
- 帐号、容器和对象服务要监听的 IP 地址。这应该和每个存储节点的 IP 地址相匹配,特别是和
/etc/swift/object-server.conf、/etc/swift/account-server.conf和/etc/swift/container-server.conf中的DEFAULT部分中的bind_ip的值相匹配。 - weight
- 表示一个设备和其它设备相比较的相对权重。它的值通常是 100。
注意
针对 rings 文件运行
swift-ring-builder 命令来检查当前节点存在的值:
# swift-ring-builder /etc/swift/account.builder
删除您需要从账户、容器和对象 ring 中替换的节点。为每个节点运行以下命令:
# swift-ring-builder /etc/swift/account.builder remove IP # swift-ring-builder /etc/swift/container.builder remove IP # swift-ring-builder /etc/swift/object.builder remove IP
使用节点的 IP 地址替换 IP。
在所以节点间重新分布分区:
# swift-ring-builder /etc/swift/account.builder rebalance # swift-ring-builder /etc/swift/container.builder rebalance # swift-ring-builder /etc/swift/object.builder rebalance
把所有
/etc/swift/ 内容的所有者设置改为 root 用户和 swift 组:
# chown -R root:swift /etc/swift
重启
openstack-swift-proxy 服务:
# systemctl restart openstack-swift-proxy.service
到此为止,ring 文件(*.ring.gz 和 *.builder)应该已在新节点上被更新:
/etc/swift/account.builder /etc/swift/account.ring.gz /etc/swift/container.builder /etc/swift/container.ring.gz /etc/swift/object.builder /etc/swift/object.ring.gz
把这些文件从复制到 Controller 节点和存在的 Object 存储节点(除去要删除的节点)的
/etc/swift/ 目录中。如果需要,把文件放置到 director 主机:
[root@overcloud-objectstorage-2 swift]# scp *.builder stack@192.1.2.1:~/ [root@overcloud-objectstorage-2 swift]# scp *.ring.gz stack@192.1.2.1:~/
把这个文件复制到每个节点的
/etc/swift/ 中。
在每个节点中,把所有
/etc/swift/ 内容的所有者设置改为 root 用户和 swift 组:
# chown -R root:swift /etc/swift
新节点被添加并作为 ring 的一部分。在把旧节点从 ring 中删除前,请确认新节点已完成了一个完整的数据复制过程。
为了从 ring 中删除旧节点,减少
ObjectStorageCount 的值。在这个示例中,我们把它从 3 减为 2:
parameter_defaults: SwiftRingBuild: false RingBuild: false ObjectStorageCount: 2
创建一个环境文件(
remove-object-node.yaml)来指定并删除旧的 Object 存储节点。在这个示例中,我们删除 overcloud-objectstorage-1:
parameter_defaults:
ObjectStorageRemovalPolicies:
[{'resource_list': ['1']}]
在部署命令中包括这两个环境文件:
$ openstack overcloud deploy --templates -e swift-ring-prevent.yaml -e remove-object-node.yaml ...
director 从 Overcloud 中删除 Object 存储节点,并更新 Overcloud 中的其它节点来使删除生效。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.