Máy Tính

Hướng Dẫn Cài Đặt Network UPS Tools (NUT) Trên Proxmox: Tự Động Tắt Máy Chủ An Toàn

Bộ lưu điện UPS Eaton 3S 850 được cài đặt trong hệ thống home lab

Trong thế giới của home lab và máy chủ gia đình, một trong những mối lo ngại lớn nhất chính là làm thế nào để bảo vệ dữ liệu và tắt các thiết bị 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 của bạn là một bước đi thông minh để tránh mất mát dữ liệu. 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 một home lab có thể sở hữu nhiều máy chủ, máy ảo hoặc các thiết bị khác cần được tắt đồng thời. Đặc biệt, nếu bạn đang vận hành các siêu giám sát (hypervisor) như Proxmox với nhiều máy ảo (VMs) đang chạy, việc đảm bảo tất cả các thành phần được tắt một cách tuần tự và an toàn trở nên vô cùng quan trọng.

Đây là một vấn đề mà hầu như mọi người đam mê home lab đều phải đối mặt. May mắn thay, đã có một giải pháp hiệu quả từ lâu: sử dụng một công cụ để giám sát tín hiệu tắt máy từ UPS và phát tán tín hiệu đó đến tất cả các thiết bị 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 chính là Network UPS Tools, hay gọi tắt là NUT. NUT đã trở thành “vị cứu tinh” cho hệ thống home lab dựa trên Proxmox của tôi, giúp tôi an tâm hơn mỗi khi mất điện. Bài viết này sẽ hướng dẫn bạn chi tiết cách cài đặt và cấu hình NUT trên máy chủ Proxmox để tự động tắt hệ thống an toàn, bảo vệ dữ liệu quý giá của bạn.

Bộ lưu điện UPS Eaton 3S 850 được cài đặt trong hệ thống home labBộ lưu điện UPS Eaton 3S 850 được cài đặt trong hệ thống home lab

Network UPS Tools (NUT) là gì và tại sao nên sử dụng?

Đảm bảo thiết bị của bạn tắt máy an toàn trong mọi tình huống

Không giống như các trung tâm dữ liệu lớn với nguồn điện dự phòng và hệ thống điện lưới redundant, các home lab thường không có những điều kiện tương tự. Do đó, một hệ thống UPS chạy bằng pin là yếu tố cần thiết để tránh mất dữ liệu khi ngôi nhà của 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 duy nhất, cổng USB đơn lẻ mà hầu hết các mẫu UPS sử dụng để gửi tín hiệu tắt máy vẫn hoạt động tốt. Tuy nhiên, nếu bạn sở hữu nhiều máy chủ ảo hóa, hoặc các thiết bị khác, 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ủ liên quan.

Đó 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 đó máy chủ NUT chạy trên thiết bị được kết nối trực tiếp qua USB với UPS. Các client của NUT sẽ được cài đặt trên tất cả các thiết bị khác (bao gồm cả thiết bị đang chạy máy chủ NUT) được cấp nguồn bởi UPS. Điều này có nghĩa là khi điện lưới bị ngắt và UPS bắt đầu hoạt động, khi mức pin của UPS xuống thấp đến ngưỡng an toàn, nó sẽ gửi lệnh tắt máy qua USB. Máy chủ NUT sẽ nhận lệnh này và phát tán tín hiệu đến tất cả các client, những thiết bị này sẽ tự động tắt an toàn trước khi UPS hết pin hoàn toàn, ngăn chặn nguy cơ mất dữ liệu.

Mặc dù việc thiết lập NUT có thể không phải là điều dễ dàng nhất và đòi hỏi bạn phải làm quen với việc chỉnh sửa các tệp cấu hình, kết quả cuối cùng chắc chắn sẽ rất xứng đáng. Hơn nữa, 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 mà chúng tôi luôn mong muốn có từ bất kỳ công cụ nào.

Cài Đặt NUT Trên Máy Chủ Proxmox Của Bạn

Trong phần này, chúng ta sẽ đi sâu vào các bước cụ thể để cài đặt và cấu hình NUT trên máy chủ Proxmox của bạn. Việc này sẽ đảm bảo hệ thống của bạn có thể tự động tắt an toàn khi có sự cố về nguồn điện.

