728x90
이번에 plugin반영 작업이 있어 운영 중인 ElasticSearch 재기동을 해야 하는 일이 생겼다.
때마침 정기점검이 있어 새벽에 작업이 있던 나와 부장님이 같이 작업을 하기로 하였다.
개발할때는 맘대로 재기동을 하였지만 이제는 운영이라 신중히 장애가 생기지 않도록 소스 반영 및 노드들을 재기동을 해야 했다.
먼저 공식 홈페이지에 나와 있는 방법으로는 아래 2가지가 있다.
1. Full-Cluster Restart
2. Rolling Restart
2가지의 차이 점은 서비스 중단이 되는냐 아니냐가 큰 차이점이라고 보면 될 것 같다.
1번 Full-Cluster Restart의 경우 전체 노드를 down시킨 뒤 작업할거를 하고 전체 노드를 다시 up시키는 형태라 중간에 Down Time이 발생한다.
2번 Rolling Restart의 경우 서비스중인 노드를 하나씩 차례대로 down -> up 하는 형태라 서비스의 Down Time은 없다.
이번에 나의 경우 정기점검 작업이다 보니 실제 서비스가 중지 된 시점이라 1번 Full-Cluster Restart 방식으로 진행을 하였다.
순서는 아래와 같으며 공식 홈페이지에서 가이드하는 순서 그대로 이다.
Full-cluster Restart
1. 샤드 할당을 비활성화 한다.
비활성화를 하는 이유는 클러스터에 속한 노드가 중지 될 경우 장애로 인식하여 해당 노드가 가지고 있던 Primary 샤드나 Replica 샤드들을 다른 노드로 옮기는 샤드 할당(Shard Allocation) 작업을 한다. 이때 고비용의 I/O 리소스가 발생하게 된다. 하지만 업그레이드나 plugin반영 등 장애 사항이 아닌 경우에는 이런 샤드 할당 기능을 비활성화하여 재기동하였을 때 불필요한 작업들을 하지 않아 빠른 클러스터의 안정을 가져다 준다.
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "primaries"
}
}
cluster.routing.allocation.enable 옵션값으로는 아래 설명 참고!
- all : (default) 모든 종류의 샤드에 샤드 할당을 허용
- primaries : 기본 샤드에 대해서만 샤드 할당을 허용
- new_primaries : 새로 만들어지는 인덱스의 기본 샤드에 대해서만 샤드 할당을 허용
- none : 모든 인덱스에 대해 어떤 종류에 샤드 할당도 허용되지 않음
2. 인덱싱을 중지하고 플러시를 수행합니다.
POST /_flush
2번의 경우 flush를 해주면 추후에 노드가 올라왔을 때 샤드 복구가 좀 더 빨리 된다.
그 이유는 트랜잭션 로그에 데이터가 쌓여있는 상태에서 아직 루씬 파일에 데이터를 write하지 않은 시점에 flush를 할 경우 쌓여있는 데이터를 루씬 파일에 write를 하게 되어 이후에 노드가 restart 되었을 때 시간을 단축해 준다.
3. 모든 노드 중지
4. 변경 사항 반영
5. 모든 노드 재시작
3~5번의 경우 우리팀의 경우 jenkins로 소스를 배포하는 Job이 있어 해당 Job을 실행 하면 소스 업데이트 -> ElasticSearch Down -> ElasticSearch Up을 하게 되어 있어 해당 Job을 실행 하였다.
6. 모든 노드가 클러스터에 참여할 때까지 기다렸다가 상태를 노란색으로 보고합니다.
노드가 정상적으로 다 올라오는지 확인한다. 우리팀의 경우 cerebro라는 모니터링 tool을 사용하고 있어서 해당 tool을 보거나 아님 직접 아래 API를 날려서 확인 하였다.
GET _cat/nodes?pretty&v
ElasticSearch 노드가 다 올라오면 health는 yellow로 된다. (replica shard가 할당이 되지 않았기 때문)
7. 샤드 할당을 다시 활성화합니다.
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
health를 green으로 만들기 위해 다시 allocation 옵션을 null 또는 "all"로 초기화 해준다.
8.모니터링 tool로 레플리카 샤드가 복구 되는지 확인한다.
그 다음 샤드들이 잘 복구 되는지 확인한다. 역시나 cerebro 또는 아래 API를 통해서 확인한다.
GET _cat/health?v
'검색엔진 > ElasticSearch' 카테고리의 다른 글
ElasticSearch 색인, 검색 노드 나누기 (0) | 2022.03.23 |
---|---|
ElasticSearch - Rolling Restart (0) | 2022.03.22 |
ElasticSearch에서 삭제가 발생하면 어떻게 동작할까? (0) | 2022.03.03 |
ElasticSearch Delete API (0) | 2022.03.03 |
ElasticSearch Health (0) | 2022.02.24 |