안녕하세요.
음.. 현재 AWS 환경에서 Elasticsearch 클러스터를 구성해서 열심히 개발 중인 개발자입니다. 다름이 아니라 최근에 zen discovery 와 관련해서 이슈가 발생해서 해결 방법을 공유하고 원인을 같이 생각해보고자 글을 올립니다.
#운영환경
일단 운영환경을 먼저 공유해드리면,
- 리전: 서울 리전
- 클러스터 구성
- Master node(3): M4.large
- Data node(3): M4.xlarge
- Coordinator Node(2): M4.xlarge
- 디스커버리 설정
discovery.zen.hosts_provider: ec2
discovery.ec2.any_group: false
#문제 발생
문제는 Coordinator Node의 약간 문제가 생겨서 로그를 상세하게 찍어보려고 로그 레벨을 바꿔 재시작하자 발생했습니다. 아무리 기다려도 클러스터에 재시작한 노드가 포함되지 않는 것입니다. curl을 이용해서 9200을 get 해보니 다음과 같은 메시지를 보였습니다.
{
"name" : "coordinator_************",
"cluster_name" : "****************",
"cluster_uuid" : "_na_",
"version" : {
"number" : "5.1.1",
"build_hash" : "5395e21",
"build_date" : "2016-12-06T12:36:15.409Z",
"build_snapshot" : false,
"lucene_version" : "6.3.0"
},
"tagline" : "You Know, for Search"
}
그리곤 로그를 열심히 찾아뒤졌습니다.
[2017-02-23T05:50:51,175][TRACE][o.e.d.z.ZenDiscovery ] [coordinating_*********] full ping responses: {none}
맞습니다. response를 받아오지 못하고 있었습니다.
문제 해결
해결은 단순하게 할 수 있었습니다. 설정에서 discovery ping timeout(기본값: 3s)을 늘려주어 문제를 해결하고 재시작된 노드가 클러스터에 잘 접속하는 것을 확인할 수 있었습니다.
discovery.zen.ping_timeout: 30s
그런데 쪼끔 꺼림칙 했습니다. 그동안 기본값인 3s 에서도 잘 동작하던 ping이 왜 갑자기 느려진걸까요?
원인은?
- 엘라스틱서치의 클러스터가 느려져서?
현재 엘라스틱서치 클러스터에는 45개의 인덱스와 4백만개의 도큐먼트(약 13gb)가 저장되어있습니다. 이정도로 클러스터가 느려져서 이런 문제가 생긴건 아니겠지요? ㅎㅎㅎ - AWS의 인스턴스가 많아서?
현재 서울리전에는 약 40개의 인스턴스가 동작 중입니다. 이에 따라 서울 리전을 모두 검색해서 ping을 날리는 zen discovery의 시간이 예전보다 많이 필요해져서 기본값으로는 부족했다라는 판단을 내릴 수도 있겠습니다. - AWS 네트워크 문제?
처음 문제가 생긴 노드는 마스터노드와 AZ가 달라서 AZ 간 네트워크 차이로 인한 문제로 생각했습니다. 하지만 테스트를 위해 같은 AZ를 재시작해본 결과는 같았습니다. 마스터 노드로 ping을 날려봤을 때도 AZ가 다른 경우 약 1ms, 같은 경우 0.1ms가 소요되는 정상적인 수준이었습니다.
여러분의 생각은?
문제는 간단히 해결했지만 정확한 원인을 파악하지 못하면 문제가 다시 발생할 수 있겠지요. 왜 갑자기 discovery 시간이 더 많이 필요해진건지 여러분들의 생각은 어떠십니까?