Elastic search 고가용성 테스트

이동명·2023년 7월 3일
1
post-thumbnail

# 1. Clustering 준비


ElasticSearch는 이미 Local에 설치가 되었다고 가정, ElasticSearch Cluster를 구성하려면 ElasticSearch의 환경설정 파일인 elasticsearch.yml 파일에 수정이 필요하다.

Cluster 설정을 따로 하지 않고 처음 yml 파일을 열면 path, data, path.logs 외에는 모두 주석으로 처리가 되어 있다.

주석을 지우고 바꿔야 할 항목은 아래와 같다.

  • cluster.name (String) : 구성하려는 Cluster의 이름이다. Node들을 같은 Cluster에 넣기 위해서는 같은 Cluster name을 써야지 인식할 수 있다.

  • node.name (String) : Node의 이름, 당연한 이야기이지만 같은 Cluster 내에 추가할 Node의 이름은 각기 다르게 설정해야 한다.

  • node.master (bool) : true 혹은 false 값으로 이 ES instance를 master로 쓸지 아닌지 결정

  • node.data (bool) : true 혹은 false 값으로 이 ES instance를 data node로 쓸지 아닌지 결정

  • network.host (String) : Default로 ES는 Local에서만 접근이 가능하도록 설정이 되어 있다. 외부에서 접속 가능하도록 만들기 위해서는 network.host 값을 0.0.0.0으로 바꾸어주면 된다.

  • discovery.seed_hosts(String List) : ES node가 시작했을 때, Cluster에 구성되기 위해 찾아가는 Host의 주소의 List, IP주소를 직접 입력해도 되고, DNS 주소가 있다면 DNS를 입력해도 된다.

  • cluster.initial_master_nodes (String List) : Master Node가 될 수 있는 후보들의 List이다.

Server 1 yml 파일

Server 2 yml 파일

2개의 yml 파일에서 확인할 수 있듯이 cluster의 이름은 ‘test-cluster’로 통일하였고 server 1의 node 이름은 node-1, server 2의 node 이름은 node-2이다.

network.host는 ES Instance가 외부로도 노출될 수 있도록 0.0.0.0으로 설정하였다.

node-1을 Master로 만들 것이기 때문에 node-1의 node.master를 true, node.data를 false로 설정해주었고 node-2는 그 반대로 설정하였다.

Test에서는 server 1의 IP주소는 192.168.219.103이므로 server 2의 discovery.seed_hosts에 이 주소를 추가시켜주었고 server 1의 discovery.seed_hosts는 반대로 server 2의 IP주소인 192.168.219.104를 추가시켜주었다.

마지막으로 Cluster를 형성했을 때 node-1이 master가 되도록 양쪽 yml 파일 모두 cluster.initial_master_nodes를 [“node-1”]으로 설정해주었다.


테스트 해본 케이스..

  1. master node 에 장애가 생길 시 총 연결된 3대의 node 중에서 하나의 node가 master를 위임받음

  2. 데이터를 모두 밀어넣고 새로운 node가 들어올 시 샤드를 복제받음

  3. 데이터를 밀어넣는 도중에 node 에 장애가 발생해도 데이터 복구 보존이 가능함

profile
Web Developer

0개의 댓글