가상화 워크로드를 위한 ODF 성능 조정

가상 사설 클라우드 4.20 그리고 나중에 베어 메탈 워커 노드만

적절한 성능 프로필을 선택하고, OSD 포드 리소스 제한을 조정하며, 대량 데이터 작업을 구성함으로써 가상화 워크로드에 대한 OpenShift Data Foundation(ODF)의 스토리지 성능을 향상시킬 수 있습니다. 이 옵션들은 OpenShift 가상화 및 Red Hat OpenShift 가상화 서비스 클러스터가 수동으로 배포된 Red Hat OpenShift on IBM Cloud 클러스터에 적용됩니다.

시작하기 전에

  • 클러스터에 대한 cluster-admin 액세스 권한이 있어야 합니다.
  • IBM Cloud CLI와 oc CLI를 설치하거나 업데이트하십시오.
  • 리소스 제한을 조정하거나 스토리지 풀을 구성하기 전에 ODF가 설치되어 있고 정상 상태여야 합니다. ODF 상태를 확인하려면 ‘Ceph 클러스터 상태 확인’을 참조하십시오.

ODF 성능 프로필 선택

ODF는 스토리지 구성 요소에 대한 CPU 및 메모리 할당을 제어하는 두 가지 성능 프로필을 제공합니다. 자신의 업무량에 가장 적합한 프로필을 선택하세요.

성능
‘균형’ 프로필보다 더 많은 CPU와 메모리를 할당합니다. 데이터베이스나 트래픽이 많은 애플리케이션 등 높은 처리량과 낮은 지연 시간이 필요한 ‘ VM ’ 워크로드에는 이 프로필을 사용하십시오.
밸런스 상태
CPU와 메모리를 적당히 할당합니다. 이 프로필은 범용 워크로드, 혼합 환경 또는 비용 최적화 배포에 사용하십시오.

ODF를 배포할 때는 ‘저장소’ 아래의 ‘리소스 프로필 ’ 필드에서 ‘성능’을 선택하십시오. 가상화 서비스 클러스터에서는 기본적으로 ‘성능’이 선택되어 있습니다.

콘솔이나 CLI에서 프로필을 설정할 수 있습니다.

  • 콘솔 - 표준 Red Hat OpenShift on IBM Cloud 클러스터: ODF 애드온을 설치할 때 ‘Backing storage ’ 섹션에서 ‘Performance’를 선택하십시오.
  • 콘솔 - 가상화 서비스 클러스터: 기본적으로 ‘성능’이 선택되어 있습니다. 이를 변경하려면 클러스터 생성 과정에서 ‘가상화 통합(Virtualization integrations )’ 섹션에 있는 ‘ OpenShift Data Foundation’ 카드에서 ‘편집(Edit)’을 선택하십시오.

이 옵션은 표준 Red Hat OpenShift on IBM Cloud 클러스터에만 적용됩니다. 가상화 서비스 클러스터의 경우, 클러스터 생성 시 프로필을 설정합니다.

CLI에서 애드온을 활성화할 때 --param "resourceProfile=performance" 를 포함하십시오:

ibmcloud oc cluster addon enable openshift-data-foundation \
  -c <cluster-name> \
  --version <addon-version> \
  --param "odfDeploy=true" \
  --param "osdStorageClassName=localblock" \
  --param "autoDiscoverDevices=true" \
  --param "resourceProfile=performance" \
  --param "setDefaultStorageClassForVirtualization=true"

모든 ODF 추가 매개변수에 대한 자세한 내용은 OpenShift 의 Data Foundation 매개변수 참조를 참조하십시오.

OSD 포드 리소스 제한 구성

Object Storage Daemon(OSD) 포드는 데이터를 저장하고, 데이터 배치 및 복제 작업에 참여합니다. I/O 부하가 높은 가상화 워크로드의 경우, OSD 포드의 CPU 및 메모리 제한을 늘려 병목 현상을 완화할 수 있습니다.

