Elasticsearch 실행 상태 확인하기
아래 명령어를 통해 Elasticsearch가 정상적으로 작동하고 있는지 확인하실 수 있습니다 !
curl localhost:9200
만약 curl: (7) Faild connect to localhost:9200; Connection refused 와 같은 에러가 발생했을 경우 elasticsearch.yml 파일의 network 설정을 확인해보시길 바랍니다 !
elasticsearch.yml 설정 정보
Elasticsearch의 실행 환경에 대한 설정은 elasticsearch.yml에서 관리합니다.
yml의 주요 설정은 아래와 같습니다.
cluster.name : "클러스터명"
- 클러스터명을 설정할 수 있습니다.
- 노드들은 클러스터명이 같으면 클러스터로 묶입니다.
- 클러스터명이 다르면 동일한 물리적 장비나, 바인딩이 가능한 네트워크상에 있더라도 서로 다른 클러스터로 바인딩 됩니다.
- default 클러스터명은 elasticsearch입니다.
node.name : "노드명"
- 실행중인 각각의 elasticsearch 노드들을 구분할 수 있는 노드의 이름을 설정합니다.
- 설정하지 않으면 7버전 이상부터는 호스트명으로 설정됩니다.
node.attr. : "value"
- 노드별로 속성을 부여하기 위한 일종의 네임스페이스를 지정합니다.
- 이 설정을 이용하면 hot/warm 아키텍처를 구성하거나 물리 장비 구성에 따라 샤드 배치를 임의적으로 조절하는 등의 설정이 가능합니다.
path.data : ["경로"]
- 색인된 데이터를 저장하는 경로를 지정합니다.
- Default : Es 설치경로/data
- 배열형태로 여러개의 경로값의 입력이 가능하기 때문에 한 서버에서 디스크를 여러개 사용할 수 있습니다.
path.logs : "경로"
- ElasticSearch 실행 로그를 저장하는 경로를 지정합니다.
- Default : Es설치경로/logs
- 실행중인 시스템 로그는 클러스터명.log 형식의 파일로 저장되며, 날짜가 변경되면 날짜가 추가됩니다.
bootstrap.memory_lock : true
- Elasticsearch가 사용 중인 힙 메모리 영역을 다른 자바 프로그램이 간섭하지 못하도록 미리 점유하는 설정입니다.
- true 권장
network.host : ip주소
- Elasticsearch가 실행되는 서버의 ip주소
- Default : 127.0.0.1
- 주석 처리 혹은, 루프백인 경우 개발모드로 실행됩니다.
- 이 설정을 실제 IP 주소로 변경 시, 운영 모드로 실행되며, 시작 시 부트스트랩을 체크합니다.
- network.host는 서버의 내/외부 주소를 모두 지정하는데 만약 내부망에서 사용하는 주소와 외부망에서 접근하는 주소를 다르게 설정하고자 하면 아래의 값 들을 이용해서 구분이 가능합니다.
- network.bind_host : 내부망
- network.publish_host : 외부망
- 다음은 network.host 설정에 사용되는 특별한 변수값입니다.
- _local_ : 루프백 주소 127.0.0.1과 같습니다. (Default 값)
- _site_ : 로컬 네트워크 주소로 설정, 실제로 클러스터링 구성 시 주로 설정하는 값입니다.
- _global_ : 네트워크 외부에서 바라보는 주소로 설정합니다.
실제로 클러스터를 구성할 떄 설정을 network.host : _site_ 로 해놓으면 서버의 네트워크 주소가 바뀌어도 설정 파일은 변경하지 않아도 되기 때문에 편리합니다.
http.post : 포트번호
- Elasticsearch가 클라이언트와 통신하기 위한 http 포트를 설정합니다.
- Default : 9200
- 포트가 이미 사용 중인 경우 9300~9399 사이의 값을 차례대로 사용합니다.
discovery.seed.hosts:["호스트-1", "호스트-2", ...]
- 클러스터 구성을 위해 바인딩 할 원격 노드의 IP 또는 도메인 주소를 배열 형태로 입력합니다.
- 주소만 적는 경우 Default로 9300~9305 사이의 값을 검색합니다.
- tcp 포트가 이 범위 밖에 설정 된 경우 포트번호까지 같이 적어줘야합니다.
이렇게 원격에 있는 노드들을 찾아 바인딩하는 과정을 디스커버리라고합니다.
cluster.inital_master_nodes : ["노드-1", "노드-2"]
- 클러스터가 최초 실행될 때 명시된 노드들을 대상으로, 마스터 대상으로 마스터 노드를 선출합니다.
단일 서버, 단일 노드, 단일 클러스터 설정하기
처음으로 아래와 같이 단일 cluster를 생성해 볼 것입니다 ! (elasticsearch.yml 파일 수정)
① cluster의 이름은 "scout-cluster"로 지정합니다. (cluster.name)
② node의 이름은 "node-1"로 지정합니다. (node.name)
③ 서버와 elasticsearch 간의 연결을 시도합니다. (network.host)
④ 방화벽 설정을 제거하고 client에서 elasticsearch를 호출할 수 있도록 해줍니다. (filter IP : 0.0.0.0/0)
→ cluster의 이름과 node이름을 설정해줍니다.
cluster.name: "scout-cluster"
node.name: "node-1"
→ 내부 IP로도 접속이 가능하도록 수정해줍니다.
elasticsearch는 기본적으로 localhost로만 접근이 가능하도록 되어있어 내부 ip로 접근 시 결과가 나타나지 않을 것입니다.
// 내부 IP가 12.34.56.111 인 경우(결과 X)
curl 12.34.56.111
// localhost (결과 O)
curl localhost:9200
따라서 내부 IP 또는 공유 IP로 접근하려면 설정이 필요합니다.
elasticsearch가 inter network ip를 찾아서 setting 하는 방법입니다.
network.host: "_site_, _local_"
🚨 오류 발생
elasticsearch를 실행하면 오류가 발생합니다 !!
이유는 network host 설정을 하지 않으면 elasticsearch 실행 시 개발자 모드로 오류 없이 실행이 되지만, network host의 값을 설정하게 되면 외부에서도 접속을 하게 되는 상태로 만들게 되어 bootstrap check를 하게 되어 바로 실행되지 않습니다.
🎊 해결방법
실행이 되지 않는 이유를 elasticsearch의 log를 보고 찾을 수 있었습니다 !
1. max file descriptions
- 한 프로세스가 접근할 수 있는 파일에 제한을 두는데 이 값을 무한대로 바꿔주야합니다.
- limit.conf 파일에서 설정 변경
- /etc/security/limits.conf 파일 설정 변경
- 맨 마지막 줄에 (root = 계정이름) 추가
root hard nofile 65536
root soft nofile 65536
root - noflie 65535
2. max virtual memory areas
- /etc/sysctl.conf 파일에서 설정 변경
- vm.max_map_count=262144
3. discovery settings are unsuitable
- elasticsearch.yml 파일에서 수정
- discovery.seed_hosts 설정을 해줘야합니다.
- host name을 써주면됩니다.
- discovery.seed_hosts: 호스트이름
- cluster.initial_master_nodes: 노드이름
이후 시스템을 재시작 해줘야합니다 !
sudo shutdown -r
// sysctl.conf 파일을 적용시켜주기
sudo sysctl -p
상단의 설정 내용을 변경해준 이후 정상적으로 작동되었습니다 :) 추가로 SSL 설정이 궁금하신 분은 아래 게시글을 참고주세요 !
'개발공부 > Elasticsearch' 카테고리의 다른 글
[ELK] logstash와 mysql 다중 테이블 가져오기 (0) | 2024.04.25 |
---|---|
[EKL] logstash와 Mysql 연동하기 (0) | 2024.04.24 |
[EKL] Elasticsearch와 kibana 로컬서버에 설치하기 ! (0) | 2024.04.22 |
[EKL] Elasticsearch란 ? (0) | 2024.04.17 |
개발의 모든 것 !
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!