UPS setting
UPS란?
UPS는 Uninterruptible Power Supply(무정전 전원 장치)의 약자로, 갑작스러운 순간 정전이나 긴 정전, 전력이 불안정한 상황에 연결된 장치에 일정시간 동안 안정된 전력을 계속 공급할 수 있는 장치이고, 고급형의 경우 외부 전력을 양질의 전력으로 바꿔주는 기능도 합니다. (DC로 변환한 후 다시 순수 sine파 AC로 재변환)
24시간 동작하는 서버 등 중요한 장비의 오작동을 방지하고 안전한 종료를 보장하는 기기입니다.
| 유형 | 변환 방식 | 양질 전력 제공 여부 |
| 오프라인 | 직통 + 정전 시 변환 | 제한적 |
| 라인 인터랙티브 | 부분 조정 + 변환 | 중간 |
| 온라인 | 항상 이중 변환 (AC-DC-AC) | 우수 |
UPS 운영 전략
만약 가지고 있는 기기가 UPS와 서버 1대로만 이루어져 있다면, ups에서 제공하는 usb cable과 전원 케이블을 서버와 직통으로 연결해서 관리해도 됩니다. 보통 시놀로지, unraid 등의 유명 운영체제는 기본적으로 ups agent가 미리 내장되어 설정할 수 있습니다.
다만, ups에 서버가 여러대 연결될 경우엔, usb cable에 연결된 장치는 보호받을 수 있지만 정전 정보를 받을 수 없는 나머지 기기들은 배터리가 다 소진될때까지 동작하다가 갑자기 꺼져버리게 되어 의미가 없습니다.
이런 경우 대안은 NUT를 운영하는 것입니다. ups의 usb 케이블은 NUT master에서 받아서 전원을 관리하고, 유사 시 정전 정보를 브로드캐스팅하며 각 서버의 NUT slave에서 이 정보를 받아 안전하게 서버를 종료합니다.
NUT는 Network UPS tool의 약자이며 많이 사용됩니다. 여담으로 ups 상태를 모니터링하는 dashboard docker app으로 PeaNUT이 있습니다.
라즈베리파이 서버
우선 ups 정보를 24시간 감시할 저젼력 서버를 준비합니다. 24시간 감시를 해야하므로 항상 켜져 있어야 하지만, 시스템 자원은 아주 적게 소모하기 때문에 라즈베리파이 서버가 가장 좋은 대안이긴 합니다. 하지만 필요에 따라서 docker를 운영할 수 있는 어떤 서버도 문제 없습니다.
우선 ups의 usb 케이블을 연결한 후 rpi의 터미널에서 다음 명령으로 출력을 확인합니다.
lsusb | grep -i ups # 연결된 장치에서 ups를 포함하는 장치 확인
잘 연결되어 있는 상태라면 다음과 비슷한 응답이 돌아옵니다.
여기서는 vender id 051d와 product id 0003이 중요합니다. 다음으로 docker compose 파일을 작성합니다.
services:
nut-upsd:
image: instantlinux/nut-upsd:latest
container_name: nut-upsd
restart: unless-stopped
ports:
- "3493:3493"
environment:
- TZ=Asia/Seoul
- API_USER=upsmon
- API_PASSWORD=YOUR_PASSWORD # need change
- DRIVER=usbhid-ups
- GROUP=nut
- NAME=ups
- POLLINTERVAL=15
- PORT=auto
- SERIAL=
- SERVER=master
- VENDORID=051d # lsusb에서 확인한 vender id
- DESCRIPTION=APC Smart-UPS SMT750RMI2UC
devices:
- /dev/bus/usb:/dev/bus/usb
privileged: true # for local USB device
volumes:
- nut-config:/etc/nut
healthcheck:
test: ["CMD", "upsc", "ups@localhost"]
interval: 30s
timeout: 10s
retries: 3
volumes:
nut-config:
보통 포트는 일반적으로 3493번을 이용합니다. docker-compose 파일을 작성한 후 docker 를 동작시키면 다음과 같은 응답을 받을 수 있습니다.