현재 OSD 리소스 제한 사항 확인

리소스 제한을 수정하기 전에, OSD 포드의 현재 CPU 및 메모리 설정을 확인하십시오. 현재 요청 사항과 한도를 기록해 두었다가, 나중에 실제 사용량 및 업데이트된 수치와 비교해 볼 수 있도록 하십시오.

oc get pods -n openshift-storage -l app=rook-ceph-osd \
  -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{range .spec.containers[*]}  Container: {.name}{"\n"}    Requests - CPU: {.resources.requests.cpu}, Memory: {.resources.requests.memory}{"\n"}    Limits   - CPU: {.resources.limits.cpu}, Memory: {.resources.limits.memory}{"\n"}{end}{"\n"}{end}'

출력 결과를 검토하여 각 OSD 컨테이너의 현재 CPU 및 메모리 요청량과 제한 사항을 확인하십시오. 다음 명령어를 실행하여 이 값들을 실제 사용량과 비교해 보세요. CPU 또는 메모리 사용량이 설정된 한도에 지속적으로 근접하는 경우, 한도를 높이면 병목 현상을 줄이는 데 도움이 될 수 있습니다.

실제 리소스 사용량을 확인하려면 다음 명령을 실행하고, CPU 및 메모리 사용량을 앞서 기록해 둔 제한값과 비교해 보십시오:

oc adm top pods -n openshift-storage -l app=rook-ceph-osd

OSD 리소스 제한값 늘리기

VM 워크로드에 대해 현재 할당된 제한이 충분하지 않은 경우, ocs-storagecluster 리소스를 편집하여 제한을 업데이트하십시오.

또한 ocs-storagecluster 구성에서 mon, mgr, rgw 등과 같은 다른 Rook-Ceph 포드의 제한 사항도 수정할 수 있습니다. 자세한 내용은 Red Hat 의 해결 방법 6959127을 참조하십시오.

  1. 저장소 클러스터 리소스를 편집 모드로 엽니다.

    oc edit storagecluster ocs-storagecluster -n openshift-storage
    
  2. 해당 ‘ storageDeviceSets ’ 항목에서 ‘ resources ’ 필드를 추가하거나 수정하십시오. 다음은 CPU 4개와 메모리 24 Gi로 제한을 설정하고, CPU 2개와 메모리 24 Gi를 요청하는 부분 예시입니다:

    storageDeviceSets:
      - name: ocs-deviceset
        resources:
          limits:
            cpu: "4"
            memory: "24Gi"
          requests:
            cpu: "2"
            memory: "24Gi"
    

    CPU 및 메모리 요청량은 제한치 이하이어야 합니다.

  3. 편집기를 저장 후 종료하십시오.

    변경 사항을 저장하면 OSD 포드가 자동으로 재시작됩니다. 다른 스토리지 작업을 수행하기 전에 롤링 재시작이 완료될 때까지 기다리십시오.

업데이트된 리소스 제한 사항을 확인하십시오

롤링 재시작이 완료된 후, 업데이트된 제한 사항이 모든 OSD 포드에 적용되었는지 확인하십시오.

  1. 롤링 재시작 과정을 모니터링하여 모든 OSD 포드가 ‘ Running ’ 상태로 복귀하는지 확인하십시오. 모든 OSD 포드의 상태가 “ Running ”로 표시되고, “ Pending ” 또는 “ Terminating ” 상태인 포드가 하나도 없을 때 재시작이 완료된 것입니다.

    oc get pods -n openshift-storage | grep osd | grep -v prepare | grep -v rotation
    
  2. 새로운 리소스 값이 적용되었는지 확인하십시오.

    oc get pods -n openshift-storage -l app=rook-ceph-osd \
      -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{range .spec.containers[*]}  Container: {.name}{"\n"}    Requests - CPU: {.resources.requests.cpu}, Memory: {.resources.requests.memory}{"\n"}    Limits   - CPU: {.resources.limits.cpu}, Memory: {.resources.limits.memory}{"\n"}{end}{"\n"}{end}'
    

    CPU 및 메모리 값이 사용자가 설정한 값과 일치하는지 확인하십시오.

