logstash 테스트를 위한 컴포즈 쪼개기와 docker-compose 간의 network 통신
안녕하세요.
시간이 지나 흐릿해지는 docker compose network 통신에 대한 글입니다.
여러 개의 컴포즈 파일이 있고, 상호간 통신을 원한다.
stack이라고 표현하는 swarm이나 k8s의 경우 cluster가 구축된 인프라에서 구축하고 각 container의 통신을 각 기술에 정의된 규칙으로 허용하게 됩니다.
이처럼 docker-compose 또한 자신의 파일이 하나의 node가 되어 컨테이너를 띄우는 형식으로 가장 간단한 옵션인
internal, external open의 방식을 사용해보았습니다.
먼저, elastic stack으로 run하게 될 docker-compose.yml 입니다.
- node1
- node2
- node3
- kibana
세 개의 elasticsearch 컨테이너와 하나의 키바나입니다.
다음으로 logstash-compose.yml입니다.
- logstash
- [optional] filebeat
두 컨테이너를 하나의 컴포즈로 합치면 별 다른 설정이 없어도 상호 통신이 가능합니다만,
logstash 와 filebeat 설정을 바꿀 때마다 elastic stack이 down / up 되는건 매우 효율적이지 못합니다.
분리하기
위에서 언급한 구성으로 컴포즈 파일을 분리하였습니다.
version: '3.7'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
container_name: es01
hostname: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
container_name: es02
hostname: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data02:/usr/share/elasticsearch/data
ports:
- 9201:9201
networks:
- elastic
es03:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
container_name: es03
hostname: es03
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data03:/usr/share/elasticsearch/data
ports:
- 9202:9202
networks:
- elastic
kib01:
image: docker.elastic.co/kibana/kibana:7.10.1
container_name: kib01
ports:
- 5601:5601
environment:
ELASTICSEARCH_URL: http://es01:9200
ELASTICSEARCH_HOSTS: http://es01:9200
networks:
- elastic
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
elastic:
driver: bridge
external: true
internal: true
elk 공식 github의 내용과 비슷하며, external, internal 추가가 이번 글에서 핵심입니다.
컴포즈 실행 오류
docker-compose up
명령어를 실행하면 네트워크 생성 후 다시 시도하라는 메시지를 확인할 수 있습니다.
네트워크 생성 및 재실행
docker network create elastic
docker-compose up
logstash 실행
네트워크를 생성하고 활용하는 것이 맞냐는 스스로의 질문에선
운영 환경에서 컴포즈를 사용하는 일은 없을 것으로 생각이 됩니다.
로컬 환경에서의 테스트를 위한 컴포즈를 다양한 os에서 바로 테스트해볼 수 있게 되었습니다.
logstash와 filebeat 설정을 변경하고 재실행할 때 필요한 두 서버만 영향을 받는 것이 좋은 것 같네요.
감사합니다!
'Docker > compose' 카테고리의 다른 글
docker-compose Device or resource busy (0) | 2021.01.15 |
---|---|
bootJar to Dockerize(jar 이미지화) : 포트 바인딩, ARG, EXPOSE ... (0) | 2020.06.21 |
Docker-compose.yml 작성 (0) | 2020.01.04 |