본문 바로가기

DevOps/Elastic Stack

AWS ElasticSearch 구축 및 기초 세팅 :: DANIDANI

1. ElasticSearch 란?

  • 아파치 루씬 기반의 검색 엔진이다.
  • 자바로 개발되어 있으며 오픈 소스로 활용이 가능하다.

2. ElasticSearch 특징

  • 분산 방식
    • 페타바이트의 데이터 처리가 가능하다.
  • 역색인(inverted index) 방식
    • 키워드를 통해 문서를 찾아내는 방식이다.
    • 아주 빠른 전체 텍스트 검색이 가능하다.
    • 문서에 나타나는 모든 고유한 단어 목록을 만들고, 각 단어가 발생하는 모든 문서를 식별한다.
  • 실시간에 가까운 검색 제공, 빠르다
    • 해쉬테이블 방식이어서 검색시 O(1)의 효과를 낸다
    • RDB 같은 경우 O(n)

  • 기타 기본 기능 - 리밸런싱 및 라우팅은 자동 수행, 복원력, 인덱스 수명 관리, 데이터 롤업 등

3. ElasticSearch 구조

  • 인덱스(색인)
    • ex. 고객 인덱스, 주문 인덱스 등
    • : 비슷한 특성을 가진 문서의 모음
  • 도큐먼트
    • ex. 단일 고객, 단일 제품, 단일 주문 등
    • : 인덱스화 할 수 있는 기본 정보 단위
  • 샤드(Shard)
    • : 인덱스를 분산 저장하는 저장소
  • 복제본(Replica) : 프라이머리 샤드를 복제하여 다른 노드에 저장하는 개념 
    • 샤드는 0개 이상의 복제본을 가질 수 있다.
    • 각 노드는 하나 이상의 샤드를 관리한다.
    • 샤드의 개수가 증가 될 수록 각각의 샤드에서 검색하여 결과를 리턴해주기 때문에 쿼리 속도가 증가한다.
    • 그러나, 너무 많이 샤드를 두는게 좋은 것은 아님 - 샤드 개수만큼 cpu 스레드 사용하기에 자원 낭비 초래

 

5개의 프라이머리 샤드와 각 1개의 복제본, 총 10개의 샤드들이 전체 노드에 골고루 분배되어 저장되어 있다. 같은 샤드와 복제본은 동일한 데이터를 담고 있으며,  반드시 서로 다른 노드에 저장 된다.
만약 시스템 다운이나 네트워크 단절등으로 노드3이 사라지면 복구 되기를 일단 기다린다.
타임아웃이 지나면 사라진 샤드의 복제본을 만들어 전체 데이터를 유지한다.

노드가 1개만 있는 경우 프라이머리 샤드만 존재하고 복제본은 생성되지 않는다.

아무리 작은 클러스터라도 데이터 가용성과 무결성을 위해 최소 3개의 노드로 구성 할 것을 권장한다.

4.Elastic Stack(=ELK 스택)

  • Elastic Search: 검색 엔진
  • Logstash: 데이터 수집 및 로그 파싱 엔진
  • Kibana: 분석 및 시각화 플랫폼

5. AWS Elastic Search 구축 및 기초 세팅

  • Amazon Elasticsearch Service(Amazon ES)는 AWS 클라우드에서 Elasticsearch 클러스터를 쉽게 배포, 운영 및 조정할 수 있는 관리형 서비스
  • Elasticsearch는 로그 분석, 실시간 애플리케이션 모니터링, 클릭 스트림 분석 같은 사용 사례를 위한 인기 있는 오픈 소스 검색 및 분석 엔진입니다.
  • Amazon ES를 사용하면 Elasticsearch API에 바로 액세스해 기존 코드 및 애플리케이션을 서비스를 통해 원활하게 사용할 수 있습니다. - AWS 기타 서비스와 연계하기 편리합니다.
  1. AWS Elastic Search 서비스에서 '새 도메인 생성' 선택합니다.

 

 

2. 배포 유형에 '개발 및 테스트' 를 선택하고 버전에는 최신 버전을 선택합니다.

 

3. 도메인 이름을 정합니다.

인스턴스 유형은 프리티어로 사용이 가능한 t3.small.elasticsearch를 선택해주었고, 노드 수는 기본값은 1로 설정해주었습니다.

 

 

4. 데이터 노드 스토리지의 노드당 EBS 스토리지 크기는 최소 크기인 10으로 선택하였습니다.

 

5. 네트워크 구성은 '퍼블릭 액세스'를 선택합니다.

세분화된 엑세스 제어 활성화를 체크한 후 마스터 사용자 생성에서 이름과 암호를 입력합니다.

 

6. 액세스 정책에서는 '도메인에 대한 개방 액세스 허용'을 하셔도 되고,