대용량 데이터 처리를 위한 일괄 처리 플래그 설정

VM 마이그레이션, 대량 가져오기 또는 데이터 아카이빙과 같은 대규모 데이터 작업의 경우, Ceph 블록 풀에서 대량 처리 플래그를 활성화하면 OSD 간 초기 데이터 분배가 개선되고 재균형 조정 오버헤드가 줄어듭니다.

벌크 플래그는 일반적으로 다음과 같은 용도로 사용됩니다:

  • VM 수 TB에 달하는 데이터가 포함된 디스크 마이그레이션 및 가져오기 작업.
  • 백업 및 복원 작업.
  • 새로운 애플리케이션에 대한 초기 데이터 로드.
  • 데이터 보관 풀.

CephBlockPool 리소스를 대량 처리 플래그가 활성화된 상태로 구성하려면 다음 단계를 따르십시오.

  1. CephBlockPool 리소스 정의를 생성하거나 업데이트하여, parameters 섹션에 bulk: "true"``이 포함되도록 하십시오.

    apiVersion: ceph.rook.io/v1
    kind: CephBlockPool
    metadata:
      name: <pool-name>
      namespace: openshift-storage
    spec:
      replicated:
        size: 3
      parameters:
        bulk: "true"
    
  2. 구성 파일을 적용하십시오.

    oc apply -f <pool-config-file>.yaml
    

    구성을 적용하면 Ceph는 처음부터 새로운 데이터를 풀 전체에 더 고르게 분산시킬 수 있습니다. 이러한 방식은 풀이 채워짐에 따라 리밸런싱 횟수를 줄일 수 있습니다.

Ceph 클러스터 상태 확인

Ceph 클러스터를 정기적으로 모니터링하여 성능 문제를 파악하고 데이터 무결성을 보장하십시오. 구성을 변경하기 전과 후에 상태 점검을 실행하십시오.

기본 상태 점검 실행하기

Ceph의 전반적인 상태 요약 정보를 확인하려면 다음 명령어를 실행하십시오. 정상적인 클러스터는 HEALTH_OK``를 반환합니다.

oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph status

현재 발생 중인 경고나 오류를 확인하려면 다음 명령을 실행하십시오:

oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph health detail

클러스터 상태 이해하기

ceph status 의 출력에는 데이터 상태를 나타내는 배치 그룹(PG) 상태가 포함됩니다.

활성/깨끗한
이상적인 상태. 모든 배치 그룹이 활성 상태이며, 모든 데이터가 복제되어 있고, 데이터 이동은 발생하지 않습니다. 조치가 필요하지 않습니다.
활성화됨+재매핑됨, 활성화됨+백필링 중, 활성화됨+복구 중
데이터가 재분배되고 있습니다. OSD 리소스 변경, 노드 교체 또는 확장 작업 후에는 이러한 상태가 정상적으로 나타납니다. 추가 변경을 적용하기 전에 클러스터가 ‘ active/clean ’ 상태로 돌아올 때까지 기다리십시오.

올바른 출력 예시:

HEALTH_OK

재조정 중의 출력 예시:

HEALTH_WARN
  Degraded data redundancy: 123/456 objects degraded (26.974%)
  Recovery 50/456 objects degraded (10.965%)

배치 그룹 및 OSD 상태 확인

데이터 분포 및 OSD 상태에 대한 보다 자세한 정보를 확인하려면 다음 점검 항목을 수행하십시오.

  1. 배정 그룹 상태를 확인하여 ‘ active+clean ’ 상태가 아닌 그룹을 파악하십시오.

    oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph pg stat
    
  2. 각 OSD의 상태를 확인하여 OSD가 upin 상태인지 확인하십시오.

    oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph osd status
    

다음 단계