Cái giá đắt của một lần chớp tắt điện
Đó là lúc 2 giờ sáng thứ Ba, một đợt sụt áp kéo dài ba giây đã khiến toàn bộ HomeLab của tôi bị ngoại tuyến. Phần cứng vẫn ổn, nhưng hậu quả để lại thật tàn khốc. ZFS pool trên TrueNAS của tôi cần tới sáu giờ để scrub, và hai MariaDB container bị lỗi bảng không thể phục hồi. Đêm đó đã dạy cho tôi một bài học nhớ đời: một bộ lưu điện (UPS) sẽ trở nên vô dụng nếu máy chủ của bạn không biết rằng chúng đang chạy bằng pin.
Cấu hình Network UPS Tools (NUT) sẽ thay đổi hoàn toàn cục diện. Nó biến Lab của bạn từ một tập hợp các máy móc sở thích mong manh thành một hệ thống có khả năng phục hồi cấp độ chuyên nghiệp. Nếu UPS của bạn chỉ là một “viên pin ngu ngốc” cắm vào tường, bạn mới chỉ được bảo vệ một nửa. NUT cho phép các máy chủ theo dõi sức khỏe của pin, theo dõi mức tiêu thụ điện và quan trọng nhất là kích hoạt quá trình tắt máy an toàn (graceful shutdown) trước khi điện áp xuống quá thấp.
NUT sử dụng kiến trúc server-client. Một máy, gọi là Primary (Master), kết nối trực tiếp với UPS qua cổng USB. Các máy khác, gọi là Secondaries (Slaves), sẽ lắng nghe qua mạng. Khi pin chạm ngưỡng tới hạn—chẳng hạn còn 15%—máy Primary sẽ phát tín hiệu cho mọi máy Secondary tắt nguồn ngay lập tức. Sau khi các máy khách đã an toàn, máy Primary mới tự tắt chính nó.
Cài đặt NUT trên Linux
Hầu hết người dùng Lab đều sử dụng Ubuntu, Debian hoặc Proxmox. NUT có sẵn trong các kho lưu trữ chuẩn của họ, giúp việc cài đặt trở nên đơn giản. Tôi khuyên bạn nên sử dụng máy chủ ổn định nhất, hoạt động 24/7 làm máy Primary. Một chiếc Raspberry Pi 4 tiết kiệm điện hoặc node Proxmox chính là ứng cử viên lý tưởng.
Đầu tiên, hãy cập nhật danh sách gói và cài đặt các thành phần cần thiết:
sudo apt update
sudo apt install nut nut-client nut-server
Tiếp theo, xác định driver mà phần cứng của bạn cần. Kết nối UPS với máy chủ qua USB và chạy công cụ quét:
nut-scanner -U
Công cụ này sẽ xác định driver chính xác. Đối với hầu hết các thiết bị CyberPower, APC hoặc Eaton hiện đại, bạn sẽ thấy usbhid-ups. Hãy ghi lại vendor ID và product ID được cung cấp trong kết quả; bạn sẽ cần chúng ở bước tiếp theo.
Cấu hình NUT Primary Server
Bạn sẽ làm việc chủ yếu với bốn tệp trong thư mục /etc/nut/. Các tệp này quản lý driver, máy chủ dữ liệu và tiến trình giám sát.
1. Định nghĩa UPS Driver
Mở tệp /etc/nut/ups.conf. Tệp này cho NUT biết cách giao tiếp với phần cứng vật lý. Sử dụng các giá trị bạn đã thu thập được từ trình quét:
[myups]
driver = usbhid-ups
port = auto
desc = "CyberPower CP1500PFCLCD"
vendorid = 0764
productid = 0501
2. Cấu hình Data Server
Chỉnh sửa tệp /etc/nut/upsd.conf. Theo mặc định, NUT chỉ lắng nghe máy cục bộ. Để cho phép các máy chủ khác trong tủ rack của bạn theo dõi pin, hãy thêm địa chỉ IP tĩnh của máy chủ:
LISTEN 127.0.0.1 3493
LISTEN 192.168.1.50 3493 # Sử dụng IP thực tế của máy chủ của bạn
3. Tạo người dùng bảo mật
NUT yêu cầu xác thực cho các máy khách trong mạng. Chỉnh sửa /etc/nut/upsd.users. Tôi tạo một tài khoản quản trị cho máy cục bộ và một tài khoản hạn chế cho các máy khách từ xa:
[upsmon_primary]
password = mat_khau_manh_cua_ban
upsmon master
[upsmon_secondary]
password = mat_khau_phu
upsmon slave
4. Thiết lập chế độ vận hành và giám sát
Đặt chế độ hệ thống trong /etc/nut/nut.conf thành netserver. Cuối cùng, yêu cầu máy chủ tự giám sát chính nó bằng cách thêm dòng này vào /etc/nut/upsmon.conf:
MONITOR myups@localhost 1 upsmon_primary mat_khau_manh_cua_ban master
Khởi động lại các dịch vụ để áp dụng cấu hình mới:
sudo systemctl restart nut-server nut-client
sudo upsdrvctl stop
sudo upsdrvctl start
Xác minh và Kiểm tra
Truy vấn trạng thái UPS của bạn bằng lệnh upsc. Nó sẽ trả về danh sách chi tiết các thông số, bao gồm mức sạc pin, điện áp đầu vào và tải hiện tại tính bằng Watts.
upsc myups@localhost
Kiểm tra dòng ups.status. OL nghĩa là bạn đang sử dụng điện lưới (Online). Nếu bạn rút phích cắm khỏi tường, nó sẽ chuyển sang OB (On Battery – Đang dùng pin) trong vòng hai giây. Nếu Lab của bạn tiêu thụ 150W trên một bộ UPS 1500VA, bạn có thể thấy thời gian chạy còn lại khoảng 25 đến 30 phút.
Thời khắc quyết định: Kiểm tra việc tắt máy
Đừng bao giờ mặc định rằng cấu hình của bạn hoạt động tốt cho đến khi bạn tận mắt chứng kiến. Bạn chắc chắn không muốn phải đi sửa lỗi cấu hình khi pin chỉ còn 2% trong một đợt mất điện thực sự. Hãy kích hoạt một lệnh “tắt máy cưỡng bức” (forced shutdown – FSD) mô phỏng để xác minh trình tự:
sudo upsmon -c fsd
Cảnh báo: Lệnh này sẽ bắt đầu quá trình tắt toàn bộ các hệ thống đang kết nối ngay lập tức. Hãy lưu lại công việc của bạn trước khi nhấn Enter.
Thêm các máy khách Secondary
Đối với mọi máy khác trong Lab của bạn, chẳng hạn như máy chủ Plex chuyên dụng hoặc node sao lưu, chỉ cần cài đặt nut-client. Thiết lập MODE=netclient trong /etc/nut/nut.conf và thêm nội dung sau vào /etc/nut/upsmon.conf:
MONITOR [email protected] 1 upsmon_secondary mat_khau_phu slave
Các máy khách này giờ đây sẽ chờ máy Primary phát tín hiệu về sự cố điện tới hạn. Khi tín hiệu đó đến, chúng sẽ tự động kích hoạt lệnh shutdown -h now của chính mình.
Trực quan hóa nguồn điện của bạn
Nếu bạn sử dụng một hệ thống giám sát như Grafana, plugin Telegraf NUT có thể thu thập các số liệu này cho bạn. Việc theo dõi mức tiêu thụ điện năng thực tế và sức khỏe của pin trên một dashboard mang lại cảm giác cực kỳ an tâm. Nó giúp lập kế hoạch công suất và đảm bảo bạn không làm quá tải UPS khi thêm nhiều thiết bị hơn vào tủ rack.
Việc triển khai NUT giúp bạn tiến xa hơn việc bảo vệ phần cứng đơn thuần. Bạn đã xây dựng được một hệ thống điều phối tự động giúp tiết kiệm hàng giờ phục hồi dữ liệu. Lần tới khi lưới điện gặp sự cố, HomeLab của bạn sẽ xử lý nó với một phong thái chuyên nghiệp.

