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를 사용 중이므로 이를 수정하여 기본으로 생성되는 디스크 유형이 요구 사항을 충족하도록 합니다.
---
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
}
}
- 리밸런싱 샤드 프로세스의 최대 전송 속도를 구성합니다.
- 사용 상황에 따라 마이그레이션 프로세스의 처리량 속도를 제한할 수 있습니다. 이는 서비스에 영향을 주지 않기 위해 낮 시간에는 낮게, 밤 시간에는 높게 설정할 수 있습니다.
참고: 실제 디스크 처리량에 따라 조정하시기 바랍니다.
- 마이그레이션 상태 확인
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 크기를 다른 노드와 동일한 크기로 변경합니다.
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단계를 반복하여 실행한 후, 다음 명령문을 실행하여 제외 노드를 비웁니다. 그러면 클러스터의 자체 리밸런싱 특성에 따라 자동으로 마지막 빈 노드로 샤드가 리밸런싱됩니다.
검증 방법¶
클러스터 상태에 문제가 없다면 추가 비용이 발생하지 않도록 이전 디스크를 해제하는 것을 잊지 마십시오.