Chuẩn bị – Xác định cổng USB của UPS

Vì chúng ta sẽ cài đặt máy chủ NUT trên Proxmox host, trước tiên chúng ta cần xác định cổng USB mà UPS của bạn đang kết nối. Để làm điều này, hãy truy cập vào node PVE (Proxmox Virtual Environment) của bạn và chọn tab Shell. Từ giao diện dòng lệnh (CLI), chúng ta sẽ chạy lệnh lsusb. Lệnh này sẽ liệt kê tất cả các thiết bị USB đang kết nối.

Khi bạn đã xác định được chi tiết [bus] : [device] của UPS (ví dụ: 3:2), hãy chạy lệnh lsusb -v -s 3:2 (thay 3:2 bằng thông tin của bạn) để tìm các chi tiết cụ thể hơn về UPS của bạn. Thông tin này sẽ hữu ích cho việc cấu hình sau này.

Ảnh chụp màn hình lệnh lsusb trên Proxmox hiển thị chi tiết cổng USB của UPSẢnh chụp màn hình lệnh lsusb trên Proxmox hiển thị chi tiết cổng USB của UPS

Tiến hành cài đặt NUT

Sau khi đã xác định được thông tin UPS, giờ là lúc cài đặt NUT. Mở lại Shell trên Proxmox và thực hiện lệnh sau:

apt install nut -y

Khi quá trình cài đặt hoàn tất, chúng ta cần chạy trình quét NUT để thu thập thông tin chi tiết cần thiết cho các tệp cấu hình sắp tới:

nut-scanner -U

Lệnh này sẽ quét và hiển thị thông tin về UPS của bạn mà NUT có thể nhận diện. Hãy ghi lại các thông tin này, đặc biệt là tên driver và cổng kết nối.

Cấu hình các tập tin cần thiết cho NUT

