Image default
Máy Tính

Tự Động Tắt Máy Chủ An Toàn Khi Mất Điện Với Network UPS Tools (NUT) Trên Proxmox

Trong bất kỳ môi trường home lab nào, một trong những rủi ro thường trực là làm thế nào để tắt các máy chủ của bạn một cách an toàn khi có sự cố mất điện. Việc bổ sung một bộ lưu điện (UPS) vào hệ thống là một giải pháp hiệu quả để đảm bảo bạn không mất dữ liệu khi mất nguồn điện. Tuy nhiên, hầu hết các mẫu UPS phổ biến chỉ có một cổng kết nối USB để gửi tín hiệu tắt máy, trong khi home lab của bạn có thể có nhiều thiết bị được cắm vào UPS đó.

Hơn nữa, nếu bạn đang vận hành Proxmox hoặc các hypervisor khác, bạn có thể cần phải tắt nhiều máy ảo (VM) cùng lúc. Đây là một vấn đề mà hầu hết những người đam mê home lab đều phải đối mặt và nó đã được giải quyết từ lâu bằng cách sử dụng một công cụ giám sát tín hiệu tắt máy từ UPS, sau đó phát tín hiệu đó đến tất cả các client được cấp nguồn bởi UPS. Một trong những công cụ mạnh mẽ và đáng tin cậy nhất cho mục đích này là Network UPS Tools (NUT). Đối với hệ thống home lab chạy Proxmox của tôi, NUT chính là “người hùng” thầm lặng giúp bảo vệ dữ liệu và thiết bị.

UPS Eaton 3S 850 được lắp đặt trong hệ thống home lab để bảo vệ máy chủ khỏi mất điện.UPS Eaton 3S 850 được lắp đặt trong hệ thống home lab để bảo vệ máy chủ khỏi mất điện.

Network UPS Tools (NUT) là gì và Tại sao bạn cần nó?

Đảm bảo các thiết bị của bạn biết cách tắt máy an toàn

Các hệ thống home lab thường không có điều kiện tiếp cận các nguồn điện phụ trợ và dự phòng như trung tâm dữ liệu chuyên nghiệp. Do đó, việc trang bị một bộ lưu điện (UPS) chạy bằng pin là điều cần thiết để tránh mất dữ liệu khi gia đình bạn mất điện. Nếu bạn chỉ có một máy chủ hoặc một máy chủ ảo hóa, thì cổng kết nối USB duy nhất mà hầu hết các mẫu UPS sử dụng để báo hiệu là đủ. Nhưng nếu bạn có nhiều máy chủ ảo hóa (ví dụ: các node Proxmox), hoặc các thiết bị khác như máy chủ NAS, máy tính mini PC, bạn cần một cách để gửi tín hiệu tắt máy đến tất cả các máy chủ đó.

Đó chính là lúc Network UPS Tools (NUT) phát huy tác dụng. NUT hoạt động theo mô hình server-client (máy chủ-máy khách), trong đó server sẽ chạy trên máy chủ được kết nối trực tiếp với UPS qua USB. Các client sẽ được cài đặt trên tất cả các thiết bị khác của bạn (bao gồm cả máy chủ đang chạy NUT server). Khi mất điện và UPS bắt đầu hoạt động bằng pin, khi dung lượng pin xuống thấp đến một ngưỡng nhất định, UPS sẽ gửi lệnh tắt máy qua USB. NUT server sẽ nhận lệnh đó và gửi nó đến tất cả các client, đảm bảo tất cả các thiết bị sẽ tắt một cách an toàn trước khi UPS cạn pin hoàn toàn và mất nguồn.

Việc thiết lập NUT có thể không phải là dễ dàng nhất cho người mới bắt đầu, nhưng nó sẽ giúp bạn làm quen với việc chỉnh sửa các file cấu hình và kết quả cuối cùng hoàn toàn xứng đáng với công sức bỏ ra. Ngoài ra, NUT còn có một add-on dành cho Home Assistant để mục đích giám sát, một tính năng rất hữu ích mà cộng đồng home lab yêu thích.

Cài Đặt và Cấu Hình NUT Server Trên Proxmox

Không còn lo lắng mất dữ liệu vì mất điện đột ngột

Tôi đã quyết định cài đặt NUT server trên máy chủ Proxmox của mình. Bước đầu tiên, chúng ta cần xác định cổng USB mà UPS đang kết nối. Điều này được thực hiện bằng cách truy cập vào node PVE và tab Shell trong giao diện web của Proxmox, sau đó sử dụng dòng lệnh (CLI) để chạy lệnh lsusb. Khi chúng ta biết chi tiết [bus] : [device] của UPS (ví dụ: 3:2 như trong trường hợp của tôi), chúng ta sẽ chạy lệnh lsusb -v -s 3:2 để tìm thông tin chi tiết hơn về UPS.

Bây giờ, hãy cài đặt NUT bằng lệnh sau:

apt install nut -y

Sau khi cài đặt xong, chúng ta cần chạy trình quét của NUT để lấy các thông tin cần thiết cho việc cấu hình các file sắp tới:

nut-scanner -U

Chi Tiết Cấu Hình Các File Quan Trọng

Chúng ta có bảy file cần chỉnh sửa để NUT hoạt động trơn tru, cộng thêm một vài lệnh ở cuối để thay đổi ngưỡng phần trăm pin kích hoạt quá trình tắt máy.

  1. /etc/nut/nut.conf:
    Đầu tiên, hãy tạo một bản sao dự phòng:

    cp /etc/nut/nut.conf /etc/nut/nut.example.conf

    Sau đó, mở file bằng bất kỳ trình soạn thảo văn bản nào (ví dụ: nano):

    nano /etc/nut/nut.conf

    Bạn sẽ thấy MODE=none trên dòng không bị comment. Hãy thay đổi thành MODE=netserver, sau đó lưu và thoát.

  2. /etc/nut/ups.conf:
    Tương tự, tạo bản sao dự phòng:

    cp /etc/nut/ups.conf /etc/nut/ups.example.conf

    Mở file để chỉnh sửa:

    nano /etc/nut/ups.conf

    Xóa toàn bộ nội dung hiện có và thêm vào:

    pollinterval = 15
    maxretry = 3
    offdelay = 120
    ondelay = 240

    Và kết quả từ nut-scanner của UPS của bạn (ví dụ dưới đây cho UPS APC):

    [apc]
    # APC Back-UPS BGM1500
    driver = usbhid-ups
    port = auto
    desc = "APC Back-UPS BGM1500"
    vendorid = 051D
    productid = 0002
    serial = xxxxxxxxxxxx

    Lưu file, sau đó kiểm tra để đảm bảo không có lỗi và hiển thị subdriver:

    upsdrvctl start
  3. /etc/nut/upsd.conf:
    Sao lưu file trước khi chỉnh sửa:

    cp /etc/nut/upsd.conf /etc/nut/upsd.example.conf

    Sau đó chỉnh sửa:

    nano /etc/nut/upsd.conf

    Xóa nội dung và thay thế bằng:

    LISTEN 0.0.0.0 3493
    LISTEN :: 3493

    Điều này sẽ khiến NUT server lắng nghe trên tất cả các địa chỉ mạng.

  4. /etc/nut/upsd.users:
    Sao lưu file cấu hình:

    cp /etc/nut/upsd.users /etc/nut/upsd.example.users

    Mở bằng trình soạn thảo yêu thích của bạn:

    nano /etc/nut/upsd.users

    Chỉnh sửa và đặt mật khẩu riêng của bạn:

    [upsadmin]
    # Administrative user
    password = ********
    # Allow changing values of certain variables in the UPS.
    actions = SET
    # Allow setting the "Forced Shutdown" flag in the UPS.
    actions = FSD
    # Allow all instant commands
    instcmds = ALL
    upsmon master
    
    [upsuser]
    # Normal user
    password = ********
    upsmon slave
  5. /etc/nut/upsmon.conf:
    Sao lưu file:

    cp /etc/nut/upsmon.conf /etc/nut/upsmon.example.conf

    Sau đó chỉnh sửa bằng bất kỳ trình soạn thảo nào và thay thế nội dung (bao gồm mật khẩu admin của bạn):

    RUN_AS_USER root
    MONITOR apc@localhost 1 upsadmin ******* master
    
    MINSUPPLIES 1
    SHUTDOWNCMD "/sbin/shutdown -h"
    NOTIFYCMD /usr/sbin/upssched
    POLLFREQ 4
    POLLFREQALERT 2
    HOSTSYNC 15
    DEADTIME 24
    MAXAGE 24
    POWERDOWNFLAG /etc/killpower
    
    NOTIFYMSG ONLINE "UPS %s on line power"
    NOTIFYMSG ONBATT "UPS %s on battery"
    NOTIFYMSG LOWBATT "UPS %s battery is low"
    NOTIFYMSG FSD "UPS %s: forced shutdown in progress"
    NOTIFYMSG COMMOK "Communications with UPS %s established"
    NOTIFYMSG COMMBAD "Communications with UPS %s lost"
    NOTIFYMSG SHUTDOWN "Auto logout and shutdown proceeding"
    NOTIFYMSG REPLBATT "UPS %s battery needs to be replaced"
    NOTIFYMSG NOCOMM "UPS %s is unavailable"
    NOTIFYMSG NOPARENT "upsmon parent process died - shutdown impossible"
    
    NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
    NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
    NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
    NOTIFYFLAG FSD SYSLOG+WALL+EXEC
    NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC
    NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC
    NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
    NOTIFYFLAG REPLBATT SYSLOG+WALL
    NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC
    NOTIFYFLAG NOPARENT SYSLOG+WALL
    
    RBWARNTIME 43200
    NOCOMMWARNTIME 600
    
    FINALDELAY 5
  6. /etc/nut/upssched.conf:
    Chúng ta đang gần hoàn tất. Tạo bản sao dự phòng của upssched.conf:

    cp /etc/nut/upssched.conf /etc/nut/upssched.example.conf

    Mở file và thay thế nội dung bằng:

    CMDSCRIPT /etc/nut/upssched-cmd
    PIPEFN /etc/nut/upssched.pipe
    LOCKFN /etc/nut/upssched.lock
    
    AT ONBATT * START-TIMER onbatt 30
    AT ONLINE * CANCEL-TIMER onbatt online
    AT LOWBATT * EXECUTE onbatt
    AT COMMBAD * START-TIMER commbad 30
    AT COMMOK * CANCEL-TIMER commbad commok
    AT NOCOMM * EXECUTE commbad
    AT SHUTDOWN * EXECUTE powerdown
    AT SHUTDOWN * EXECUTE powerdown
  7. /etc/nut/upssched-cmd:
    File này không phải lúc nào cũng tồn tại, vì vậy bạn có thể tạo mới trực tiếp bằng lệnh:

    nano /etc/nut/upssched-cmd

    Và viết nội dung file mới với:

    #!/bin/sh
    case $1 in
        onbatt) logger -t upssched-cmd "UPS running on battery" ;;
        shutdowncritical) logger -t upssched-cmd "UPS on battery critical, forced shutdown" /usr/sbin/upsmon -c fsd ;;
        upsgone) logger -t upssched-cmd "UPS has been gone too long, can't reach" ;;
        *) logger -t upssched-cmd "Unrecognized command: $1" ;;
    esac

    Lưu file, sau đó cấp quyền thực thi:

    chmod +x /etc/nut/upssched-cmd

Đó là kết thúc các bước cấu hình. Bây giờ, chúng ta có thể khởi động lại máy chủ Proxmox của mình, hoặc sử dụng CLI để khởi động lại các dịch vụ NUT sau khi chúng đã có các file cấu hình chính xác:

service nut-server restart
service nut-client restart
systemctl restart nut-monitor
upsdrvctl stop
upsdrvctl start

Bạn có thể kiểm tra mọi thứ bằng lệnh sau, lệnh này sẽ hiển thị danh sách các thiết bị đang được giám sát nếu mọi thứ đã được thiết lập đúng cách:

upsc apc@localhost

Ảnh chụp màn hình kết quả lệnh lsusb trong Proxmox VE Shell, hiển thị thông tin chi tiết cổng USB của UPS APC.Ảnh chụp màn hình kết quả lệnh lsusb trong Proxmox VE Shell, hiển thị thông tin chi tiết cổng USB của UPS APC.

Điều Chỉnh Ngưỡng Pin Kích Hoạt Tắt Máy

Các thiết lập mặc định cho các mẫu UPS APC thường quá thấp so với mức độ an toàn mong muốn của tôi. Do đó, chúng ta sẽ điều chỉnh các lệnh tắt máy xảy ra sớm hơn nhiều. Sử dụng hai lệnh tiếp theo trong Proxmox VE Shell, và sử dụng upsadmin cùng với password mà chúng ta đã chỉ định trước đó trong /etc/nut/upsd.users:

