Jeden serwer, dwa zasilacze UPS APC na redundantnych zasilaczach: jak uruchomić wyłączenie?


10

Mam serwer w szafie serwerowej, a jego redundantne zasilacze są podłączone do dwóch zasilaczy APC Smart-UPS 3000 XLM. Każdy UPS jest podłączony do dwóch różnych źródeł zasilania sieciowego.

Działają dwa wystąpienia apcupsd, każdy podłączony do własnego UPS. Obaj mogą wykryć, kiedy UPS jest zasilany z baterii, a każdy UPS może następnie uruchomić wyłączenie serwera.

Pytanie brzmi: jak NIE wyłączać się, jeśli TYLKO JEDEN UPS skończy się bateria?

Uwaga: Smart-UPS 3000 XLM ma funkcję „Power Sync”, która może połączyć się z urządzeniem równorzędnym i wykryć jego status. Ale kiedy wyciągnąłem wtyczkę z jednego z nich, polecenie wyłączenia zostało mimo wszystko wysłane. Zastanawiam się nad modyfikacją skryptów zamykających, aby sprawdzały za pomocą „apcaccess”, czy inne awarie są wyłączone. Wszelkie doświadczenia w tym zakresie będą mile widziane!

Odpowiedzi:


13

Obecnie, gdy umiera jeden z dwóch UPS, zdarzenie doshutdown jest wyzwalane i wykonuje domyślny skrypt poprzez apccontrol . Doshutdown skrypt ignoruje drugi zasilacz, ponieważ nie są one połączone zdarzeń i wykonywane normalnie z wyłączenia.

Aby zdarzenia doshutdown były nieco połączone, dwa wystąpienia apcupsd wymagają specjalnie dostosowanego pliku konfiguracyjnego. Różnica będzie znajdować się w katalogu, z którego należy wykonać skrypty zdarzeń.

Główne właściwości pierwszych zakładów, w /etc/apcupsd/apcupsd.ups0.conf

SCRIPTDIR /etc/apcupsd/ups0
UPSNAME ups0
DEVICE /dev/ups0
PWRFAILDIR /etc/apcupsd/ups0
NOLOGINDIR /etc/apcupsd/ups0
NISPORT 3551
EVENTSFILE /var/log/apcupsd.0.events

I dla wzlotów1, w /etc/apcupsd/apcupsd.ups1.conf

SCRIPTDIR /etc/apcupsd/ups1
UPSNAME ups1
DEVICE /dev/ups1
PWRFAILDIR /etc/apcupsd/ups1
NOLOGINDIR /etc/apcupsd/ups1
NISPORT 3552
EVENTSFILE /var/log/apcupsd.1.events

Każdy skrypt skryptowy powinien otrzymać kopię domyślnych skryptów.
Chcemy dostosować skrypt doshutdown , który nie spowoduje bezpośredniego wyłączenia maszyny, ale musi sprawdzić, czy drugi UPS nadal jest włączony lub znajduje się w trybie zamykania.

Na górze skryptu doshutdown moglibyśmy dodać coś takiego

dla ups0

if [ ! -f /tmp/ups1.is.down ]
then
  touch /tmp/ups0.is.down
  exit 99
fi

dla ups1

if [ ! -f /tmp/ups0.is.down ]
then
  touch /tmp/ups1.is.down
  exit 99
fi

status 99 ma specjalne znaczenie, które mówi apccontrolowi, aby zatrzymał trwającą akcję. Pięć wierszy sprawdza, czy utworzono drugi plik awaryjny UPS; jeśli nie , plik w dół jest tworzony dla upadków w górę i kończy działanie. Jeśli tak , co oznacza, że ​​drugi UPS jest wyłączony, ten również się wyłącza, dlatego skrypt powinien kontynuować i wyłączyć maszynę.

Pliki /tmp/usp[01].is.downwskazują, czy wzrost [01] jest obecnie wyłączony.

Ważne: skrypt init.d start apcupsd powinien usunąć te pliki, jeśli zostały utworzone w poprzedniej sesji:

rm -f /tmp/usp[01].is.down

Wreszcie, katalogi utworzone powyżej, / etc / apcupsd / ups [01] powinny otrzymać dostęp do użytkownika apcupsd (lub dowolnego użytkownika uruchamiającego instancje).

chown -R apcupsd /etc/apcupsd/ups[01]

Proszę spojrzeć na szczegółową dokumentację .

edycja poprawiła /tmp/ups[01].is.downnazwy, .isbrakowało.


1
a zwykli użytkownicy mogą zatrzymać Twój serwer za pomocą dotyku /tmp/ups1.is.down; dotknij /tmp/ups0.is.down: D Lepiej byłoby na przykład użyć / var / run. Btw. jeśli ktoś wycina i wkleja rozwiązanie, rm -f /tmp/usp[01].is.down to literówka. Nawiasem mówiąc, powinieneś usunąć /tmp/ups[01].is.down ze skrzynki pobocznej apccontrol, gdy zasilanie powróci.
Harka Gyozo

1
Sugeruję dotknięcie własnego pliku is.down PRZED sprawdzeniem drugiego - tak jak jest teraz, myślę, że jest małe okno warunków wyścigu, jeśli oba awarie wychodzą dokładnie w tym samym czasie.
Michael Kohne,

4

Spójrz na NUT. Dobrze sobie z tym radzi. Zdefiniuj liczbę zasilaczy z każdego zasilacza UPS i liczbę wymaganych zasilaczy. Wyłączenie nie zostanie uruchomione, dopóki nie będzie wystarczających źródeł zasilania w UPS.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.