[Elasticsearch] Elasticsearch Cluster Auto Scaling 구성 하기.
Elastic/Elasticsearch 2019. 10. 2. 16:04기억하기 위해 작성해 봅니다.
ES Cluster 를 아래와 같이 구성 한다고 가정 하고 들어 가겠습니다.
1. Master Node 2개
2. Coordinating Node 2개
3. Data Node 2개
ES Cluster 를 구성 하다 보면 CPU, MEM, DISK, NETWORK 등 모든 자원을 다 효율적으로 사용하도록 구성 하기는 매우 어렵습니다.
그렇다 보니 CPU 는 부족한데 MEM 은 남는 다던가 MEM 은 부족한데 CPU 는 남는 다던가 또는 가끔 말도 안되게 NETWORK Bandwidth 가 부족 할 때도 나오더군요.
암튼 그래서 모든 자원을 다 쥐어 짜듯이 구성 할 수 없으니 적당히 포기 하시길 권장 드립니다.
여기서 Auto Scaling 하는 구성은 Coordinating Node 와 Data node 이 두 가지 입니다.
우선 ES 는 너무 쉽게 Node 를 추가 하고 삭제 할 수 있습니다.
elasticsearch.yml 파일 내 Master Node 정보만 등록 해 두시면 됩니다.
- discovery.zen.ping.unicast.hosts: MASTER_NODE_LIST
설정 공식 문서는 아래 링크 참고 하세요.
https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-discovery-zen.html
Coordinating Node Auto Scaling 구성 하기)
0. 가장 먼저 하셔야 하는 작업은 elasticsearch.yml 파일 내 Master Node 정보 등록 입니다.
1. 우선 Coordinating Node 들을 LoadBalancer 로 묶습니다. (AWS 를 사용 하시면 ALB/ELB 로 구성 하시면 됩니다.)
- Coordinating Node 의 경우 "Too many requests" 오류가 발생 할 경우 이를 예방 하기 위해 Auto Scaling 구성을 하면 좋습니다.
- 보통 트래픽이 몰릴 경우 search thread 가 부족 할 수 있기 때문 입니다.
- LB 로 묶는 또 다른 이유는 API 단에서 단일 Endpoint 를 바라 보게 해서 운영을 편하게 하기 위함 입니다.
2. Auto Scaling 설정 구성을 합니다.
- 이 부분은 사용하시는 환경에 맞춰서 구성 하시면 됩니다.
- 공식 문서를 참고 하시면 됩니다.
- https://docs.aws.amazon.com/ko_kr/autoscaling/ec2/userguide/scaling_plan.html#scaling_typesof
3. 테스트 해보시고 서비스에 적용 하시면 됩니다.
Data Node Auto Scaling 구성 하기)
0. 가장 먼저 하셔야 하는 작업은 elasticsearch.yml 파일 내 Master Node 정보 등록 입니다.
0. 더불어 Replica Shard 설정은 (Data Node - 1) 만큼 구성이 되어야 합니다.
0. 더불어 초기 Data Node 수와 Primary Shard 크기를 잘 정의 하셔야 합니다.
0. 이유는 Primary Shard 는 한번 생성 하게 되면 ReIndexing 을 하지 않고서는 변경이 불가능 합니다.
1. Auto Scaling 설정 구성을 합니다.
- 이 설정 시 Shard reallocation 에 대한 이슈는 없는지 꼭 확인을 하셔야 합니다.
- CPU, DISk I/O, NETWORK 등에 대한 성능 저하가 발생 할 수 있습니다.
1. Auto Scaling 설정 후 수동으로 Shard Allocation 이 가능 합니다.
- 보통 이런 문제는 트래픽이 몰리거나 운영 시점에 발생을 하기 때문에 미리 스크립트 구성해 놓으시고 re-location 진행 하시면 됩니다.
- 그래서 Shard Allocation 설정을 꺼 두셔야 합니다.
- 공식 문서를 참고 하시면 됩니다.
- https://www.elastic.co/guide/en/elasticsearch/reference/current/shards-allocation.html
2. Data Node 의 경우 Auto Scaling 종료 정책에 따라 Primary Shard 가 유실 되지 않도록 구성 하는 것이 좋습니다.
- 물론 Full Replicaiton 구성이라 다른 Replica 가 Primary Shard 로 선출 되겠지만 그래도 주의 하는게 좋겠죠.
마무리를 하면)
Coordinating Node 까지는 쉽게 적용이 가능 합니다.
하지만, Data Node 적용은 실제 운영 경험이 있고 문제 발생 시 신속하게 대응이 가능 하지 않다면 시도 하지 마시라고 말씀 드리고 싶습니다.