8장. OpenShift 노드에서 Red Hat OpenStack Services로 Object Storage 서비스 마이그레이션
Red Hat OpenStack Platform Object Storage 서비스(swift)를 Object Storage 서비스로 사용하는 경우 OpenShift 노드의 Object Storage 서비스를 Red Hat OpenStack Services로 마이그레이션해야 합니다.
Ceph Object Gateway(RGW)의 Object Storage API를 사용하는 경우 이 장을 건너뛰고 Red Hat Ceph Storage 클러스터를 마이그레이션할 수 있습니다. 자세한 내용은 Red Hat Ceph Storage 클러스터 마이그레이션을 참조하십시오. 컨트롤러 노드에서 Ceph 데몬을 마이그레이션하지 않으려면 Ceph 수신 데몬 배포 및 Object Storage 서비스 끝점을 생성하거나 업데이트하는 데 설명된 단계를 수행해야 합니다.
데이터 마이그레이션은 복제본에 의해 복제됩니다. 예를 들어 복제본이 3개인 경우 다른 두 복제본이 계속 작동하는지 확인하기 위해 한 번에 하나씩 이동하여 마이그레이션 중에 Object Storage 서비스를 계속 사용할 수 있습니다.
새 배포로 데이터 마이그레이션은 대부분 백그라운드에서 실행되는 장기 실행 프로세스입니다. Object Storage 서비스 복제자는 사용된 스토리지 크기에 따라 데이터를 이전 노드에서 새 노드로 이동할 수 있습니다. 다운타임을 줄이기 위해 실행 중인 경우 이전 노드를 사용하고 마이그레이션이 완료될 때까지 다른 서비스를 계속 채택할 수 있습니다. 네트워크의 복제 트래픽 양으로 인해 성능이 저하될 수 있습니다.
8.1. RHOSP에서 RHOSO 노드로 Object Storage 서비스 데이터 마이그레이션 링크 복사링크가 클립보드에 복사되었습니다!
Object Storage 서비스(swift) 마이그레이션에는 다음 단계가 포함됩니다.
- Object Storage 서비스 링에 새 노드를 추가합니다.
- 기존 노드의 weights를 0으로 설정합니다.
- 하나의 복제본을 이동하여 링을 리밸런스합니다.
- 링을 기존 노드에 복사하고 서비스를 다시 시작합니다.
- 복제 상태를 확인하고 이전 노드가 드레이닝될 때까지 이전 두 단계를 반복합니다.
- 링에서 이전 노드를 제거합니다.
사전 요구 사항
- 오브젝트 스토리지 서비스를 채택합니다. 자세한 내용은 오브젝트 스토리지 서비스 변경을 참조하십시오.
DNS 서버의 경우 모든 기존 노드가 Red Hat OpenShift Container Platform (RHOCP) Pod의 호스트 이름을 확인할 수 있는지 확인합니다. 예를 들어
/etc/resolv.conf의 네임 서버로 DNSMasq 서비스의 외부 IP를 사용합니다.$ oc get service dnsmasq-dns -o jsonpath="{.status.loadBalancer.ingress[0].ip}" | $CONTROLLER1_SSH sudo tee /etc/resolv.confswift-dispersion툴을 사용하여 복제의 현재 상태를 추적합니다.$ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-dispersion-populate'명령을 완료하는 데 몇 분이 걸릴 수 있습니다. Object Storage 서비스 배포에 분산된 0바이트 오브젝트를 만들고, 나중에
swift-dispersion-report를 사용하여 현재 복제 상태를 표시할 수 있습니다.$ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-dispersion-report'swift-dispersion-report명령의 출력은 다음과 유사합니다.Queried 1024 containers for dispersion reporting, 5s, 0 retries 100.00% of container copies found (3072 of 3072) Sample represents 100.00% of the container partition space Queried 1024 objects for dispersion reporting, 4s, 0 retries There were 1024 partitions missing 0 copies. 100.00% of object copies found (3072 of 3072) Sample represents 100.00% of the object partition space
프로세스
SwiftStorage 리소스를 0에서 3으로 확장하여 새 노드를 추가합니다.
$ oc patch openstackcontrolplane openstack --type=merge -p='{"spec":{"swift":{"template":{"swiftStorage":{"replicas": 3}}}}}'이 명령은 영구 볼륨 클레임을 사용하는RHOCP(Red Hat OpenShift Container Platform) 클러스터에 세 개의 스토리지 인스턴스를 생성합니다.
3개의 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'현재 링에서 드레이닝할 노드의 스토리지 관리 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출력은 다음과 유사합니다.
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이 드레이닝됩니다.$ 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'배포에 따라 명령에 포함할 노드가 더 많이 있을 수 있습니다.
업데이트된 링을 복사하여 원래 노드에 적용합니다. Object Storage 서비스 데이터를 저장하는 기존 노드에 대해 ssh 명령을 실행합니다.
$ 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_*"swift-dispersion-report툴을 사용하여 복제 진행 상황을 추적합니다.$ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c "swift-ring-tool get && swift-dispersion-report"출력에 생성된 사본의 100% 미만이 표시됩니다. 모든 컨테이너 및 오브젝트 복사본이 발견될 때까지 명령을 반복합니다.
Queried 1024 containers for dispersion reporting, 6s, 0 retries There were 5 partitions missing 1 copy. 99.84% of container copies found (3067 of 3072) Sample represents 100.00% of the container partition space Queried 1024 objects for dispersion reporting, 7s, 0 retries There were 739 partitions missing 1 copy. There were 285 partitions missing 0 copies. 75.94% of object copies found (2333 of 3072) Sample represents 100.00% of the object partition space링의 재조정 및 배포를 통해 다음 복제본을 새 노드로 이동합니다.
$ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c ' swift-ring-tool get swift-ring-tool rebalance swift-ring-tool push' $ 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_*"swift-dispersion-report출력을 다시 모니터링하고 모든 복사본이 발견될 때까지 기다린 다음 모든 복제본을 새 노드로 이동할 때까지 반복합니다.링에서 노드를 제거합니다.
$ 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'참고모든 복제본이 새 노드에 있고
swift-dispersion-report명령에서 발견된 복사본의 100%를 보고하더라도 이전 노드에 데이터가 계속 있을 수 있습니다. 복제자는 이 데이터를 제거하지만 더 많은 시간이 걸릴 수 있습니다.
검증
클러스터에 있는 모든 디스크의 디스크 사용량을 확인합니다.
$ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-recon -d'노드의
/srv/node디렉터리에 더 이상\*.db또는*.data파일이 없는지 확인합니다.$CONTROLLER1_SSH "find /srv/node/ -type f -name '*.db' -o -name '*.data' | wc -l"