ช่วงฝนตก ฟ้าร้อง อุปกรณ์สำคัญที่จำเป็นอย่างยิ่งสำหรับเครื่องคอมพิวเตอร์หรือเซิร์ฟเวอร์ ก็คืออุปกรณ์สำรองไฟ หรือ UPS เพื่อป้องกันเหตุการณ์ไฟตก ไฟกระชาก หรือไฟดับ
แต่ถ้าไฟดับเป็นระยะเกินกว่าแบตเตอรีของ UPS จะจ่ายไฟที่สำรองไว้ได้ ก็จะทำให้เครื่องเซิรฟ์เวอร์ดับไปอยู่ดี ซึ่งอาจส่งผลให้ข้อมูลในเครื่องเสียหายได้
เพื่อความปลอดภัยของข้อมูลในเครื่อง แนะนำให้ลงทุนซื้อ UPS ที่สามารถสั่งปิด (shutdown) เครื่อง เมื่อเกิดเหตุไฟดับได้
ถ้าแบบที่หาซื้อได้ตามร้านค้าทั่วไป ก็ให้เลือก UPS ที่มีพอร์ต USB ต่อสายเข้าเครื่องคอมพิวเตอร์ได้ และถ้าต้องการให้สั่งปิด (shutdown) ลีนุกซ์ได้ ก็ต้องเลือกรุ่นที่มีโปรแกรมหรือไดร์เวอร์รองรับบนลีนุกซ์
ในที่นี้จะใช้ APC UPS ที่มีสาย USB ต่อเข้ากับเครื่องที่รันลีนุกซ์ CentOS 6 แล้วติดตั้งโปรแกรม apcupsd เพื่อคอนฟิกสั่งปิดเครื่องเมื่อไฟดับแล้วเหลือแบตเตอรีถึงค่าที่กำหนดได้
หมายเหตุ ผู้เขียนไม่มีความเกี่ยวข้องหรือต้องการโฆษณาผลิตภัณฑ์ของบริษัท APC UPS แต่อย่างใด
เปิด UPS แล้วเสียบสาย USB จาก UPS เข้าเครื่องเซิรฟ์เวอร์ที่ติดตั้ง CentOS 6
ถ้าลีนุกซ์มองเห็นหรือมีไดร์เวอร์ของ UPS ที่ต่อผ่านสาย USB จะมีข้อความตามตัวอย่างด้านล่างในไฟล์ /var/log/messages
[root@server ~]# tail -f /var/log/messages Jun 8 11:48:18 server kernel: usb 2-3: new low speed USB device number 4 using xhci_hcd Jun 8 11:48:18 server kernel: usb 2-3: New USB device found, idVendor=0.., idProduct=0002 Jun 8 11:48:18 server kernel: usb 2-3: New USB device strings: Mfr=3, Product=1, SerialNumber=2 Jun 8 11:48:18 server kernel: usb 2-3: Product: Back-UPS XS 950U FW:... .I USB FW:T2 Jun 8 11:48:18 server kernel: usb 2-3: Manufacturer: American Power Conversion Jun 8 11:48:18 server kernel: usb 2-3: SerialNumber: ... Jun 8 11:48:18 server kernel: usb 2-3: configuration #1 chosen from 1 choice Jun 8 11:48:18 server kernel: usb 2-3: ep 0x81 - rounding interval to 64 microframes, ep desc says 80 microframes Jun 8 11:48:19 server kernel: generic-usb 0000:....: hiddev96,hidraw2: USB HID v1.10 Device [American Power Conversion Back-UPS XS 950U FW:.... .I USB FW:T2 ] on usb-0000:00:14.0-3/input0
ติดตั้งแพ็คเกจ epel-release
[root@server ~]# yum install epel-release
ติดตั้งแพ็คเกจ apcupsd
[root@server ~]# yum install apcupsd
รันเซอร์วิส apcupsd
[root@server ~]# service apcupsd start Starting UPS monitoring: [ OK ]
หลังจากรันเซอร์สิส apcupsd แล้ว จะสามารถรันคำสั่ง apcaccess เพื่อดูข้อมูลรายละเอียด สถานะของ UPS ที่เชื่อมต่อได้
[root@server ~]# apcaccess
APC : 001,036
DATE : 2016-06-08 11:54:10 +0700
HOSTNAME : server.example.com
VERSION : 3.14.12 (29 March 2014) redhat
UPSNAME : server.example.com
CABLE : USB Cable
DRIVER : USB UPS Driver
UPSMODE : Stand Alone
STARTTIME: 2016-06-08 11:54:08 +0700
MODEL : Back-UPS XS 950U
STATUS : ONLINE
LINEV : 226.0 Volts
LOADPCT : 0.0 Percent
BCHARGE : 88.0 Percent
TIMELEFT : 281.6 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME : 0 Seconds
SENSE : Medium
LOTRANS : 155.0 Volts
HITRANS : 280.0 Volts
ALARMDEL : 30 Seconds
BATTV : 13.4 Volts
LASTXFER : Unacceptable line voltage changes
NUMXFERS : 0
TONBATT : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
SELFTEST : NO
STATFLAG : 0x05000008
SERIALNO : ...
BATTDATE : 2015-12-22
NOMINV : 230 Volts
NOMBATTV : 12.0 Volts
NOMPOWER : 480 Watts
FIRMWARE : .... .I USB FW:T2
END APC : 2016-06-08 11:54:18 +0700
สถานะ (STATUS: ONLINE) คือมีไฟเข้า UPS ปกติ
จำลองสถานการณ์ไฟดับ ด้วยการดึงปลั๊กไฟ UPS ที่ต่อเข้ากับระบบไฟหลัก
เซอร์วิส apcupsd จะตรวจจับได้ว่าระบบไฟหลักมีปัญหา (Power failer) และตอนนี้ UPS ใช้แบตเตอรีเพื่อจ่ายไฟอยู่ (Running on UPS batteries)
[root@server ~]# tail -f /var/log/messages Jun 8 12:02:47 server apcupsd[1699]: Power failure. Jun 8 12:02:53 server apcupsd[1699]: Running on UPS batteries. Jun 8 12:02:53 server wall[1767]: wall: user root broadcasted 1 lines (67 chars)
โดยคอนฟิกดีฟอลต์ ถ้าเกิดไฟดับ เซอร์วิส apcupsed จะสั่ง shutdown ลีนุกซ์โดยอัตโนมัติ เมื่อเกิดเหตุการณ์ใดก่อนดังนี้
- แบตเตอรีเหลือกำลังไฟแค่ 5% (BATTERYLEVEL 5)
- แบตเตอรีสามารถจ่ายไฟได้อีก 3 นาที (MINUTES 3)
ตัวอย่างไฟล์คอนฟิกหลักของ apcupsd
[root@server ~]# vi /etc/apcupsd/apcupsd.conf ... # If during a power failure, the remaining battery percentage # (as reported by the UPS) is below or equal to BATTERYLEVEL, # apcupsd will initiate a system shutdown. BATTERYLEVEL 5 # If during a power failure, the remaining runtime in minutes # (as calculated internally by the UPS) is below or equal to MINUTES, # apcupsd, will initiate a system shutdown. MINUTES 3
สามารถตรวจสอบค่าทั้งสองได้จากคำสั่ง apcaccess
ตัวอย่างสถานะ UPS เมื่อเกิดไฟดับ
[root@server ~]# apcaccess ... STATUS : ONBATT LINEV : 0.0 Volts LOADPCT : 0.0 Percent BCHARGE : 64.0 Percent TIMELEFT : 12.6 Minutes ...
สังเกตว่าบรรทัด STATUS จะเปลี่ยนจาก ONLINE เป็น ONBATT เพื่อแสดงว่าตอนนี้ UPS ใช้แบตเตอรีจ่ายไฟให้เครื่องคอมพิวเตอร์อยู่
เมื่อแบตเตอรีเหลือกำลังไฟที่กำหนด เช่น
TIMELEFT : 3.0 Minutes
เซอร์วิส apcupsd จะสั่งปิดเครื่อง
ตัวอย่างข้อความที่แสดง เมื่อเซอร์วิส apcupsd สั่ง shutdown
Broadcast message from root@server.example.com (Wed Jun 8 12:15:07 2016): Remaining battery runtime below limit on UPS server.example.com. Doing shutdown. Broadcast message from root@server.example.com (Wed Jun 8 12:15:07 2016): UPS server.example.com initiated Shutdown Sequence Broadcast message from root@server.example.com (unknown) at 12:15 ... The system is going down for halt NOW! apcupsd UPS server.example.com initiated shutdown
ลองนำไปใช้กันดูครับ