
ElasticSearch Cluster 구성하기
standalone으로 구성해볼 때 사용했던 디렉토리 구조는 아래와 같습니다.
./standalone
├── elasticsearch-7.15.0 // 이 디렉토리 전체를 복사
│ ├── LICENSE.txt
│ ├── NOTICE.txt
│ ├── README.asciidoc
│ ├── bin
│ ├── config
│ ├── data // 직전 실행 과정에서 남아있던 파일을 삭제
│ ├── jdk.app
│ ├── lib
│ ├── logs // 직전 실행 과정에서 남아있던 파일을 삭제
│ ├── modules
│ └── plugins
└── elasticsearch-7.15.0-darwin-x86_64.tar.gz
cluster로 구성하기 위해 elasticsearch-7.15.0
디렉토리 전체를 복사해서 아래와 같이 구성합니다.
hwanseok@air study % tree -L 2 ./cluster ./standalone
./cluster
├── es1
│ └── elasticsearch-7.15.0
├── es2
│ └── elasticsearch-7.15.0
└── es3
└── elasticsearch-7.15.0
ElasticSearhc Cluster로 실행하기 :: tar 파일로 실행하기
standalone으로 실행할 때와 똑같이 ./bin.elasticsearch를 실행하면 됩니다. 별도의 설정은 필요없습니다.

이렇게 아무던 설정을 해주지 않아도, port가 9200, 9201, 9202로 자동으로 설정됩니다.

개별 노드의 정보도 확인할 수 있고
curl http://127.0.0.1:9200
클러스터 전체의 정보도 확인할 수 있습니다
// 테이블 뷰
curl http://127.0.0.1:9200/_cat/nodes?v
// json
curl http://127.0.0.1:9200/_cat/nodes?format=json&pretty

만약 3개의 ES가 하나의 cluster로 인식되지 않는다면
직전 실행에서 남아있던 잔여 파일까지 cp 된 영향일 수 있습니다. /data, /logs 디렉토리 하위의 파일을 삭제해주면 해결됩니다.
├── elasticsearch-7.15.0
│ ├── LICENSE.txt
│ ├── NOTICE.txt
│ ├── README.asciidoc
│ ├── bin
│ ├── config
│ ├── data // 직전 실행 과정에서 남아있던 파일을 삭제
│ ├── jdk.app
│ ├── lib
│ ├── logs // 직전 실행 과정에서 남아있던 파일을 삭제
│ ├── modules
│ └── plugins
/logs/gc.log 파일이 없어서 에러가 발생하는 경우 직접 생성해주시면 됩니다.
touch /logs/gc.log
cluster 구성시 필요한 설정들
설정을 지정하지 않으면 elasticsearch라는 cluster.name 이름이 설정되고 자동으로 같은 cluster로 설정됩니다.
하지만 직접 cluster의 이름, node의 이름, node의 역할을 직접 지정해주는 것이 좋습니다.
elasticsearch.yml 파일에서 설정할 수 있습니다.

클러스터의 상태를 조회해보면 node.role의 m/d가 설정된 것을 알 수 있습니다.

ElasticSearhc Cluster로 실행하기 :: docker-compose로 실행하기
docker-compose로 구성할 때에는 아래의 yml 파일을 사용할 수 있습니다. 아래 설정에서 TODO로 표기된 부분을 -01, -02, -03으로 변경해서 설정해주고 실행하면 됩니다.

version: '3.7'
services:
es-node-01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.12.0
container_name: es-node-01 // TODO
environment:
- node.name=es-node-01 // TODO
- cluster.name=es-cluster
- discovery.seed_hosts=es-node-01,host.docker.internal:9301,host.docker.internal:9302 // TODO
- cluster.initial_master_nodes=es-node-01,es-node-02,es-node-03 // TODO
- path.data=/usr/share/elasticsearch/data
- path.logs=/usr/share/elasticsearch/logs
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
nproc:
soft: 1024000
hard: 1024000
nofile:
soft: 1024000
hard: 1024000
sysctls:
net.core.somaxconn: 65000
healthcheck:
test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cat/health || exit 1"]
interval: 30s
timeout: 30s
retries: 3
restart: always
volumes:
- node-data-01:/usr/share/elasticsearch/data:rw // TODO
- node-logs-01:/usr/share/elasticsearch/logs:rw // TODO
# - ${FULL-PATH-DATA}:/usr/share/elasticsearch/data:rw
# - ${FULL-PATH-LOG}:/usr/share/elasticsearch/logs:rw
ports:
- 9200:9200 // TODO
- 9300:9300 // TODO
networks:
- es-node-brodge-01
volumes:
node-data-01: // TODO
driver: local
node-logs-01: // TODO
driver: local
networks:
es-node-brodge-01: // TODO
driver: bridge
'DEV > ElasticSearch & Lucene' 카테고리의 다른 글
ElasticSearch Tutorial | 05. Fileabeat 연결하기 (0) | 2023.10.30 |
---|---|
ElasticSearch Tutorial | 04. Logstash 연결하기 (1) | 2023.10.30 |
ElasticSearch Tutorial | 03. Kibana 연결하기 (0) | 2023.10.29 |
ElasticSearch Tutorial | 01. 무작정 시작하기 (1) | 2023.10.28 |