작업 명세의 check_restart 블록
작업 명세의 check_restart 블록 (check_restart block in the job specification)
| 배치 | job -> group -> task -> service -> **check_restart** |
| | job -> group -> task -> service -> check -> **check_restart** |
| | |
| | |
check_restart 블록은 Nomad에게 비정상 서비스 체크가 있는 태스크를 언제 재시작할지 지시해요. Nomad 또는 Consul의 헬스 체크가 check_restart 블록에 지정된 limit 동안 비정상이면, 태스크 그룹의 restart 정책에 따라 재시작돼요. check_restart 설정은 check에 적용되지만, 서비스의 모든 체크에 적용하도록 service에도 배치할 수 있어요. check_restart가 check와 service 모두에 설정되면 블록은 병합되며 check 값이 우선해요.
job "mysql" {
group "mysqld" {
restart {
attempts = 3
delay = "10s"
interval = "10m"
mode = "fail"
}
task "server" {
service {
tags = ["leader", "mysql"]
port = "db"
check {
type = "tcp"
port = "db"
interval = "10s"
timeout = "2s"
}
check {
type = "script"
name = "check_table"
command = "/usr/local/bin/check_mysql_table_status"
args = ["--verbose"]
interval = "60s"
timeout = "5s"
check_restart {
limit = 3
grace = "90s"
ignore_warnings = false
}
}
}
}
}
}
출처: 문서
본문
-
limit(int: 0)— 헬스 체크가limit번 실패하면 태스크를 재시작해요. 예를 들어 1은 첫 번째 실패 시 재시작하게 해요. 기본값0은 헬스 체크 기반 재시작을 비활성화해요. 실패는 연속적이어야 해요. 단일 통과 체크가 횟수를 재설정하므로, 깜빡이는(flapping) 서비스는 재시작되지 않을 수 있어요. -
grace(string: "1s")— 태스크가 시작되거나 재시작된 후 그 상태를 확인하기 전에 기다리는 지속 시간. -
ignore_warnings(bool: false)— 기본적으로critical과warning상태가 모두 있는 체크는 비정상으로 간주돼요.ignore_warnings = true로 설정하면warning상태를passing처럼 취급하며 재시작을 트리거하지 않아요. Consul 서비스 제공자에서만 사용 가능해요.
예제 동작 (Example behavior)
위의 mysql 예제를 사용하면 다음과 같은 동작이 있어요:
check_restart {
# ...
grace = "90s"
# ...
}
server 태스크가 처음 시작되어 Consul에 등록되면, 그 상태는 90초 동안 확인되지 않아요. 이는 서버가 시작할 시간을 주기 위함이에요.
check_restart {
limit = 3
# ...
}
유예 기간 후 스크립트 체크가 실패하면, 재시작이 트리거되기 전에 통과할 시간은 180초(60s interval * 3 limit)예요. 재시작이 트리거되면 태스크 그룹의 restart 정책이 제어를 맡아요:
restart {
# ...
delay = "10s"
# ...
}
restart 블록은 태스크의 재시작 동작을 제어해요. 이 경우 태스크를 중지한 다음 다시 시작하기 전에 10초를 기다려요.
태스크가 재시작되면 Nomad는 태스크의 상태를 확인하기 시작하기 전에 다시 grace 기간을 기다려요.
restart {
attempts = 3
# ...
interval = "10m"
mode = "fail"
}
체크가 계속 실패하면 태스크는 interval 내에서 attempts 횟수까지 재시작돼요. limit 내에서 restart 시도에 도달하면 mode가 동작을 제어해요. 이 경우 태스크는 실패하고 더 이상 재시작되지 않아요. 자세한 내용은 restart 블록을 참조하세요.