upsrw -s battery.runtime.low=600 apc@localhost
upsrw -s battery.charge.low=50 apc@localhost

Lệnh đầu tiên đặt thời gian còn lại của pin là 600 giây (10 phút) trước khi kích hoạt cảnh báo pin yếu và tắt máy. Lệnh thứ hai đặt ngưỡng phần trăm pin còn lại là 50% trước khi tắt máy. Bạn có thể điều chỉnh các giá trị này cho phù hợp với nhu cầu và dung lượng UPS của mình.

Giám Sát NUT Với Home Assistant

Home Assistant có một tích hợp sẵn dành cho NUT, mà bạn có thể thêm từ Settings > Devices & Services > Add Integration. Để kết nối và giám sát, bạn sẽ cần thêm địa chỉ IP của NUT server của bạn, cùng với user và mật khẩu người dùng thông thường mà bạn đã thiết lập trước đó. Thao tác này sẽ tự động kéo dữ liệu về bảng điều khiển chính của bạn, hiển thị chính xác những gì NUT UPS server của bạn đang làm.

Giao diện Home Assistant hiển thị tích hợp và giám sát trạng thái UPS APC thông qua NUT server, với các thông số như dung lượng pin và trạng thái nguồn.Giao diện Home Assistant hiển thị tích hợp và giám sát trạng thái UPS APC thông qua NUT server, với các thông số như dung lượng pin và trạng thái nguồn.

Kết Luận

Với Network UPS Tools (NUT) được cấu hình và giám sát trên các máy chủ Proxmox, nỗi lo về việc mất dữ liệu do mất điện đột ngột đã giảm đi đáng kể. Hệ thống home lab của tôi giờ đây có thể tự động tắt các máy ảo và máy chủ vật lý một cách an toàn, đảm bảo tính toàn vẹn của dữ liệu và kéo dài tuổi thọ thiết bị.

Nếu tôi cần thêm máy chủ hoặc các thiết bị khác để giám sát NUT server cho việc tắt máy an toàn, tôi có thể dễ dàng thêm chúng như các thiết bị client. Điều này cho phép chúng giám sát tín hiệu tắt máy và tự động tắt trước khi pin UPS cạn kiệt. Mặc dù các mẫu UPS đắt tiền hơn có thể gửi tín hiệu tắt máy đến nhiều client cùng lúc, nhưng giải pháp sử dụng NUT hoàn toàn miễn phí và mang lại hiệu quả tương đương, là một khoản đầu tư đáng giá cho bất kỳ home lab nào.

Hãy chia sẻ ý kiến của bạn về giải pháp Network UPS Tools và cách bạn bảo vệ home lab của mình khỏi mất điện trong phần bình luận bên dưới!

Related posts

Vì sao 5 ứng dụng Adobe này vẫn là lựa chọn số 1 của giới chuyên nghiệp Việt?

Administrator

So sánh Proxmox và Harvester: Lựa chọn Hypervisor nào cho Home Lab?

Administrator

Vì Sao Tôi Từ Bỏ Tản Nhiệt Nước AIO Và Quay Lại Với Tản Nhiệt Khí Cho Mọi Dàn PC

Administrator