power / knowledge
NUT이 FSD를 걸고 실제로 꺼지기까지의 순서
정전이 길어져서 배터리가 바닥나면 NUT이 FSD(forced shutdown)를 선언한다. 여기서 바로 전원이 끊기는 게 아니라 단계가 있다.
FSD → HOSTSYNC → FINALDELAY → SHUTDOWNCMD
→ OFFDELAY
각 구간에 걸리는 값이 따로 있고, 이걸 잘못 잡으면 아직 안 꺼진 기계가 있는데 UPS가 전원을 끊는다.
값의 의미
| 항목 | 위치 | 의미 |
|---|---|---|
HOSTSYNC |
upsmon.conf |
primary가 secondary들에게 신호를 보내고 기다리는 시간. secondary 입장에서는 FSD가 안 오는데 배터리가 바닥이면 혼자 꺼지기까지 기다리는 시간 |
FINALDELAY |
upsmon.conf |
종료 알림을 보내고 실제 SHUTDOWNCMD 를 실행하기까지 |
OFFDELAY |
ups.conf |
FSD 이후 UPS가 출력을 끊기까지 |
ONDELAY |
ups.conf |
전기가 돌아온 뒤 UPS가 출력을 다시 넣기까지 |
DEADTIME |
upsmon.conf |
이 시간 동안 소식이 없으면 죽은 것으로 본다. POLLFREQ 값들 중 큰 쪽의 3배 정도로 잡는 게 관례다 |
실제로 넣은 값
# primary
HOSTSYNC 15
FINALDELAY 5
OVERDURATION 60
# ups.conf
offdelay = 240
ondelay = 120
# secondary
FINALDELAY 0
offdelay 를 240으로 잡은 게 핵심이다. Proxmox에서 VM의 shutdown timeout을 180초로 잡아뒀기 때문이다. VM들이 다 내려가는 데 최대 180초가 걸리는데 UPS가 그 전에 전원을 끊으면 아무 의미가 없다. 여기에 60초를 더 얹어 여유를 뒀다.
secondary의 FINALDELAY 는 0으로 뒀다. primary가 이미 HOSTSYNC 만큼 기다려주므로 secondary가 또 기다릴 이유가 없다. 오히려 빨리 꺼지는 편이 낫다.
OVERDURATION 60 은 과부하 상태에서 UPS와 통신도 안 되는 상황이 60초 넘게 이어지면 critical로 보라는 뜻이다.
POWERDOWNFLAG
POWERDOWNFLAG /run/nut/killpower
종료 과정에서 이 파일이 생기고, 시스템이 마지막에 이 파일을 보고 UPS에 전원을 끊으라고 알린다. primary와 secondary 양쪽에 같은 경로로 둔다.