Trong môi trường phòng thí nghiệm tại gia (home lab) ngày nay, một trong những thách thức thường trực mà nhiều người dùng gặp phải là làm thế nào để tắt các máy chủ và máy ảo một cách an toàn và tự động khi xảy ra sự cố mất điện. Mặc dù việc trang bị một bộ lưu điện (UPS – Uninterruptible Power Supply) là giải pháp hiệu quả để bảo vệ dữ liệu khỏi nguy cơ mất mát đột ngột, hầu hết các mẫu UPS thông dụng chỉ cung cấp một kết nối USB duy nhất để gửi tín hiệu tắt máy. Điều này trở thành một vấn đề lớn khi bạn có nhiều thiết bị, đặc biệt là các máy chủ ảo hóa như Proxmox VE đang chạy nhiều máy ảo (VM) cùng lúc trong hệ thống home lab của mình.
Việc phải tắt từng máy ảo và sau đó tắt máy chủ vật lý theo cách thủ công khi UPS sắp hết pin không chỉ tốn thời gian mà còn tiềm ẩn rủi ro nếu bạn không có mặt kịp thời. Để giải quyết vấn đề này, cộng đồng home lab đã phát triển một công cụ mạnh mẽ và linh hoạt mang tên Network UPS Tools (NUT). NUT hoạt động như một “người quản lý” thông minh, giám sát tín hiệu từ UPS và truyền đạt lệnh tắt máy an toàn đến tất cả các thiết bị được kết nối. Đối với một hệ thống Proxmox VE, NUT trở thành một giải pháp cứu cánh, đảm bảo rằng mọi dữ liệu và cấu hình quan trọng luôn được bảo toàn, ngay cả khi nguồn điện chính bị ngắt đột ngột. Bài viết này của congnghehot.net 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 để thiết lập hệ thống tự động tắt máy an toàn, mang lại sự yên tâm tuyệt đối cho home lab của bạn.
Network UPS Tools (NUT) là gì và tại sao bạn nên sử dụng?
Đảm bảo thiết bị của bạn tắt máy an toàn và chủ động
Các hệ thống home lab thường thiếu những nguồn điện dự phòng và các lớp bảo vệ redundant như các trung tâm dữ liệu chuyên nghiệp. Vì vậy, một bộ lưu điện (UPS) chạy bằng pin là yếu tố cực kỳ cần thiết để tránh mất dữ liệu khi nguồn điện chính của gia đình bị ngắt. Nếu bạn chỉ có một máy chủ hoặc một máy chủ ảo hóa, kết nối USB đơn lẻ của hầu hết các mẫu UPS để báo hiệu trạng thái hoạt động là đủ. 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 phương pháp để gửi tín hiệu tắt máy đến tất cả các máy chủ đó một cách đồng bộ.
Đó 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 được cài đặt trên thiết bị kết nối trực tiếp qua USB với UPS, còn các máy khách NUT được cài đặt trên tất cả các thiết bị khác trong hệ thống (bao gồm cả thiết bị đang chạy máy chủ NUT). Điều này có nghĩa là khi nguồn điện chính bị mất và UPS bắt đầu hoạt động, khi mức pin của UPS xuống thấp đến một ngưỡng nhất định, nó sẽ gửi lệnh tắt máy qua kết nối USB. Máy chủ NUT sẽ nhận lệnh này và ngay lập tức truyền tín hiệu đó đến tất cả các máy khách đã được cấu hình. Các máy khách này sau đó sẽ tiến hành tắt hệ thống của mình một cách có trật tự và an toàn, đảm bảo mọi dữ liệu được lưu trữ và ngăn ngừa hư hỏng trước khi UPS cạn kiệt pin.
Mặc dù việc thiết lập NUT có thể không phải là nhiệm vụ 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, cho phép bạn dễ dàng giám sát trạng thái của UPS và toàn bộ hệ thống nguồn, mang lại sự tiện lợi và khả năng kiểm soát toàn diện.
Thiết bị lưu điện UPS Eaton 3S 850 được cài đặt trong hệ thống máy chủ gia đình
Thiết lập NUT trên máy chủ Proxmox của bạn
Chuẩn bị cài đặt NUT
Trong bài viết này, chúng ta sẽ cài đặt máy chủ NUT trực tiếp trên máy chủ Proxmox VE. Bước đầu tiên là xác định cổng USB mà UPS của bạn đang kết nối. Để làm điều này, bạn cần truy cập vào giao diện web của Proxmox, chọn node PVE của bạn và mở tab Shell. Tại đây, chúng ta sẽ sử dụng các lệnh CLI (Command Line Interface) để thực hiện:
- Chạy lệnh
lsusbđể liệt kê tất cả các thiết bị USB đang kết nối. - Xác định thông tin [bus]:[device] của UPS (ví dụ:
3:2). - Để xem thông tin chi tiết hơn về UPS, sử dụng lệnh
lsusb -v -s [bus]:[device], ví dụ:lsusb -v -s 3:2.
Sau khi đã xác định được thông tin cần thiết về cổng USB, chúng ta tiến hành cài đặt NUT bằng 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 công cụ nut-scanner để thu thập các chi tiết cần thiết cho các tệp cấu hình sắp tới:
nut-scanner -U
Kết quả từ nut-scanner sẽ cung cấp các thông số quan trọng như driver, vendorid, productid, serial, giúp chúng ta cấu hình UPS chính xác.
Màn hình terminal Proxmox hiển thị kết quả lệnh lsusb chi tiết về cổng USB của UPS
Các bước cấu hình file NUT chi tiết
Để hệ thống NUT hoạt động chính xác, chúng ta cần chỉnh sửa tổng cộng bảy tệp cấu hình quan trọng, cộng thêm một vài lệnh cuối cùng để điều chỉnh ngưỡng phần trăm pin kích hoạt quá trình tắt máy.
-
/etc/nut/nut.conf:- Trước tiên, hãy tạo một bản sao lưu:
cp /etc/nut/nut.conf /etc/nut/nut.example.conf - Mở tệp bằng trình soạn thảo văn bản (ví dụ:
nano):nano /etc/nut/nut.conf - Bạn sẽ thấy dòng
MODE=none. Hãy thay đổi thànhMODE=netserver, sau đó lưu và thoát tệp.
- Trước tiên, hãy tạo một bản sao lưu:
-
/etc/nut/ups.conf:- Tạo 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 các dòng sau (đây là các thông số chung, bạn có thể điều chỉnh):
pollinterval = 15 maxretry = 3 offdelay = 120 ondelay = 240 - Tiếp theo, thêm thông tin về UPS của bạn, dựa trên kết quả từ
nut-scanner. Ví dụ với UPS APC Back-UPS BGM1500:[apc] driver = usbhid-ups port = auto desc = "APC Back-UPS BGM1500" vendorid = 051D productid = 0002 serial = xxxxxxxxxxxxLưu ý: Thay thế
[apc]bằng tên định danh bạn muốn cho UPS của mình (không dấu, không khoảng trắng), và cập nhậtdriver,vendorid,productid,serialtheo thông tin thực tế của UPS bạn có. - Lưu tệp, sau đó kiểm tra để đảm bảo không có lỗi và hiển thị đúng driver:
upsdrvctl start
- Tạo bản sao lưu:
-
/etc/nut/upsd.conf:- Sao lưu tệp:
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 các dòng sau để máy chủ NUT lắng nghe trên tất cả các mạng (IPv4 và IPv6):
LISTEN 0.0.0.0 3493 LISTEN :: 3493
- Sao lưu tệp:
-
/etc/nut/upsd.users:-
Sao lưu tệp cấu hình:
cp /etc/nut/upsd.users /etc/nut/upsd.example.users -
Mở bằng trình soạn thảo:
nano /etc/nut/upsd.users -
Chỉnh sửa và thêm thông tin người dùng quản trị và người dùng thông thường, nhớ thay thế
********bằng mật khẩu mạnh 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
-
-
/etc/nut/upsmon.conf:-
Sao lưu tệp:
cp /etc/nut/upsmon.conf /etc/nut/upsmon.example.conf -
Chỉnh sửa tệp 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 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 5Lưu ý: Thay
apcbằng tên định danh UPS bạn đã đặt trongups.conf. Thay********bằng mật khẩu củaupsadmin.
-
-
/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
-
-
/etc/nut/upssched-cmd:- Tệp này thường không tồn tại mặc định, 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 mớ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 tệp, sau đó cấp quyền thực thi cho nó:
chmod +x /etc/nut/upssched-cmd
- Tệp này thường không tồn tại mặc định, bạn có thể tạo mới trực tiếp:
Khởi động lại dịch vụ và kiểm tra
Sau khi hoàn tất tất cả các bước cấu hình, chúng ta cần khởi động lại các dịch vụ NUT để các thay đổi có hiệu lực. Bạn có thể khởi động lại máy chủ Proxmox hoặc sử dụng các lệnh CLI sau:
service nut-server restart
service nut-client restart
systemctl restart nut-monitor
upsdrvctl stop
upsdrvctl start
Để kiểm tra xem mọi thứ đã được thiết lập chính xác hay chưa, hãy sử dụ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 từ UPS của bạn:
upsc apc@localhost
Lưu ý: Thay apc bằng tên định danh UPS bạn đã đặt.
Tùy chỉnh ngưỡng tắt máy của UPS
Mặc định, các mẫu UPS của APC thường có ngưỡng tắt máy khi pin quá thấp (ví dụ: chỉ còn 5% hoặc dưới 5 phút thời lượng pin). Để tăng cường sự an toàn và đảm bảo máy chủ có đủ thời gian tắt máy an toàn, chúng ta sẽ điều chỉnh các ngưỡng này lên cao hơn. Sử dụng hai lệnh sau trong Proxmox VE Shell, nhớ dùng upsadmin và mật khẩu bạn đã thiết lập trong /etc/nut/upsd.users:
upsrw -s battery.runtime.low=600 apc@localhost -u upsadmin -p ********
upsrw -s battery.charge.low=50 apc@localhost -u upsadmin -p ********
Lưu ý: Thay apc bằng tên định danh UPS bạn đã đặt và ******** bằng mật khẩu của upsadmin. Lệnh đầu tiên đặt ngưỡng tắt máy khi thời lượng pin còn 600 giây (10 phút). Lệnh thứ hai đặt ngưỡng tắt máy khi pin còn 50%.
Giám sát hệ thống NUT của bạn với Home Assistant
Đối với những người dùng Home Assistant, việc tích hợp NUT vào hệ thống giám sát nhà thông minh là một lựa chọn tuyệt vời để theo dõi trạng thái UPS một cách trực quan. Home Assistant có một tích hợp NUT riêng biệt, bạn có thể thêm nó từ Settings > Devices & Services > Add Integration.
Để kết nối và giám sát, bạn sẽ cần cung cấp địa chỉ IP của máy chủ NUT (máy chủ Proxmox của bạn), cùng với user và password của tài khoản người dùng thông thường (upsuser) mà bạn đã thiết lập trong /etc/nut/upsd.users. Sau khi kết nối thành công, Home Assistant sẽ tự động lấy dữ liệu và hiển thị trực tiếp trên bảng điều khiển chính của bạn, cho phép bạn biết chính xác những gì máy chủ UPS NUT đang làm, bao gồm trạng thái pin, nguồn điện, tải trọng và nhiều thông tin hữu ích khác.
Giao diện Home Assistant hiển thị thông tin giám sát UPS APC được tích hợp qua NUT server
NUT: Giải pháp bảo vệ dữ liệu home lab hiệu quả và tiết kiệm
Với việc đã cài đặt và cấu hình NUT để giám sát các máy chủ Proxmox, bạn có thể giảm bớt đáng kể lo lắng về nguy cơ mất dữ liệu do mất điện. NUT mang đến một giải pháp mạnh mẽ và miễn phí, giúp tự động tắt các hệ thống máy chủ và máy ảo của bạn một cách an toàn và chủ động khi UPS sắp hết pin. Điều này đặc biệt quan trọng đối với những ai đầu tư nhiều vào việc xây dựng và duy trì một home lab, nơi sự ổn định và bảo toàn dữ liệu là yếu tố then chốt.
Khả năng mở rộng của NUT cũng là một ưu điểm lớn. Nếu bạn có ý định bổ sung thêm các máy chủ vật lý hoặc các thiết bị khác cần được tắt an toàn trong tương lai, bạn hoàn toàn có thể cấu hình chúng như các thiết bị client của NUT. Các client này sẽ lắng nghe tín hiệu từ máy chủ NUT và thực hiện quá trình tắt máy trước khi pin UPS cạn kiệt. Mặc dù có những mẫu UPS đắt tiền hơn có khả năng gửi tín hiệu tắt máy đến nhiều client cùng lúc, giải pháp NUT không chỉ hiệu quả mà còn hoàn toàn miễn phí, biến nó thành một lựa chọn kinh tế và thông minh cho mọi nhà làm home lab.
Kết luận
Việc trang bị Network UPS Tools (NUT) cho hệ thống Proxmox VE trong home lab của bạn là một khoản đầu tư xứng đáng về thời gian và công sức. Nó không chỉ cung cấp một phương tiện hiệu quả để bảo vệ dữ liệu quý giá khỏi những rủi ro do mất điện đột ngột, mà còn giúp bạn làm chủ hơn về cơ sở hạ tầng công nghệ của mình. Với khả năng tự động hóa việc tắt máy an toàn, NUT giúp bạn yên tâm hơn, giảm thiểu công việc quản lý thủ công và bảo vệ thiết bị của bạn khỏi những hư hại không đáng có.
Dù quá trình cấu hình có thể đòi hỏi một chút kiến thức về dòng lệnh và chỉnh sửa tệp, kết quả mà NUT mang lại là một hệ thống home lab kiên cường, đáng tin cậy và tự động hóa cao. Bằng cách làm theo hướng dẫn chi tiết trên congnghehot.net, bạn đã có thể triển khai thành công giải pháp này.
Bạn nghĩ sao về giải pháp NUT cho home lab? Bạn đã từng gặp phải sự cố mất điện và mất dữ liệu chưa? Hãy chia sẻ kinh nghiệm và suy nghĩ của bạn trong phần bình luận bên dưới!