Pematian VMware ESXi dipicu oleh UPS APC yang terhubung melalui USB

18

Saya mengirim banyak server ESXi 5.1 ke kantor jauh di mana mereka akan diberdayakan melalui APC UPS.

Saya ingin UPS memicu shutdown dari server yang terhubung - Saya kemudian akan bergantung pada konfigurasi ESXi untuk menangani shutdown / suspensi dari VM yang di-host di dalamnya.

Saya dapat melihat bahwa APC memiliki solusi yang didokumentasikan menggunakan PowerChute Network Shutdown mereka , tetapi ini melibatkan pengaturan server tambahan per kantor, dan memerlukan kartu jaringan pada setiap UPS. Kami umumnya menggunakan UPS tanpa kartu jaringan (mis. Back-UPS Pro) - mereka datang dengan konektor USB, dan mereka sudah tersedia di lokasi di mana kantor kami berada.

Bagaimana saya dapat menghubungkan UPS ke host ESXi melalui USB, kemudian ESXi mendeteksi pemadaman listrik dan kemudian bertindak sesuai? Adakah yang berhasil melakukan ini.

dunxd
sumber
1
Sudahkah Anda menghitung waktu proses shutdown VM melalui host shutdown? Bisakah baterai bertahan cukup lama untuk periode itu?
ewwhite
Terima kasih telah menunjukkan ini. Belum - pada tahap ini saya hanya mengirim server ESXi untuk menjalankan Kontroler Domain, tapi saya yakin bahwa begitu kita memiliki sumber daya di tempat kita akan menambahkan beberapa server lagi, pada saat itu waktunya mungkin berubah.
dunxd
Kebijakan mematikan cukup lama secara default. Tapi jujur ​​saja, saya tidak menjalankan shutdown UPS pada host atau cluster ESXi saya. Tampaknya kontra-intuitif, tetapi tidak pernah menjadi masalah.
ewwhite
Mengapa repot-repot memasang UPS pada host ESXi Anda? Jika daya padam karena listrik padam atau karena baterai habis Anda mendapatkan hasil yang sama.
dunxd
Untuk mengatasi pemadaman singkat. Tetapi di situs saya yang lebih besar, saya memiliki 2-4 jam daya UPS yang tersedia untuk cluster VMWare, penyimpanan, dan jaringan.
ewwhite

Jawaban:

5

Menurut APC, ini tidak mungkin dan Anda memerlukan pematian Powerchute Network. Kami mencoba ini beberapa kali dengan USB dan tidak menemukan solusi.

VMWare memiliki info tentang cara menggunakan solusi yang disetujui APC.

Juga akan berpikir SmartUPS akan menjadi pilihan yang lebih baik dan Anda dapat cocok dengan kartu jaringan. Secara alami lebih banyak uang tetapi jika server Anda sama sekali penting, biaya itu sepadan. Juga memberi Anda lebih banyak pemantauan dan peringatan yang mungkin berguna di situs jarak jauh. Anda juga perlu memastikan runtime yang cukup untuk semua VM untuk mematikan dan kemudian mematikan host

Dave M
sumber
1
Ini sepertinya jawaban paling masuk akal yang didukung oleh kedua vendor. Sayangnya VMware belum berpikir untuk membangun apa pun ke ESX / ESXi yang melakukan ini secara asli. Solusi Jaringan mensyaratkan bahwa setidaknya satu sakelar jaringan juga diaktifkan melalui UPS.
dunxd
2
Tidak masuk akal untuk tidak menghidupkan saklar jaringan melalui UPS ... mereka mengkonsumsi sangat sedikit koreksi dan sangat penting untuk operasi jaringan apa pun.
Massimo
21

Iya itu mungkin. Berikut ini detail pengaturan serupa saya.

Konfigurasi perangkat keras: APC Smart-UPS 1500 terhubung ke ESXi 5.1 Host via USB. Mesin virtual Linux yang berjalan pada host ESXi ini. UPS terhubung ke VM ini menggunakan opsi USB pass ESXi.

Konfigurasi perangkat lunak: master NUT (Network UPS Tools) berjalan di VM, dan slave NUT ESXi asli berjalan pada host ESXi.

Shutdown logic: VM menjalankan usbhid-up driver UPS yang bertanggung jawab untuk komunikasi dengan UPS melalui USB. Proses upsd terhubung ke UPS melalui driver usbhid-up dan memonitor keadaan UPS. Proses master upsmon yang berjalan pada mesin yang sama terhubung ke upsd dan memulai shutdown. Host ESXi menjalankan instance upsmon ke-2 yang juga menghubungkan ke VM upsd yang sama melalui jaringan internal.

Pada kegagalan daya, urutan berikut terjadi:

  1. UPS melalui laporan usbhid-up untuk UPS tentang kegagalan daya.
  2. (opsional, berguna jika Anda ingin mematikan dalam beberapa menit, bukan Baterai Rendah) peringatan pada VM memulai waktu 5 menit. Timer dibatalkan jika daya dipulihkan.
  3. Ketika timer menyala atau ketika UPS melaporkan Baterai Rendah, upsmon menaikkan bendera FSD (shutdown paksa) menjadi upd.
  4. Dalam konfigurasi NUT yang berdiri sendiri flag FSD akan mematikan mesin. Tapi di sini perintah shutdown digantikan oleh logging sederhana seperti "Saya harus mematikan sekarang tetapi saya sedang menunggu tuan rumah sebagai gantinya". Dan tidak melakukan apa pun.
  5. Bendera FSD juga dibaca oleh ESXi upsmon, yang memulai shutdown host ESXi.
  6. Host ESXi mematikan semua mesin virtual satu per satu. Yang penting adalah bahwa VM yang menjalankan upsd harus shutdown terakhir (menggunakan ESXi startup / konfigurasi urutan shutdown).
  7. Penting: VM ini harus menginstal alat vmware. Ketika menerima perintah shutdown tamu dari tuan rumah, skrip shutdown vmware-tools sedang dimulai. Skrip ini memeriksa tanda / etc / killpower . Jika tidak ada flag, ia tidak melakukan apa-apa (ini berarti pengguna mengaktifkan linux shutdown, bukan acara UPS). Tetapi jika flag itu ada (FSD aktif), maka skrip ini mengirim ke UPS perintah powerdown tertunda (katakanlah, dalam 3 menit).
  8. Setelah menjalankan skrip vmware-tools guest VM dimatikan.
  9. ESXi melihat status poweroff VM terakhir dan turun sendiri (dibutuhkan sekitar 1 menit karena tidak ada mesin lain yang berjalan sekarang).
  10. Dalam 2 menit tersisa UPS memutus aliran listrik.
  11. Ketika daya dipulihkan, ESXi memulai dan menghidupkan semua VM. Mesin pemantau UPS harus dimulai lebih dulu (konfigurasi yang sama seperti untuk urutan pematian).

Unduhan:

NUT untuk Linux dapat diinstal dari paket.

Klien NUT asli untuk server ESXi dapat diunduh menggunakan tautan terakhir di halaman ini: http://www.networkupstools.org/download.html

Beberapa skrip dan file conf saya ada di sini (hanya baris yang diubah yang ditampilkan): http://pastebin.com/KkEeanK1

Catatan:

Tentu saja ada lebih banyak detail, dan butuh beberapa waktu bagi saya untuk membuat ini berfungsi sebagaimana mestinya. Tapi sekarang kinerjanya sangat baik. Sistem ini bertanggung jawab atas kasus-kasus ketika Anda baru saja mematikan VM pemantauan dari dalam (skrip vmware-tools tidak dijalankan), atau jika host ESXi yang memulai VM shutdown (tidak ada bendera etc / killpower, jadi tidak ada muatan UPS), atau jika itu ESXi shutdown (sama). Satu-satunya yang penting adalah membuat VM ini menjalankan ASAP setelah boot host, dan mematikannya terakhir (sehingga waktu host down dapat diprediksi - seperti yang dikatakan di atas, sekitar 1 menit untuk saya dan 2 menit lagi saya cadangan untuk berjaga-jaga).

UPS saya yang memantau Linux VM juga merupakan server berbagi Samba / NFS untuk penyimpanan cadangan, server NAT / DHCP untuk VM, dan beberapa layanan ringan lainnya. Dibutuhkan sekitar 22MHz bagian ESXi CPU dan sekitar 10MB RAM aktif saat idle. Karena menggunakan NUT, Anda dapat memberi daya lebih banyak perangkat dari UPS yang sama jika diperlukan, dan semua itu dapat dimatikan dengan anggun. Tidak diperlukan PowerChute dan / atau Kartu Monitor Jaringan yang mahal.

Oleg Semyonov
sumber
14

Pertanyaan super. Sebenarnya dimungkinkan untuk melakukan ini dengan cukup baik - setidaknya pada beberapa pengaturan. Saya telah mencoba resep berikut pada sejumlah host ESXi 5.5. Pada dasarnya, solusinya seperti ini:

  1. Aktifkan akses SSH pada host ESXi Anda
  2. Buat VM Linux - Saya menggunakan Ubuntu. Anda hanya membutuhkan pengaturan yang sangat minim - tanpa GUI atau apa pun.
  3. Hubungkan perangkat APC Anda melalui USB ke host ESXi dan meneruskannya ke Linux VM.
    • Pastikan bahwa pengontrol USB yang Anda tambahkan ke VM cocok dengan pengontrol USB fisik yang sebenarnya yang dihubungkan dengan perangkat APC, yaitu hanya menambahkan pengontrol XHCI jika perangkat fisiknya adalah perangkat USB3. Ketidakcocokan tampaknya menyebabkan masalah aneh pada driver perangkat USB Linux.
    • Jika semuanya tidak berhasil dan Anda melihat kesalahan seperti ctrl urb status -62di dmesg, kemungkinan kontroler fisik tidak cocok dengan yang ada di VM Anda. Jika mereka cocok - baik maka itu masalah. Saya punya satu pengaturan dengan masalah semacam ini dan tidak ada solusi nyata untuk itu.
  4. Instal apcupsddi Linux VM - di Ubuntu, Anda dapat melakukannya sudo apt-get install apcupsduntuk menginstal versi terbaru. Proyek NUT juga bagus tapi saya tradisional.
  5. Instal utilitas plink dengan melakukan sudo apt-get install putty-tools
  6. Terhubung ke host ESXI Anda dengan melakukan plink root@<your ESXi host IP>. Anda dapat segera menutup koneksi. Tujuannya adalah untuk menyimpan kunci host sehingga plink tidak akan meminta lagi ketika kita menjalankannya melalui skrip
  7. Edit /etc/apcupsd/apcupsd.confdan ubah item di bawah ini agar cocok: UPSNAME < the name you'd like your UPS to have > UPSCABLE usb UPSTYPE usb # DEVICE DIRECTIVE should be blank for USB DEVICE Pastikan juga /etc/default/apcupsdsudahISCONFIGURED=yes
  8. Edit /etc/apcupsd/apccontroldan gulir ke doshutdownkasing. Jadikan seperti ini: doshutdown) echo "UPS ${2} initiated Shutdown Sequence" | ${WALL} # Shut down indirectly by triggering the ESXi host to do the # shutdown via VMWare tools /usr/bin/plink root@< your ESXi host IP > -pw < your root pw > "/sbin/shutdown.sh && /sbin/poweroff" ;;
  9. Mulai ulang apcupsd menggunakan sudo service apcupsd restartdan lihat apakah semuanya berfungsi dengan memohon apcaccess. Jika tidak, periksa log dan dmesg
  10. Pastikan semua VM yang perlu dimatikan dengan baik jika terjadi kegagalan daya menginstal VMWare Tools. Juga pastikan bahwa mereka adalah bagian dari daftar startup / shutdown VM (di vSphere Web Client, buka:) vCenter -> <your host> -> Manage -> Settings -> VM Startup/Shutdown. Pastikan bahwa tindakan mematikan adalah untuk mematikan OS tamu.

Setelah Anda menjalankan semua hal ini, doshutdownskrip dari langkah 8 akan dipanggil karena listrik mati. Giliran ini mengaktifkan skrip shutdown.sh pada host ESXi, yang memberi sinyal paket VMWare Tools di setiap VM di host Anda untuk melakukan shutdown bersih melalui OS tamu. Dalam pengalaman saya, ini bekerja lebih baik daripada perangkat lunak PowerChute dari APC.

Jika Anda suka memantau hal-hal dari VM Anda, Anda dapat mengatur contoh apcupsd budak pada mereka yang terhubung ke master UPS mengontrol Linux VM. File apcupsd.conf budak Anda harus memiliki entri seperti ini:
UPSTYPE net < your UPS control VM IP >:3551
Entri suka UPSCABLEdan sejenisnya tidak masalah dalam kasus ini. Ini berfungsi dengan versi Windows apcupsd(tersedia di sini ) juga. Anda dapat menggunakan yang disertakan apctray.exeuntuk memeriksa status saat ini.

Cukup banyak untuk menutupinya, saya pikir.

MrMajestyk
sumber
+1 berfungsi seperti pesona. Pertama kali!
Morten Kristensen
Jawaban ini bekerja dengan sempurna, meskipun di kantor klien kami kami harus sedikit mengubah doshutdownurutan. Kami menambahkan ${APCUPSD} --killpowertepat sebelum /usr/bin/plinkbagian sehingga UPS mati setelah beberapa saat dan restart secara otomatis ketika daya kembali. Juga, perlu dicatat bahwa langkah 6 harus dilakukan seperti yang rootdiperoleh melalui suatau sudo su, tetapi tidak sudo -s .
Andrea Lazzarotto
4

Anda dapat mempertimbangkan untuk menggunakan fungsionalitas perangkat USB untuk tamu yang menjalankan PowerChute atau perangkat lunak lain yang dapat memantau kesehatan UPS dan mampu memicu shutdown pada host ESXi (mis. Apcupsd ). ESXi secara resmi hanya mendukung jumlah perangkat USB yang sangat terbatas untuk passthrough , tetapi orang-orang telah melampirkan dan melewati berbagai kelas perangkat untuk sementara waktu dengan keberhasilan yang berbeda-beda, tetapi USB APC UPS tampaknya bekerja sesuai dengan panduan untuk VM Windows atau yang ini untuk CentOS Linux VM .

the-wabbit
sumber
2

Lihatlah vSphere Management Assistant (vMA) dari sini. Kami menggunakannya di kantor saya untuk melakukan apa yang Anda coba, namun dengan Smart-UPS terhubung melalui USB daripada Back-UPS.

deveneyi
sumber
Silakan tambahkan lebih detail karena ini adalah pengaturan tidak berdokumen sejauh menyangkut APC atau vmware.
dunxd
1

Meskipun mungkin (mungkin / umumnya), saya tidak berpikir shutdown otomatis pada daya baterai adalah ide yang bagus. Jika Anda akan melakukan itu, maka untuk maksud dan tujuan yang paling praktis, Anda mungkin harus menghemat uang dari UPS yang didukung oleh baterai, dan membiarkan hilangnya daya untuk mematikan mesin Anda. (Memang, shut down yang bersih selalu lebih baik daripada kehilangan daya, tetapi Anda tampaknya kehilangan waktu baterai lebih dari beberapa menit jika Anda secara otomatis mematikan semua hal ketika Anda kehilangan pasokan daya. )

