第 6 章 将 Object Storage 服务迁移到 OpenShift 节点上的 Red Hat OpenStack Services
如果将 Red Hat OpenStack Platform Object Storage 服务(swift)用作对象存储服务,您必须将 Object Storage 服务迁移到 OpenShift 节点上的 Red Hat OpenStack Services。
如果您使用 Ceph 对象网关(RGW)的 Object Storage API,您可以跳过本章并迁移 Red Hat Ceph Storage 集群。有关更多信息,请参阅 迁移 Red Hat Ceph Storage 集群。如果您不规划从 Controller 节点迁移 Ceph 守护进程,您必须执行 部署 Ceph ingress 守护进程和 创建或更新 Object Storage 服务端点 中描述的步骤。
数据迁移按副本发生。例如,如果您有 3 个副本,请一次移动它们,以确保其他 2 个副本仍在运行,这样可允许您在迁移期间继续使用 Object Storage 服务。
数据迁移到新部署是一个长时间运行的进程,主要在后台执行。对象存储服务 replicators 将数据从旧节点移到新节点,这可能需要很长时间,具体取决于所使用的存储量。要减少停机时间,如果节点正在运行,可以在等待迁移完成时继续使用其他服务,则可以使用它们。由于网络中的复制流量数量,性能可能会降低。
6.1. 将对象存储服务数据从 RHOSP 迁移到 RHOSO 节点 复制链接链接已复制到粘贴板!
Object Storage 服务(swift)迁移涉及以下步骤:
- 将新节点添加到对象存储服务环中。
- 将现有节点的 weight 设置为 0。
- 通过移动一个副本来重新平衡环。
- 将 ring 复制到旧节点并重新启动服务。
- 检查复制状态并重复前面的两个步骤,直到旧节点排空为止。
- 从环中删除旧节点。
先决条件
- 采用对象存储服务。如需更多信息,请参阅 使用对象存储服务。
对于 DNS 服务器,请确保所有现有节点能够解析 Red Hat OpenShift Container Platform (RHOCP) pod 的主机名,例如,将 DNSMasq 服务的外部 IP 用作
/etc/resolv.conf
中的名称服务器:oc get service dnsmasq-dns -o jsonpath="{.status.loadBalancer.ingress[0].ip}" | $CONTROLLER1_SSH sudo tee /etc/resolv.conf
$ oc get service dnsmasq-dns -o jsonpath="{.status.loadBalancer.ingress[0].ip}" | $CONTROLLER1_SSH sudo tee /etc/resolv.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
swift-dispersion
工具跟踪复制的当前状态:oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-dispersion-populate'
$ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-dispersion-populate'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令可能需要几分钟时间来完成。它创建在对象存储服务部署中分发的 0 字节对象,之后您可以使用
swift-dispersion-report
来显示当前的复制状态:oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-dispersion-report'
$ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-dispersion-report'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow swift-dispersion-report
命令的输出类似如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
通过将 SwiftStorage 资源从 0 扩展到 3 来添加新节点:
oc patch openstackcontrolplane openstack --type=merge -p='{"spec":{"swift":{"template":{"swiftStorage":{"replicas": 3}}}}}'
$ oc patch openstackcontrolplane openstack --type=merge -p='{"spec":{"swift":{"template":{"swiftStorage":{"replicas": 3}}}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令在使用持久性卷声明的 Red Hat OpenShift Container Platform (RHOCP)集群上创建三个存储实例。
等待所有三个 pod 都在运行,且环包括新设备:
oc wait pods --for condition=Ready -l component=swift-storage oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-ring-builder object.builder search --device pv'
$ oc wait pods --for condition=Ready -l component=swift-storage $ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-ring-builder object.builder search --device pv'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从当前的环中,获取节点的存储管理 IP 地址以排空:
oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-ring-builder object.builder search _' | tail -n +2 | awk '{print $4}' | sort -u
$ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-ring-builder object.builder search _' | tail -n +2 | awk '{print $4}' | sort -u
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出结果类似如下:
172.20.0.100 swift-storage-0.swift-storage.openstack.svc swift-storage-1.swift-storage.openstack.svc swift-storage-2.swift-storage.openstack.svc
172.20.0.100 swift-storage-0.swift-storage.openstack.svc swift-storage-1.swift-storage.openstack.svc swift-storage-2.swift-storage.openstack.svc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 排空旧节点。在以下示例中,旧节点
172.20.0.100
排空:oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c '
$ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c ' swift-ring-tool get swift-ring-tool drain 172.20.0.100 swift-ring-tool rebalance swift-ring-tool push'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据您的部署,您可能在命令中包含更多节点。
将更新的环复制到原始节点。为存储对象存储服务数据的现有节点运行 ssh 命令:
oc extract --confirm cm/swift-ring-files
$ oc extract --confirm cm/swift-ring-files $CONTROLLER1_SSH "tar -C /var/lib/config-data/puppet-generated/swift/etc/swift/ -xzf -" < swiftrings.tar.gz $CONTROLLER1_SSH "systemctl restart tripleo_swift_*"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
swift-dispersion-report
工具跟踪复制进度:oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c "swift-ring-tool get && swift-dispersion-report"
$ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c "swift-ring-tool get && swift-dispersion-report"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示找到的副本的 100% 少。重复该命令,直到找到所有容器和对象副本:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过重新平衡并分发环,将下一个副本移到新节点:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 再次监控
swift-dispersion-report
输出,等待所有副本都找到,然后重复这个步骤,直到所有副本都移到新节点。从环移除节点:
oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c '
$ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c ' swift-ring-tool get swift-ring-tool remove 172.20.0.100 swift-ring-tool rebalance swift-ring-tool push'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意即使所有副本都位于新节点上,而
swift-dispersion-report
命令也会报告找到副本的 100%,可能仍然是旧节点上的数据。replicators 删除这个数据,但可能需要更长的时间。
验证
检查集群中的所有磁盘的磁盘用量:
oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-recon -d'
$ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-recon -d'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认节点上的
/srv/node
目录中没有更多
文件:\*.db
或 5.2.data$CONTROLLER1_SSH "find /srv/node/ -type f -name '*.db' -o -name '*.data' | wc -l"
$CONTROLLER1_SSH "find /srv/node/ -type f -name '*.db' -o -name '*.data' | wc -l"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow