Elasticsearch를 하면서 발생했던 트러블 슈팅에 대해 정리한다.
환경
{ "error" : { "root_cause" : [ { "type" : "master_not_discovered_exception", "reason" : null } ], "type" : "master_not_discovered_exception", "reason" : null }, "status" : 503 }
마스터 노드를 찾을 수 없다는 오류였다.
yml 파일에 들어간다.
sudo nano /etc/elasticsearch/elasticsearch.yml
그리고, 파일 내용에서 마스터 노드로 지정할 노드 네임을 기재해준다.
cluster.initial_master_nodes: ["mu-node"]
그리고 나와서 서비스 재시작!!
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
여기서 해결될 수도 있는데, 나는 해결이 안됐다.
해결이 안됐을 경우 취할 수 있는 조치 방법은 2가지
1. 설정 파일 내용 기재할때는 "속성값: 값" 형태여야 한다. -> 띄어쓰기 주의!!!
2. 하나의 속성을 더 기재할 수 있다.
node.master: true
이후 서비스 재시작 !!!!
인덱스의 속성을 매핑할때 발생하는 오류이다.
대부분 버전대와 맞지않는 속성 명을 기재해서 생긴다. (필자의 경우 그랬다.)
먼저, 본 문서를 참고해서 매핑 가이드를 확인해보자.
지금 문서를 보고있는 읽는 이의 ES버전대가 7.x라면, 아래의 매핑폼을 확인해보고 본인이 불필요한 속성을 넣었는지 확인해보자.
{
"mappings": {
"properties": {
"category": {
"type": "keyword"
},
"pages": {
"type": "byte"
},
"title": {
"type": "text"
}
}
}
}
3,4,5번 오류는 아직 생성하지 않은 인덱스에 속성과 함께 인덱스 정보를 매핑해주는 과정에서 발생하는 오류이다.
이걸 확인한다면 당신은 바보!!!!!!!!!!!!!!!! 버전을 확인해라
이것도 버전대로인한 오류 중 하나이다. ES에서 이제는 String 타입이 아닌 text타입을 사용함으로, 타입 속성만 변경해서 다시 매핑해주면 된다.
이걸 확인한다면 당신은 바보!!!!!!!!!! 버전을 확인해라
이제 analyzed 속성은 없다!!!
본 문서를 참고해서 매핑 가이드를 확인해보자.
이걸 확인한다면 당신은 바보다 ... 매핑 커맨드나 put하는 내용에 현재 버전대와 맞지 않는 부분이 반드시 있을 것이다..
본 문서를 참고해서 매핑 가이드를 확인해보자.
인덱스 타입이 원래는 doc이어야 하는데 line으로 들어와서 doc이랑 line 2개가 들어왔다는 말이다.(1개를 초과했다)
5.4에서는 이게 왜 허용되었냐면, 이전 버전대에는 인덱스에 여러 타입이 들어와도 호환이 가능했지만 이로인한 이슈가 많아 엘라스틱 측에서 6.x버전 부터는 하나의 타입만 사용하도록 강제했다.
이렇게 타입이 1개밖에 없어서 7.x대 버전부터는 타입이 아예 사라졌다. 공식문서를 참고해보면, 샘플 데이터에 타입이 없는 것을 확인할 수 있다.
즉, 매핑하려는 데이터의 오류이다. 잘 확인해보시라!!!
말 그대로 연결 오류이다. 필자의 경우 3가지 원인으로 이 오류를 만났었다.
일단 연결이 실패한 이유에는 크게 3가지로 무조건 수렴한다.
sudo nano /etc/elasticsearch/elasticsearch.yml
여기서 설정해야 할 속성들은 대부분 이정도...
여기서 제외된 속성이 있나 확인해보셔라.
cluster.name: my-application
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: localhost
http.port: 9200
transport.port: 9300
discovery.seed_hosts: localdamain
cluster.initial_master_nodes: ["node-1"]
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
[irteamsu@localhost ~]$ firewall-cmd --zone=public --permanent --add-port=9300/tcp
success
[irteamsu@localhost ~]$ firewall-cmd --zone=public --permanent --add-port=9200/tcp
success
[irteamsu@localhost ~]$ firewall-cmd --reload
이 오류도 대부분 3가지의 원인 중 하나였다.
일단 이 문서를 먼저 참고해보시고, 여기서 빠트린 내용이 있는지 확인해봐라.
sudo nano /etc/elasticsearch/elasticsearch.yml
여기서 설정해야 할 속성들은 대부분 이정도...
필자는 로컬 환경에서 실행해서 이 속성을 입력했다.
본인이 로컬환경이라면 참고해보고,
여러개의 노드로 이뤄진 클러스터를 운영중이라면
공식 가이드 문서를 참고하시길..
cluster.name: my-application
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: localhost
http.port: 9200
transport.port: 9300
discovery.seed_hosts: localdamain
cluster.initial_master_nodes: ["node-1"]