OpenSearch에 대해 알아보자!

소시민A·2022년 11월 23일
1

1.OpenSearch란

Opensearch는 Elastic Search가 기업화를 꾀하는데에 대한 반발로 나온 오픈소스이다!
https://aws.amazon.com/ko/blogs/opensource/introducing-opensearch/
https://aws.amazon.com/ko/what-is/opensearch/
https://opensearch.org/docs

  • Elastic Search 7.1에서 Fork 되어서 등장
  • Kibana 7.1에서 Fork 되어서 등장
  • ALv2 라이센스 (무료 개방형 오픈소스)
  • 분산형 커뮤니티 기반 100% 오픈 소스 검색 및 분석 제품군으로, 실시간 애플리케이션 모니터링, 로그 분석 및 웹 사이트 검색과 같이 다양한 사용 사례에 사용

2. Opensearch stack

opensearch는 기존 ES (Elastic Search)를 대체해서 등장했기에 다양한 스택과 조합이 가능.

수집 및 정제

대시보드

  • 그라파나
  • 오픈서치 대시보드(Kibana를 Fork해서 괜찮은 대시보드를 보여줌)

2. Opensearch architecture

Opensearch를 시작할때 필수로 해야하는 부분이 클러스터 생성이다.
Operator를 활용해 CRD로 리소스를 새롭게 정의해 사용한다.

  1. Cluster 구성
  2. 각각 노드마다의 attribute 부여 / Coordinating , Cluster Manager, Data node
  3. Cluster에 Specific IP 부여
  4. Host 탐색 설정
  5. Cluster Start
  6. Shard 구성 (Advanced)
  7. hot&warm architecture

2-1 Kube-Opensearch

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: opensearch-master
  labels:
    app: opensearch
    role: master
spec:
  replicas: 1
  serviceName: opensearch-master
  selector:
    matchLabels:
      app: opensearch
      role: master
  template:
    metadata:
      labels:
        app: opensearch
        role: master
    spec:
      initContainers:
      - name: init-sysctl
        image: busybox:latest
        command:
        - sysctl
        - -w
        - vm.max_map_count=262144
        securityContext:
          privileged: true
      containers:
        - name: opensearch-master
          image: opensearchproject/opensearch:1.0.0
          imagePullPolicy: IfNotPresent
          env:
          - name: node.name
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
          - name: ES_JAVA_OPTS
            value: -Xms512m -Xmx512m
          - name: node.data
            value: "false"
          - name: node.master
            value: "true"
          ports:
            - containerPort: 9300
              name: transport
            - containerPort: 9200
              name: http
          volumeMounts:
            - name: opensearch-data
              mountPath: /usr/share/opensearch/data
            - name: config
              mountPath: /usr/share/opensearch/config/opensearch.yml
              subPath: opensearch.yml
            - name: ca-cert
              mountPath: /usr/share/opensearch/config/certificates/ca
              readOnly: true
            - name: opensearch-cert
              mountPath: /usr/share/opensearch/config/certificates/opensearch
              readOnly: true
      volumes:
        - name: config
          configMap:
            name: opensearch-config
        - name: ca-cert
          secret:
            secretName: ca-cert
        - name: opensearch-cert
          secret:
            secretName: opensearch-cert
  volumeClaimTemplates:
  - metadata:
      name: opensearch-data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

3. Audit log 관련

https://opensearch.org/docs/latest/security-plugin/audit-logs/index/

  • Audit log는 cluster에 대한 access를 추적가능
  • Compliance & Security 측면에서 유리하다
  1. Add the following line to opensearch.yml on each node:
plugins.security.audit.type: internal_opensearch
  1. Restart the node

검색 속도 높이기

Sharding

  • Index data를 여러 노드에 분산 저장하여 매핑하고 이러한 샤드를 클러스터 전체에 분산저장한다면 검색속도를 높일 수 있다.

4. Conclusion

  • Opensearch는 ElasticSearch가 7.10 이후로 라이센스를 변경하며 탄생하여 대안이 될 수 있다.
  • AWS 및 다양한 기업에서 후원중.
profile
계속해서 Blue를 이겨내가는 사람 / System Engineer / Server, OS, Storage, Network, Cloud / 이제 다시 코딩으로!!

0개의 댓글