'사용자 지정 액세스 정책'을 선택 후 원하는 ip주소에 대해서만 허용을 해주셔도 좋습니다.

나머지 설정들은 default로 두고 다음 버튼을 누릅니다.

 

7. 검토페이지에서 구성을 확인하고 확인을 선택합니다.

새 도메인은 일반적으로 초기화하는 데 15~30분 정도 걸리지만 구성에 따라 시간이 더 오래 걸릴 수 있습니다.

도메인이 초기화된 후 엔드포인트를 기록해 둡니다.

 

6. AWS Elastic Search 시작하기 - 데이터 넣고 확인

  1. 사용하려는 ec2 접속 후 데이터를 넣어본다. (이 과정을 테스트를 위한 과정으로, 바로 logstash를 이용하여 mysql과 연동해도 무관하다)
vi bulk_movies.json
{ "index" : { "_index": "movies", "_id" : "1" } }
{"director": "Burton, Tim", "genre": ["Comedy","Sci-Fi"], "year": 1996, "actor": ["Jack Nicholson","Pierce Brosnan","Sarah Jessica Parker"], "title": "Mars Attacks!"}
{ "index" : { "_index": "movies", "_id" : "2" } }
{"director": "Frankenheimer, John", "genre": ["Drama", "Mystery", "Thriller", "Crime"], "year": 1962, "actor": ["Lansbury, Angela", "Sinatra, Frank", "Leigh, Janet", "Harvey, Laurence", "Silva, Henry", "Frees, Paul", "Gregory, James", "Bissell, Whit", "McGiver, John", "Parrish, Leslie", "Edwards, James", "Flowers, Bess", "Dhiegh, Khigh", "Payne, Julie", "Kleeb, Helen", "Gray, Joe", "Nalder, Reggie", "Stevens, Bert", "Masters, Michael", "Lowell, Tom"], "title": "The Manchurian Candidate"}
{ "index" : { "_index": "movies", "_id" : "3" } }
{"director": "Baird, Stuart", "genre": ["Action", "Crime", "Thriller"], "year": 1998, "actor": ["Downey Jr., Robert", "Jones, Tommy Lee", "Snipes, Wesley", "Pantoliano, Joe", "Jacob, Ir\u00e8ne", "Nelligan, Kate", "Roebuck, Daniel", "Malahide, Patrick", "Richardson, LaTanya", "Wood, Tom", "Kosik, Thomas", "Stellate, Nick", "Minkoff, Robert", "Brown, Spitfire", "Foster, Reese", "Spielbauer, Bruce", "Mukherji, Kevin", "Cray, Ed", "Fordham, David", "Jett, Charlie"], "title": "U.S. Marshals"}
{ "index" : { "_index": "movies", "_id" : "4" } }
{"director": "Ray, Nicholas", "genre": ["Drama", "Romance"], "year": 1955, "actor": ["Hopper, Dennis", "Wood, Natalie", "Dean, James", "Mineo, Sal", "Backus, Jim", "Platt, Edward", "Ray, Nicholas", "Hopper, William", "Allen, Corey", "Birch, Paul", "Hudson, Rochelle", "Doran, Ann", "Hicks, Chuck", "Leigh, Nelson", "Williams, Robert", "Wessel, Dick", "Bryar, Paul", "Sessions, Almira", "McMahon, David", "Peters Jr., House"], "title": "Rebel Without a Cause"}

 

2. bulk_movies 파일을 Post 한다.

curl -XPOST -u (마스터 아이디):(비밀번호)  (ES 엔드포인트 주소)/_bulk 
--data-binary @bulk_movies.json -H 'Content-Type: application/json'

 

3. mars라는 키워드로 검색 후 결과를 확인해본다.

curl -XGET -u (마스터 아이디):(비밀번호)  '(ES 엔드포인트 주소/movies/_search?q=mars&pretty=true'
{
  "took" : 14,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "movies",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "director" : "Burton, Tim",
          "genre" : [
            "Comedy",
            "Sci-Fi"
          ],
          "year" : 1996,
          "actor" : [
            "Jack Nicholson",
            "Pierce Brosnan",
            "Sarah Jessica Parker"
          ],
          "title" : "Mars Attacks!"
        }
      }
    ]
  }
}

 

다음 글에서는 Logstash로 Mysql과 ElasticSearch 연동, kibana 사용, filebeat 사용에 대한 포스팅을 하겠습니다🙂🙂

 


참고

[ELK] Logstash 사용하기 📌시각화를 위한 설정 📌JDBC 상세 설정 #4

1단계: Amazon ES 도메인 생성

 

1단계: Amazon ES 도메인 생성 - Amazon Elasticsearch Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다. 1단계: Amazon ES 도메인 생성 테스트 Amazon Elasticsearch Service (Amazon ES) 도메인을

docs.aws.amazon.com

 

 

728x90