Đây là phần phức tạp nhất, chúng ta cần chỉnh sửa bảy tệp cấu hình khác nhau để NUT hoạt động đúng cách, cùng với một vài lệnh cuối để thay đổi ngưỡng phần trăm pin kích hoạt tắt máy.

  1. /etc/nut/nut.conf

    • Đầu tiên, hãy tạo một bản sao lưu tệp gốc phòng khi có lỗi:
      cp /etc/nut/nut.conf /etc/nut/nut.example.conf
    • Sau đó, mở tệp 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 dòng MODE=none. Thay đổi nó thành MODE=netserver, sau đó lưu và thoát.
  2. /etc/nut/ups.conf

    • Tương tự, tạo một bản sao lưu:

      cp /etc/nut/ups.conf /etc/nut/ups.example.conf
    • Mở tệp để 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 phần sau. Hãy chắc chắn thay thế [apc], driver, port, vendorid, productid, serial bằng kết quả bạn có được từ nut-scanner và thông tin UPS của bạn.

      pollinterval = 15
      maxretry = 3
      offdelay = 120
      ondelay = 240
      
      [apc]
      # APC Back-UPS BGM1500
      driver = usbhid-ups
      port = auto
      desc = "APC Back-UPS BGM1500"
      vendorid = 051D
      productid = 0002
      serial = xxxxxxxxxxxx
    • Lưu tệp, sau đó kiểm tra xem có lỗi nào không và đảm bảo nó hiển thị một subdriver:

      upsdrvctl start
  3. /etc/nut/upsd.conf

    • Sao lưu tệp cấu hình:
      cp /etc/nut/upsd.conf /etc/nut/upsd.example.conf
    • Chỉnh sửa tệp:
      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 cho phép máy chủ NUT lắng nghe trên tất cả các giao diện mạng.
  4. /etc/nut/upsd.users

    • Sao lưu tệp cấu hình người dùng:

      cp /etc/nut/upsd.users /etc/nut/upsd.example.users
    • Mở tệp bằng trình chỉnh sửa yêu thích của bạn:

      nano /etc/nut/upsd.users
    • Chỉnh sửa và điền mật khẩu của riêng bạn (thay ******** bằng mật khẩu mạnh):

      [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 tệp:

      cp /etc/nut/upsmon.conf /etc/nut/upsmon.example.conf
    • Mở và thay thế nội dung (bao gồm mật khẩu quản trị 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 battary 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

    • Tạo bản sao lưu:

      cp /etc/nut/upssched.conf /etc/nut/upssched.example.conf
    • Mở tệp 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

    • Tệp này thường không tồn tại, vì vậy bạn có thể tạo mới trực tiếp:
      nano /etc/nut/upssched-cmd
    • Viết nội dung sau vào tệp:
      #!/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 tệp, sau đó cấp quyền thực thi cho nó:
      chmod +x /etc/nut/upssched-cmd

Khởi động lại dịch vụ và kiểm tra

Sau khi hoàn tất cấu hình các tệp, chúng ta có thể khởi động lại máy chủ Proxmox hoặc sử dụng CLI để khởi động lại các dịch vụ NUT.

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ứ đã được thiết lập chính xác hay chưa bằng lệnh sau. Nếu mọi thứ hoạt động đúng, nó sẽ hiển thị danh sách các thông số đang được giám sát:

upsc apc@localhost

Điều chỉnh ngưỡng pin thấp cho UPS

Các cài đặt mặc định cho một số mẫu UPS (ví dụ: APC) có thể quá thấp, khiến lệnh tắt máy diễn ra muộn. Chúng ta sẽ điều chỉnh để lệnh tắt máy diễn ra sớm hơn. Sử dụng hai lệnh sau trong Proxmox VE Shell, với upsadmin và mật khẩu bạn đã chỉ định 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 hoạt động còn lại của pin (runtime) là 600 giây (10 phút) trước khi kích hoạt shutdown, trong khi lệnh thứ hai đặt ngưỡng phần trăm pin còn lại là 50% trước khi thực hiện hành động tương tự. Tùy chỉnh các giá trị này để phù hợp với nhu cầu và thời gian tắt máy của hệ thống bạn.

Giám Sát Tình Trạng UPS Với Home Assistant

Sau khi đã cài đặt và cấu hình NUT thành công, việc giám sát tình trạng UPS trở nên dễ dàng hơn bao giờ hết, đặc biệt khi tích hợp với Home Assistant. Home Assistant có một tích hợp sẵn dành cho NUT, cho phép bạn theo dõi mọi thông số quan trọng của UPS ngay trên bảng điều khiển trung tâm của mình.

Để kết nối và giám sát, bạn chỉ cần thêm tích hợp này từ Settings > Devices & Services > Add Integration trong Home Assistant. Bạn sẽ cần nhập địa chỉ IP của máy chủ NUT (Proxmox host), cùng với userpassword của người dùng thông thường (upsuser) mà bạn đã thiết lập trước đó. Sau khi kết nối thành công, Home Assistant sẽ tự động lấy dữ liệu từ máy chủ NUT và hiển thị trực quan trên dashboard chính của bạn, cho phép bạn biết chính xác UPS của mình đang hoạt động như thế nào.

Giao diện Home Assistant hiển thị thông tin UPS APC được tích hợp qua máy chủ NUTGiao diện Home Assistant hiển thị thông tin UPS APC được tích hợp qua máy chủ NUT

Kết Luận

Việc triển khai Network UPS Tools (NUT) trên hệ thống Proxmox của bạn là một bước đầu tư quan trọng và hiệu quả để bảo vệ dữ liệu quý giá trong home lab. Giờ đây, với NUT giám sát các máy chủ Proxmox, bạn có thể giảm bớt lo lắng về việc mất dữ liệu do sự cố mất điện. Khả năng tự động tắt máy an toàn không chỉ giữ cho dữ liệu của bạn nguyên vẹn mà còn bảo vệ phần cứng khỏi những hư hại tiềm ẩn.

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

Bạn đã từng cài đặt NUT hay có mẹo cấu hình nào thú vị không? Hãy chia sẻ kinh nghiệm của bạn trong phần bình luận bên dưới nhé!

Related posts

5 Lý Do Bạn Nên Cân Nhắc Xây Dựng Cấu Hình PC Hai CPU Trong Thế Giới Công Nghệ Hiện Đại

Administrator

Trực Quan Hóa Dữ Liệu Sức Khỏe Từ Fitbit và Garmin Với Grafana: Nâng Tầm Theo Dõi Fitness

Administrator

OpenAI Muốn Mua Google Chrome: Liệu Có Thay Đổi Cục Diện Trình Duyệt Web?

Administrator