티스토리 뷰
[업데이트 2016.12.29 23:42]
Elasticsearch에서 제공하는 Cluster에 대해 개념 정리 및 구축에 대해 포스팅을 해보고자 합니다. High Availability, Near Realtime(NRT), Distributed, Document-Oriented(JSON), RESTful API 등 다양한 특징들이 있지만, Cluster 구축에 관련된 개념들에 대해서 정리를 해보고자 합니다.
* 참고: https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html
- High Availability, Cluster, Node, Index, Shards & Replicas
Elasticsearch는 High Availability 즉, 고가용성을 추구합니다. 여러개의 서버를 통해 분산처리를 할 때, 하나의 서버가 문제가 생겼을 때에도 원활하게 동작할 수 있는 fail-over기능을 제공합니다.
먼저 이러한 fail-over 기능이 가능한 배경에는 Elasticsearch에서 제공하는 Cluster, Node 등에 대한 개념 정립이 필요합니다.
하나의 Cluster는 여러개의 Node로 구성됩니다. 여기서 Node가 위치한 물리적인 서버는 아래와 같이 분리 될 수 있습니다.
Node는 Elasticsearch의 Instance로 여러개를 실행이 가능하며, Node별로 다른 역할을 부여 할 수 있습니다.(Master, Data, Coordinating Node 등)
* 참고: https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html
각 Node에는 Index라는 개념으로 데이터를 저장합니다.(Apache Lucene 기반)
참고로 Index는 Document/Type으로 구성이 됩니다. Document는 JSON기반으로 구성되며 Index상에 여러개로 구성되어 있는 실제 데이터 레코드이며, Type은 각 Index별 카테고리화를 할 수 있도록 제공하는 개념이라 보시면 됩니다. 아래의 참고 자료의 RDB와 Elasticsearch의 차이점에 대해 보시면 쉽게 이해가 되실 수 있을 것입니다.(30page)
* 참고: http://www.slideshare.net/RoyRusso1/elasticsearch-devnexus-2015
하나의 Index는 다시 Shard라는 것으로 분산되어 여러개의 Node에 저장이 됩니다. Index하나는 최대 1TB까지 저장이 가능하다고 공식 문서에 나옵니다. 이렇게 하나의 Index로 관리하게 될 때, Search 등을 수행시 퍼포먼스 이슈 등 있을 수 있어, 여러개의 Node에 분산하여 저장 및 처리하는 기능을 제공합니다.
여기서 Shard는 Primary Shard와 Replica Shard로 구성이 되며, Elasticsearch configuration 파일에 설정이 가능합니다. 여기서 주의할 점은 Index별 최대 Shard 개수는 한번 설정하면, Index가 생성된 후에는 동적으로 수정이 불가능합니다. 따라서 데이터 처리량 등의 환경에 맞게 Shard개수 지정이 필요합니다. (Replica Shard 개수는 Index 생성후에도 동적으로 설정이 가능합니다)
아래 그림은 두개의 Node가 존재하고, Index당 Primary Shard 개수를 3, Replica Shard 개수를 1로 지정하였을 때, 자동으로 분산되어 저장되는 것을 볼 수 있습니다. 여기서 추가로 Node를 늘리더라도 자동으로 scaling 되어 Primary/Replica Shard가 Rebalancing되어 각 Node에 저장하게 됩니다.
Node 1개를 더 추가 후 예상되는 케이스 입니다.
또한 Replica Shard도 변경시 그 개수에 맞게 각 Node별 Rebalancing이 수행됩니다.
Elasticsearch Shard 생성,삭제 등에 대한 동작 설명.
* 참고: http://www.slideshare.net/deview/2d1elasticsearch
- Master-eligible Node, Data Node, Coordinating node
Node의 역할을 크게 Master-eligible Node, Data Node, Coordinating node와 같으며, 그 외에도 Ingest Node, Tribe Node가 있는데, 위 3가지에 대한 개념 정리 및 구축을 해보려고 합니다.
Master-eligible Node는 Index 생성/삭제에 대한 처리, Cluster안의 Node 상태 Tracking, Shard Allocation 등에 대해서 그 역할을 수행합니다.
Data Node는 실제 데이터를 저장하는 역할을 하며(Shard로 구성), 데이터 CRUD/Search/Aggregation 등을 수행하며, Master-eligible Node의 역할을 수행하지 않습니다. 따라서 해당 Node의 경우 I/O, CPU, Memory에 따라 성능이 좌우 될 수 있습니다.
Coordinating node는 Load balancer node로도 불립니다. 만약 해당 Node로 요청이 들어왔을때, 모든 Node에 요청하지 않고 요청한 데이터를 가진 Data Node에만 요청을 하여 그 결과 취합 후 최종 반환하는 역할을 합니다. Coordinating node를 사용함으로써 Search/Indexing 요청에 대한 Data Node의 불필요한 부하를 줄일 수 있는 장점이 있습니다.
- Total
- Today
- Yesterday
- #ApacheZeppelin
- Badge
- belief
- ILoop Engine
- 2D Game
- OST
- Worry
- Library
- some time ago
- docker
- project
- sentence test
- Ragdoll
- #ELK Stack
- #REST API
- #TensorFlow
- aws #cloudfront
- 도커
- #ApacheSpark
- Game Engine
- ate
- English
- Memorize
- Sea Bottom
- Physical Simulation
- SSM
- Jekyll and Hyde
- Mask R-CNN
- GOD
- Meow
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |