콘텐츠로 이동

Huawei Cloud OpenSearch 디스크 유형 변경

개요

프로덕션 환경을 배포할 때 비용을 절감하기 위해 OpenSearch 클러스터의 사용량이 많지 않은 경우 I/O와 처리량이 낮은 디스크를 선택하는 경우가 많습니다. 하지만 이후 데이터 양이 증가함에 따라 성능 병목 현상이 발생합니다. 이때 디스크 유형을 변경하여 I/O와 처리량을 높이는 방법을 고려하게 됩니다.

전제 조건

  • Huawei Cloud CCE v1.23
  • 사용 중인 Huawei Cloud 자체 StorageClass csi-disk-topology
  • 고가용성 OpenSearch 클러스터 배포

순서도

아래 작업 단계와 함께 참고하시기 바랍니다.

작업 단계

1단계: csi-disk-topology의 기본 디스크 유형 변경

Huawei Cloud CCE 클러스터에 내장된 StorageClass를 사용 중이므로 이를 수정하여 기본으로 생성되는 디스크 유형이 요구 사항을 충족하도록 합니다.

kubectl edit sc -n middleware csi-disk-topology
---
allowVolumeExpansion: true
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: csi-disk-topology
parameters:
  csi.storage.k8s.io/csi-driver-name: disk.csi.everest.io
  csi.storage.k8s.io/fstype: ext4
  everest.io/disk-volume-type: SSD    ## 디스크 유형 수정
  everest.io/passthrough: "true"
provisioner: everest-csi-provisioner
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
  • 파라미터 설명
파라미트 설명
everest.io/disk-volume-type 클라우드 디스크 유형, 대문자 사용. SAS: 고I/O, SSD: 초고I/O, GPSSD: 범용 SSD, ESSD: 초고속 SSD

2단계: 샤드 마이그레이션 및 속도 조정

  • 노드 이름을 기준으로 노드를 제외하며, 아래 순서대로 작은 것부터 큰 것까지 순차적으로 제외합니다. 노드를 제외하면 해당 데이터 노드에 더 이상 샤드가 기록되지 않습니다. 또한 원래 이 노드에 있던 샤드는 클러스터 자체 리밸런싱 원칙에 따라 다른 노드로 마이그레이션됩니다.

참고, 이 작업을 수행할 때는 다른 노드의 스토리지가 제외된 노드의 데이터를 수용할 수 있는지 확인해야 합니다.

PUT _cluster/settings
{
  "persistent" : {
    "cluster.routing.allocation.exclude._name" : "opensearch-cluster-data-0"
  }
}
  • 리밸런싱 샤드 최대값을 구성합니다.
  • incoming은 기록되는 최대 샤드 수를 나타내며, 일반적으로 제외된 노드를 제외하고 해당 노드가 기록을 수용하는 샤드 수를 의미합니다.
  • outcoming은 출력되는 최대 샤드 수를 나타냅니다. 일반적으로 제외된 노드가 출력하는 샤드 수를 의미합니다. 나머지 노드 수 * 기록되는 최대 샤드 수로 설정하는 것을 권장합니다.
PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.node_concurrent_incoming_recoveries": 2, 
    "cluster.routing.allocation.node_concurrent_outgoing_recoveries": 12
  }
}
  • 리밸런싱 샤드 프로세스의 최대 전송 속도를 구성합니다.
  • 사용 상황에 따라 마이그레이션 프로세스의 처리량 속도를 제한할 수 있습니다. 이는 서비스에 영향을 주지 않기 위해 낮 시간에는 낮게, 밤 시간에는 높게 설정할 수 있습니다.
PUT _cluster/settings
{
  "persistent": {
    "indices.recovery.max_bytes_per_sec": "100mb"
  }
}

참고: 실제 디스크 처리량에 따라 조정하시기 바랍니다.

  • 마이그레이션 상태 확인
GET _cluster/health  ## 클러스터 상태 확인
GET _cat/tasks?v     ## 상세 샤드 정보 확인
GET _cat/indices?v&s=health:desc     ## 인덱스 상태를 순서대로 확인

3단계: 디스크 교체

  • 이전에 제외한 데이터 노드의 pvc와 pod를 삭제하여 1단계에서 수정한 StorageClass를 자동으로 사용하도록 합니다.
  • 삭제 순서가 틀리지 않도록 주의합니다.
kubectl delete pvc -n middleware opensearch-cluster-data-opensearch-cluster-data-0
kubectl delete pods -n middleware opensearch-cluster-data-0

pvc 삭제 시 멈출 수 있으므로 Ctrl + c를 눌러 건너뛰면 됩니다.

4단계: 새 디스크 확장

  • Huawei Cloud 콘솔에서 새로 생성된 디스크를 필요한 크기로 확장합니다.

  • 해당 데이터 노드의 pvc 크기를 다른 노드와 동일한 크기로 변경합니다.

kubectl edit pvc -n middleware opensearch-cluster-data-opensearch-cluster-data-0
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2500Gi    ## 다른 노드와 동일한 크기로 수정
  storageClassName: csi-disk-topology
  volumeMode: Filesystem
  volumeName: pvc-7025138f-04e0-4d5b-879d-7cf998f54628

참고: 디스크는 확장만 가능하고 축소는 불가능하므로 크기를 신중하게 선택해야 합니다.

5단계: 노드 제외 해제

전체 클러스터를 마이그레이션하는 것이므로 위의 2-4단계는 하나의 데이터 노드 디스크 유형만 마이그레이션하고 교체한 것입니다. 따라서 모든 노드의 디스크 유형을 교체할 때까지 2-4단계를 반복하여 실행한 후, 다음 명령문을 실행하여 제외 노드를 비웁니다. 그러면 클러스터의 자체 리밸런싱 특성에 따라 자동으로 마지막 빈 노드로 샤드가 리밸런싱됩니다.

PUT _cluster/settings
{
  "persistent" : {
    "cluster.routing.allocation.exclude._name" : ""
  }
}

검증 방법

GET _cluster/health

클러스터 상태에 문제가 없다면 추가 비용이 발생하지 않도록 이전 디스크를 해제하는 것을 잊지 마십시오.

문서 평가

이 페이지가 도움이 되었나요?