Cara saya selalu menanganinya adalah memiliki pemantauan mengingatkan SA ketika daya turun, sehingga SA dapat menggunakan materi abu-abu mereka untuk memutuskan kapan (atau bahkan jika) untuk mematikan server. Jika pemadaman singkat, mungkin sama sekali tidak mematikan server, atau Anda mungkin ingin membiarkan beberapa server tetap beroperasi selama mungkin, dan hanya mematikannya sebelum baterai hampir mati. Bagiku itu benar-benar seperti tugas pengambilan keputusan yang lebih cocok untuk manusia daripada aturan sederhana.

HopelessN00b
sumber
Anda tidak perlu mengkonfigurasi UPS untuk memicu shutdown segera, tetapi Anda ingin mematikannya sebelum baterai benar-benar habis, Anda harus membeli lebih banyak baterai, terutama di beberapa lokasi di mana saya bekerja dan listrik mati. harian. Sangat bagus untuk melibatkan manusia tentu saja, tetapi Anda tidak selalu memiliki Administrator Sistem di kantor jarak jauh.
dunxd
@dunxd Poin bagus - Saya lebih terbiasa dengan lingkungan HA di mana setidaknya beberapa server harus begadang, datanglah atau kehabisan air, jadi nama permainan ini mencari tahu cara terbaik untuk jatah ke daya (selektif menutup turun perangkat) untuk membuat dampak layanan sekecil mungkin, yang tidak akan menjadi fokus semua orang atau kasus penggunaan.
HopelessN00b
1

Di masa lalu instalasi baremetal , APC PowerChute Plus adalah bagian penting dari proses instalasi saya. Menggunakan kabel pensinyalan serial sederhana dan biner khusus Red Hat mereka , mudah untuk mengatur aturan untuk mengatur server yang terpasang secara lokal. Pemberitahuan email dasar untuk acara baterai UPC, acara saluran listrik, dan tindakan mematikan tersedia:

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

UPS on battery: Blackout 000.0 V. 

dan

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

Normal power restored: UPS on line.  

atau

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

Shutdown started.  

Ditambah antarmuka yang masuk akal untuk melihat apa yang terjadi ...

masukkan deskripsi gambar di sini

Perangkat lunak itu akhirnya menjadi komersial (atau dimakamkan di situs web APC). Ada beberapa pendekatan open source untuk menyediakan sesuatu yang serupa. Tapi ini semua menjadi rumit dengan host VMWare ESXi tunggal.

Sepertinya ini adalah sesuatu yang VMWare seharusnya dimasukkan ke dalam hypervisor dasar. Ini dasar dan dapat menawarkan tingkat perlindungan yang layak bagi pengguna. Solusi paling umum yang saya lihat sekarang adalah USB passthrough ke VM khusus, pendekatan daemon jaringan atau melakukan apa yang saya lakukan; tidak mengonfigurasi pematian otomatis atau baterai ...

Memang, saya biasanya menggunakan UPS yang dapat mendukung beban sistem selama satu jam atau lebih, tetapi pemadaman yang lama terjadi. Mungkin alternatifnya adalah dengan mengumpulkan beberapa kartu antarmuka jaringan berbiaya rendah atau diperbaharui dan berencana untuk membeli perangkat SmartUPS sebagai minimum ...

putih
sumber
0

Lihat tautan berikut . Bukan solusi yang paling elegan, tetapi solusi yang sangat praktis, sangat mudah. Ada beberapa kemungkinan kelemahan dalam hal keamanan (tergantung pada desain jaringan khusus Anda, para tamu yang dimuat pada Host, dan akses yang dimiliki pengguna ke para tamu tersebut tetapi Anda dapat melakukan panggilan itu.

pengguna207685
sumber
0

Saya menggunakan solusi MrMajestyk dan hanya mengubah akses ssh melalui plink dengan akses ssh tanpa kata sandi menggunakan kunci publik rsa. Kunci rsa yang dihasilkan di VM apcupsd harus dimasukkan dalam / etc / ssh / keys-root / otor_key dari host vmware.

Norberto Altalef
sumber