Home EC2로 Elastisearch Cluster 설정하기
Post
Cancel

EC2로 Elastisearch Cluster 설정하기

I. Elasticsearch 설치하기

  • Amazozn linux 2 기준으로 설치
  • Elasticsearch가 jvm위에서 실행되기 때문에 자바를 먼저 설치해줘야함
1
2
sudo yum update
sudo yum install -y java-11-amazon-corretto
  • yum repository에 Elasticsearch 추가해주기
    • 6버전 기준 7버전은 공식문서 참조
    • sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch GPG 키 추가
    • sudo vim /etc/yum.repos.d/elasticsearch.repo 명령어로 repo 파일 생성 후 아래 내용 복붙
1
2
3
4
5
6
7
8
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
  • elasticsearch 설치하기

    1
    
    sudo yum install elasticsearch
    
  • elasticsearch 서비스로 등록하기

    • ps -p 1 명령어로 systemd인지 initV인지 확인하기
    • 아래처럼 나오는데 CMD가 systemd이므로 systemd 설정해주면됨 (Amazon Linux 2기준)
    1
    2
    
      PID TTY          TIME CMD
        1 ?        00:00:02 systemd
    
    • service 등록하기
    1
    2
    3
    
    sudo /bin/systemctl daemon-reload
    sudo /bin/systemctl enable elasticsearch.service
    sudo systemctl start elasticsearch.service
    
  • 작동되는지 확인하기

    • service 상태확인
    1
    
    sudo service elasticsearch status
    
    • 로그 확인
      • 아래 journalctl 명령어로 확안힐 수 있지만 로그가 많이 생략되어보이기 때문에 실패할 경우 원인을 알 수 없다
        • –quite 옵션을 없애줘야함
          1
          
          sudo journalctl --unit elasticsearch
          
    • GET 요청보내보기
    1
    
    curl -X GET "localhost:9200/?pretty"
    
  • --quiet 옵션 없애기

    • elasticsearch 실행할 때 –quiet 옵션을 빼줘야 제대로된 로그를 볼 수 있음
    • sudo vim /usr/lib/systemd/system/elasticsearch.service 명령어로 서비스 설정을 열어서 ExecStart 끝에 --quite빼주기
    • service 설정을 바꿔주고 난 후엔 sudo systemctl daemon-reload 명령어로 설정 적용을 시켜줘야함
    1
    
    ExecStart=/usr/share/elasticsearch/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid --quiet
    

II. Cluster 설정과 필수 시스템 설정

  • disk swap 끄기
1
sudo swapoff -a
  • Memlock 설정해주기

    • LimitMEMLOCK=infinity 를 service 설정에 추가해주기
    • sudo vim /usr/lib/systemd/system/elasticsearch.service 명령어로 service 설정파일 열기
    1
    2
    3
    
    # Specifies the maximum size of virtual memory
    LimitAS=infinity
    LimitMEMLOCK=infinity
    
  • discovery-ec2 플러그인 설치하기

1
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install discovery-ec2
  • jvm.options에서 Heap size 늘려주기
    • sudo vim /etc/elasticsearch/jvm.options
    • 해당 머신 RAM의 절반을 권장
1
2
3
4
5
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms16g
-Xmx16g
  • keystore 저장하기

    • AWS에서 IAM Role의 Credential에 들어가면 Access Key ID와 Secret Access Key가 있는데 아래 설정에 맞는 필드를 넣어주면됨
    • 해당 IAM role이 ec2:DescribeInstances 권한을 가지고 있는지 확인
    • Access key ID => access_key
    • Secret Aceess Key => secret_key
    1
    2
    
    sudo /usr/share/elasticsearch/bin/elasticsearch-keystore add discovery.ec2.access_key
    sudo /usr/share/elasticsearch/bin/elasticsearch-keystore add discovery.ec2.secret_key
    
  • elasticsearch.yml 설정해주기

    • sudo vim /etc/elasticsearch/elasticsearch.yml 파일열고 아래 내용 추가해주기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# ---------------------------------- Cluster -----------------------------------
cluster.name: es-dev
# ------------------------------------ Node ------------------------------------
node.name: dev-node-1
# ----------------------------------- Memory -----------------------------------
bootstrap.memory_lock: true
# ---------------------------------- Network -----------------------------------
network.host: _ec2:privateIpv4_
network.bind_host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
# --------------------------------- Discovery ----------------------------------
discovery.zen.hosts_provider: ec2
discovery.ec2.any_group: true
discovery.ec2.host_type: private_ip

cloud.node.auto_attributes: true
cluster.routing.allocation.awareness.attributes: aws_availability_zone

discovery.ec2.tag.es_cluster: "dev"
discovery.ec2.endpoint: ec2.ap-northeast-2.amazonaws.com
discovery.zen.minimum_master_nodes: 2
discovery.ec2.groups: DEV-ES

III. 참고링크

  • https://medium.com/@abhinav.gupta.2406/ec2-discovery-with-elasticsearch-f9c9b0a67b79
  • https://blog.francium.tech/install-aws-ec2-discovery-plugin-in-elasticsearch-5a973348cad9
  • https://www.elastic.co/guide/en/elasticsearch/plugins/current/discovery-ec2-usage.html
  • https://www.elastic.co/guide/en/elasticsearch/reference/7.9/rpm.html
This post is licensed under CC BY 4.0 by the author.