고가용성 OpenSearch¶
개요¶
OpenSearch는 Elasticsearch OSS 7.10.2에서 파생된 오픈 소스 분산 검색 및 분석 제품군입니다. 대화형 로그 분석, 실시간 애플리케이션 모니터링, 데이터 분석과 같은 기본 기능을 손쉽게 수행할 수 있습니다.
| 노드 유형 | 설명 | 프로덕션 모범 사례 |
|---|---|---|
| Cluster manager | 클러스터의 전체 작업을 관리하고 클러스터 상태를 추적합니다. 여기에는 인덱스 생성 및 삭제, 클러스터에 조인하거나 떠나는 노드 추적, ping 요청을 실행하여 클러스터 내 각 노드의 상태 확인, 노드에 샤드 할당 등이 포함됩니다. | 거의 모든 프로덕션 사용 사례에서 세 개의 서로 다른 영역에 세 개의 전용 클러스터 관리자 노드를 두는 것이 올바른 방법입니다. 이 구성은 클러스터가 쿼럼을 잃지 않도록 보장합니다. 두 노드는 대부분의 시간 동안 유휴 상태이며, 다른 노드에 장애가 발생하거나 유지보수가 필요할 때만 사용됩니다. |
| Cluster manager eligible | 투표 과정을 통해 그중 하나의 노드가 클러스터 관리자 노드로 선택됩니다. | 프로덕션 클러스터의 경우 전용 클러스터 관리자 노드를 보유해야 합니다. 전용 노드 유형을 구현하는 방법은 다른 모든 노드 유형을 false로 표시하는 것입니다. 이 경우 다른 모든 노드는 클러스터 관리자 eligible 노드가 아닌 것으로 표시해야 합니다. |
| Data | 데이터를 저장하고 검색합니다. 로컬 샤드에서 데이터 관련 작업(인덱싱, 검색, 집계)을 모두 수행합니다. 이들은 클러스터의 작업 노드이며 다른 노드 유형보다 더 많은 디스크 공간이 필요합니다. | 데이터 노드를 추가할 때는 영역 간 균형을 유지하세요. 예를 들어, 세 개의 영역이 있는 경우 세 개의 배수로 데이터 노드를 추가하고 각 영역에 하나씩 배치합니다. 스토리지와 RAM이 큰 노드를 사용하는 것이 좋습니다. |
| Ingest | 데이터를 클러스터에 저장하기 전에 전처리합니다. 수집 파이프라인을 실행하여 데이터를 인덱스에 추가하기 전에 변환합니다. | 대량의 데이터를 수집하고 복잡한 수집 파이프라인을 실행할 계획이라면 전용 수집 노드를 사용하는 것이 좋습니다. 또한 데이터 노드에서 인덱싱을 오프로드하여 데이터 노드가 검색 및 집계에 전념하도록 선택할 수도 있습니다. |
| Coordinating | 클라이언트 요청을 데이터 노드의 샤드에 위임하고, 결과를 수집 및 집계하여 최종 결과로 만든 다음 해당 결과를 클라이언트에 다시 보냅니다. | 한두 개의 전용 조정 전용 노드는 검색량이 많은 워크로드의 병목 현상을 방지할 수 있습니다. 가능한 한 많은 코어를 가진 CPU를 사용하는 것이 좋습니다. |
| Dynamic | 특정 노드를 머신러닝(ML) 작업과 같은 사용자 정의 작업에 위임하여 데이터 노드의 리소스 소비를 방지하므로 OpenSearch 기능에 영향을 미치지 않습니다. |
사전 요구 사항¶
-
Kubernetes 배포 완료
-
(선택 사항) 퍼블릭 클라우드 스토리지 블록 구성 요소 (퍼블릭 클라우드)
- (선택 사항) OpenEBS 스토리지 플러그인
기본 정보 및 호환성¶
참고
아래 구성 정보는 Guance 및 고가용성 OpenSearch 배포 시나리오 구성입니다.
| 호스트명 | IP 주소 | 역할 | K8s 구성 | 데이터 디스크 스토리지 |
|---|---|---|---|---|
| k8s-master | 192.168.100.101 | k8s,master | 4 CPU, 16G MEM, 100G DISK | |
| K8s-node01 | 192.168.100.102 | k8s,node01 | 4 CPU, 16G MEM, 100G DISK | |
| K8s-node02 | 192.168.100.103 | k8s,node02 | 4 CPU, 16G MEM, 100G DISK | |
| K8s-node03 | 192.168.100.104 | k8s,node03 | 4 CPU, 16G MEM, 100G DISK | |
| K8s-node04 | 192.168.100.105 | opensearch, master, coordinating | 4 CPU, 16G MEM, 100G DISK | /data:20G |
| K8s-node05 | 192.168.100.106 | opensearch, master, coordinating | 4 CPU, 16G MEM, 100G DISK | /data:20G |
| K8s-node06 | 192.168.100.107 | opensearch, master, coordinating | 4 CPU, 16G MEM, 100G DISK | /data:20G |
| K8s-node07 | 192.168.100.108 | opensearch, data | 8CPU, 32G MEM, 100G DISK | /data:1T |
| K8s-node08 | 192.168.100.109 | opensearch, data | 8CPU, 32G MEM, 100G DISK | /data:1T |
| K8s-node09 | 192.168.100.110 | opensearch, data | 8CPU, 32G MEM, 100G DISK | /data:1T |
| 이름 | 설명 |
|---|---|
| OpenSearch 버전 | 2.4.1 |
| 오프라인 설치 지원 여부 | 예 |
| 지원 아키텍처 | amd64/arm64 |
기본 구성¶
| OpenSearch URL | opensearch-cluster-client.middleware |
|---|---|
| OpenSearch 포트 | 9200 |
| OpenSearch 계정 | openes/kJMerxk3PwqQ |
| master JVM 크기 | 2G |
| client JVM 크기 | 4G |
| data JVM 크기 | 20G |
설치 단계¶
OpenSearch는 리소스를 많이 사용하므로 클러스터 리소스를 독점적으로 사용해야 합니다. 따라서 사전에 클러스터 스케줄링을 구성해야 합니다.
1. 클러스터 레이블 설정¶
다음 명령을 실행하여 클러스터에 레이블을 지정합니다:
kubectl label node 192.168.100.105 192.168.100.106 192.168.100.107 openes=masts-client
kubectl label node 192.168.100.108 192.168.100.109 192.168.100.110 openes=data
레이블 확인:
2. 클러스터 테인트(Taint) 설정¶
다음 명령을 실행하여 클러스터 테인트를 설정합니다:
kubectl taint node 192.168.100.105 192.168.100.106 192.168.100.107 192.168.100.108 192.168.100.109 192.168.100.110 app=openes:NoExecute
3. OpenEBS StorageClass 설정 (선택 사항)¶
OpenEBS 참조 문서: OpenEBS 배포
퍼블릭 클라우드를 사용하는 경우 퍼블릭 클라우드 스토리지 블록 구성 요소를 참조하세요.
다음 YAML 구성을 배포합니다:
apiVersion: storage.k8s.io/v1
allowVolumeExpansion: true
kind: StorageClass
metadata:
annotations:
cas.openebs.io/config: |
- name: StorageType
value: "hostpath"
- name: BasePath
value: "/data"
name: openebs-data
provisioner: openebs.io/local
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
/data디렉터리의 디스크 용량이 충분한지 확인하세요.
4. Charts 패키지 다운로드¶
5. values 구성 수정¶
opensearch-cluster 디렉터리 아래의 values.yaml을 수정합니다.
각 역할의 opensearchJavaOpts, nodeSelector, tolerations, storageClass 매개변수를 수정합니다.
실제 상황에 따라 설정하고, 파일 형식에 주의하며, 각 역할의
resource제한은 실제 상황에 따라 설정할 수 있습니다.replicas는 홀수가 좋으며, 스플릿 브레인을 방지합니다.
opensearch-master:
...
replicas: 3
opensearchJavaOpts: "-Xmx2g -Xms2g"
nodeSelector:
openes: masts-client # client와 master가 동일한 머신에 있음
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: openes
persistence:
...
storageClass: openebs-data
opensearch-client:
...
replicas: 3
opensearchJavaOpts: "-Xmx2g -Xms2g"
nodeSelector:
openes: masts-client # client와 master가 동일한 머신에 있음
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: openes
persistence:
...
storageClass: openebs-data
opensearch-data:
...
replicas: 3
opensearchJavaOpts: "-Xmx20g -Xms20g"
nodeSelector:
openes: data
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: openes
persistence:
...
storageClass: openebs-data
6. Helm 설치¶
opensearch-cluster 디렉터리에서 실행해야 합니다.
출력 결과:
Release "opensearch-cluster" has been isntalld. Happy Helming!
NAME: opensearch-cluster
LAST DEPLOYED: Wed Nov 2 20:26:16 2022
NAMESPACE: middleware
STATUS: deployed
REVISION: 1
TEST SUITE: None
7. 배포 및 구성 확인¶
7.1 컨테이너 상태 확인¶
출력 결과:
NAMESPACE NAME READY STATUS RESTARTS AGE
middleware opensearch-cluster-client-0 1/1 Running 0 63m
middleware opensearch-cluster-client-1 1/1 Running 0 4m52s
middleware opensearch-cluster-client-2 1/1 Running 0 4m47s
middleware opensearch-cluster-data-0 1/1 Running 0 63m
middleware opensearch-cluster-data-1 1/1 Running 0 63m
middleware opensearch-cluster-data-2 1/1 Running 0 63m
middleware opensearch-cluster-master-0 1/1 Running 0 63m
middleware opensearch-cluster-master-1 1/1 Running 0 63m
middleware opensearch-cluster-master-2 1/1 Running 0 4m31s
Running상태는 배포 성공을 의미합니다.
7.2 사용자 생성¶
kJMerxk3PwqQ는 설정된 비밀번호이며, 사용자 정의하여 수정할 수 있습니다.
kubectl exec -ti -n middleware opensearch-cluster-client-0 -c opensearch-client \
-- curl -X PUT -u admin:admin http://127.0.0.1:9200/_plugins/_security/api/internalusers/openes \
-H 'Content-Type: application/json' \
-d '{"password": "kJMerxk3PwqQ","opendistro_security_roles": ["all_access"]}'
출력 결과:
7.3 사용자 확인¶
사용자 생성 시 문서 기본 비밀번호를 수정한 경우 명령어를 수정하세요.
다음 명령을 실행합니다:
kubectl exec -ti -n middleware opensearch-cluster-client-0 -c opensearch-client -- curl -u openes:kJMerxk3PwqQ http://127.0.0.1:9200/_cat/indices
출력 결과:
green open security-auditlog-2022.11.02 bwpC6JXiTzeqcC9YT8vksg 1 1 3 0 87.7kb 43.8kb
green open .kibana_1 D_GsZGbKT0aIGEGkhnTajg 1 1 0 0 416b 208b
green open .opendistro_security _723x9PCQZO8BosxrG_2cg 1 2 10 0 182.1kb 78.7kb