czwartek, 27 października 2011

(prawie)automatyczny failover aplikacji Manage Engine ServiceDesk Plus

Manage Engine ServiceDesk Plus (niektórzy może jeszcze pamiętają AdventNet ServiceDesk) jak informuje producent jest: "to internetowa aplikacja pomocy technicznej, która pomaga zarządzać komunikacją z jednego punktu. Oferuje zintegrowane zarządzanie zgłoszeniami (zgłaszanie problemów), zarządzanie zasobami, zarządzanie zleceniami zakupu, zarządzanie kontraktem, portal samoobsługowy, oraz bazę wiedzy.". Od strony administracyjnej jest to aplikacja napisana w Javie i przechowująca dane w bazie danych. Do wyboru mamy MySQL oraz MSSQ Server.
Czy aplikacja ta może działać w trybie HA z automatycznym przywracaniem po awarii jednego z serwerów bazy danych? Tak i nie... Ale wszystko da się przecież jakoś obejść :) Opiszę taki przypadek na przykładzie aplikacji działającej wraz a bazą MSSQL Server.

Wyobraźmy sobie taką sytuację. Mamy dwa serwery SRV1 i SRV2. Na SRV1 instalujemy bazę MSSQL, natomiast na SRV2 instalujemy aplikację SD+ i tworzymy tam lustrzany serwer bazy danych. O ile zapewnienie wysokiej dostępności dla bazy danych jest proste (post o konfiguracji mirroringu tutaj), to z samą aplikacją SD+ działająca w takim środowisku pojawiają się problemy. Connection string do bazy znajduje się w pliku mssql-ds.xml (w ścieżce ManageEngine\ServiceDesk\server\default\deploy).  W przypadku przepięcia się bazy, zmienia się także connection string i aplikacja tak czy siak nie będzie działać. Co zrobić w takim wypadku? Potrzebujemy podmienić dane w pliku konfiguracyjnym i zrestartować usługę SD+. Ale po co robić, to ręcznie jak z pomocą przychodzi skrypt PowerShella. Aby wszystko działało jak należy musimy przygotować dwie wersje pliku mssql-ds.xml z odpowiednimi wartościami.

Teraz czas na skrypt:


$wybor = read-host "Który serwer SQL jest aktywny: 1 -- serwer2 2 -- serwer1"
if($wybor -eq '1')

{
Copy-Item E:\ManageEngine\ServiceDesk\server\default\deploy\srv2\mssql-ds.xml
E:\ManageEngine\ServiceDesk\server\default\deploy
}

elseif($wybor -eq '2')

{
Copy-Item E:\ManageEngine\ServiceDesk\server\default\deploy\srv1\mssql-ds.xml
E:\ManageEngine\ServiceDesk\server\default\deploy
}
Restart-Service -displayname "ManageEngine ServiceDesk Plus"

Po uruchomieniu otrzymujemy takie oto okno z wyborem:


Po dokonaniu odpowiedniego wyboru skrypt kopiuje plik konfiguracyjny z prawidłowym connection stringiem i restartuję usługę.

Wiem wiem taki failover to wersja dla ubogich, dlatego aktualnie pracuję nad czymś całkowicie automatycznym. Oczywiście podzielę się gotowym rozwiązaniem na tym blogu!

0 komentarze:

Prześlij komentarz