작성
·
74
·
수정됨
0
안녕하세요!
docker-compose파일을 보면 es01에만 포트 포워딩이 되어있는데! 클라이언트와는 es01만 통신을 하는건가요? primary shard는 es02, es03도 될수 있는거 같아서 질문을 남깁니다.
es01노드를 shut down시키면 service unavailable이 되는데! 이렇게 되면 진정한 의미에서의 Fault Tolerance가 안되는거 아닌가 하는 생각이들어서 질문을 남깁니다.
(es01이 shut down되면 시간이 지나도 복구가 안되는 상황입니다..)
답변 4
0
안녕하세요 가보자!!님,
Docker Compose를 프로덕션 수준으로 구성하려니 해야 할 일이 많네요. Nginx를 설정하여 로드 밸런싱(Client acess)을 구현해야 하고, 인증서 관련 문제(TLS 적용, RBAC 활용, 인증서 개별 적용)도 해결해야 하며, 각 노드별 역할(Master, Data, Ingest, Coordinating Node)도 명확히 지정해야 할 것 같습니다. 또한, 보다 많은 컨테이너가 필요할 것으로 보이네요.
아쉽지만 Compose로는 완벽한 Fault Tolerance를 만들기는 힘들어 보입니다.
0
안녕하세요 가보자!!님
docker-compose파일을 보면 es01에만 포트 포워딩이 되어있는데! 클라이언트와는 es01만 통신을 하는건가요? primary shard는 es02, es03도 될수 있는거 같아서 질문을 남깁니다.
-> 네, 현재 docker-compose.yml 파일에서 es01에만 포트 포워딩이 설정되어 있습니다.
# Line 92
ports:
- ${ES_PORT}:9200
즉, 외부 클라이언트(예: Kibana, 애플리케이션)에서 직접 접근할 수 있는 유일한 노드는 es01입니다.
es02와 es03은 클러스터에 참여하지만, 외부에서는 접근할 수 없습니다. 그러나 Primary Shard는 es02, es03에서도 생성될 수 있습니다.
Elasticsearch의 기본적인 샤드 할당 방식에 따라 Primary 및 Replica Shard는 모든 노드에서 배치될 수 있기 때문입니다.
es01노드를 shut down시키면 service unavailable이 되는데! 이렇게 되면 진정한 의미에서의 Fault Tolerance가 안되는거 아닌가 하는 생각이들어서 질문을 남깁니다.
(es01이 shut down되면 시간이 지나도 복구가 안되는 상황입니다..)
-> es01을 종료했을 때 클러스터가 복구되지 않는 이유는, es01이 유일한 마스터 노드로 동작하고 있기 때문입니다.
현재 설정에서 cluster.initial_master_nodes
에 es01, es02, es03
이 포함되어 있습니다.
- cluster.initial_master_nodes=es01,es02,es03
이는 클러스터 초기 부팅 시 es01
, es02
, es03
중 어느 하나가 마스터로 선출될 수 있도록 보장하는 설정입니다. 그러나, cluster.initial_master_nodes
는 클러스터를 처음 시작할 때만 사용되고 이후에는 새로운 마스터 노드를 자동으로 선출하지 않습니다.
즉, 클러스터가 실행된 이후에 es01이 마스터 노드가 되었고, es01이 죽으면 클러스터는 새로운 마스터를 자동으로 선출하지 못하게 됩니다.
아마 es02
와 es03
에 - node.roles=master,data
를 넣으시면 아마 마스터 후보에 오를 거 같은데, 제가 한번 해봐야 되겠네요.
0
위의 링크 접속시, 404가 발생합니다.
1번 질문의 연장선입니다. 클라이언트와 통신을 담당하는 노드가 shut down되면 클라이언트는 해당 엘라스틱서치 클러스터와 통신이 불가하게 되는건가요? 로컬에서 docker-compose.yml로 띄웠을 경우, 통신이 안되었습니다.
그런데 운영상황에서는 코디네이터 노드를 multi로 구성해서 이런 상황을 대비하는건지 궁금해서 질문을 남깁니다
0
안녕하세요, 인프런 AI 인턴입니다. 가보자!!님.
Elasticsearch 클러스터를 Docker Compose로 구성하여 여러 노드를 사용하는 경우, es01에만 포트 포워딩이 설정되어 있는 이유와 클러스터 통신 방식에 대해 설명드리겠습니다.
포트 포워딩 및 클라이언트 통신 역할:
es01
노드가 주로 클라이언트와의 직접 통신을 담당하나, 이는 데이터를 저장하거나 쿼리할 때 내부적으로 다른 노드와도 연동하여 작업을 수행합니다.Primary Shard 분배:
es02
, es03
에도 Primary Shard가 할당될 수 있으며, 이는 Elasticsearch가 자동으로 관리합니다.다중 노드의 장점:
관련하여 도움이 될 만한 기존 질문과 답변을 확인하실 수 있습니다:
- docker-compose를 사용하여 Elasticsearch 클러스터 구성시 노드 역할 관리 방법
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.