Konfiguracja serwera aplikacji EuroAP w trybie Managed Domain

Konfiguracja serwera aplikacji EuroAP w trybie Managed Domain – część I

Kontynuujemy serię o podstawach konfiguracji serwerów aplikacji z rodziny EuroAP. Dziś opowiemy o uruchamianiu serwerów aplikacji w trybie zarządzalnej domeny (ang. Managed Domain), pokażemy strukturę plików używanych przez ten tryb oraz omówimy jeden z dwóch plików konfiguracyjnych – host.xml.

Kontynuujemy serię o podstawach konfiguracji serwerów aplikacji z rodziny EuroAP. Dziś opowiemy o uruchamianiu serwerów aplikacji w trybie zarządzalnej domeny (ang. Managed Domain), pokażemy strukturę plików używanych przez ten tryb oraz omówimy jeden z dwóch plików konfiguracyjnych – host.xml. Będziemy bazować na wiedzy z poprzednich artykułów, które ukazały się w serii.

Aby uruchomić w trybie managed domain serwer aplikacji EuroAP lub pokrewne, należy wykonać skrypt EUROAP_HOME/bin/domain.sh.
Skrypt ten przyjmuje wiele argumentów, można je oczywiście podejrzeć za pomocą przełącznika -help.

Do najważniejszych należą:

  • --host-config= definiuje konfigurację hosta, domyślnie jest to plik host.xml, w katalogu EUROAP_HOME/domain/configuration/
  • --domain-config= definiuje konfigurację domeny, domyślnie jest to plik domain.xml, w katalogu EUROAP_HOME/domain/configuration/
  • --master-address= przyjmuje adres IP kontrolera domeny, równoważne dla -Djboss.domain.master.address=

Za pomocą zmiennej systemowej jboss.domain.config.dir można zmienić katalog, w którym domyślnie szukane są pliki.
Stworzenie własnego folderu na konfigurację, zazwyczaj skutkuje też potrzebą stworzenia własnego folderu na inne pliki robocze takie jak logi czy dane podsystemów. Tym katalogiem możemy sterować poprzez zmienną systemową jboss.domain.base.dir. Gdy go zmienimy, to serwer aplikacji zamiast używać EUROAP_HOME/domain/, będzie szukał w zadanym katalogu i oczekiwiał, że znajdzie w nim podkatalogi configuration/, data/ oraz log/.

EUROAP_HOME/bin/domain.sh -Djboss.domain.base.dir=/moja/wlasna/lokalizacja

Dobrą praktyką jest kopiowanie folderu /domain z czystej instalacji serwera aplikacji (przed pierwszym uruchomieniem w trybie zarządzalnej domeny).
Pozwala to odseparować od domyślnych katalogów instalacyjnych, pliki konkretnej instancji kontrolerów host: jego konfigurację, logi czy też dane o wdrożeniach i pliki tymczasowe. Dzięki temu na jednej maszynie z tych samych plików instalacyjnych może korzystać wiele instancji EuroAP. Ponadto, gdy będziemy aktualizować serwer aplikacji, będziemy mieć pewność, że nasza konfiguracja nie zostanie nadpisana.

Pliki konfiguracyjne serwera aplikacji

Wszystkie pliki dotyczące trybu managed domain znajdziemy w EuroAP_HOME/domain/.
Jeśli już uruchamialiśmy EuroAP w trybie domain, to zobaczymy następującą strukturę (w celu zwiększeniu czytelności niektóre pliki zostały pominięte):

domain/
├── configuration
│   ├── domain.xml
│   ├── domain_xml_history
│   ├── host-master.xml
│   ├── host-slave.xml
│   ├── host.xml
│   ├── host_xml_history
├── data
├── log
├── servers
│   ├── server-one
│   │   ├── data
│   │   ├── log
│   │   └── tmp
│   └── server-two
│       ├── data
│       ├── log
│       └── tmp
└── tmp

W folderze configuration znajdziemy pliki do konfiguracji domeny, jak i historię konfiguracji.

W katalogu servers są tworzone katalogi dla każdej uruchmionej instancji serwera.
W podanym przykładzie uruchomiona była domyślna konfiguracja, w której uruchamiane są serwery: “server-one” oraz “server-two”. Jak zobaczymy później, zdefiniowany jest także „server-three”, jednak nie zostaje on włączony.

Foldery data, log, tmp pełnią tę samą rolę co w trybie standalone (p. Konfiguracja serwera aplikacji w trybie standalone). Jak widać, foldery te występują w kilku miejscach – na poziomie domain/ jak i w servers/NAZWA_SERWERA/. Nie trudno się domyślić, że pierwsze dotyczą całej domeny, a drugie tego, co się dzieje w poszególnych serwerach.

W folderze EUROAP_HOME/domain/configuration trzymana jest konfiguracja całej domeny. Rozbita jest na 2 pliki: domain.xml oraz host.xml. W pliku host.xml konfigurujemy kontroler hosta (ang. host controller) oraz ustawienia związane z zasobami sprzętowymi hosta i systemem operacyjnym. Plik domain.xml służy do konfiguracji kontrolera domeny. Na przykład ustawień poszczególnych profili, grup serwerów czy też wiązanie gniazd (ang. socket binding) i wszystkich innych elementów, które nie są bezpośrednio zależne od zasobów sprzętowych hosta i systemu operacyjnego.

Pliki host-master.xml i host-slave.xml zawierają przykładową konfigurację. Host-master.xml – dla host-kontrolera pełniącego funkcję kontrolera domeny, zaś host-slave.xml dla host-kontrolera, który będzie się z nim łączył.

host.xml

Plik host.xml ma następującą strukturę:

<host xmlns="urn:jboss:domain:8.0" name="master">
    <extensions...>
    <system-properties...>
    <path...>
    <vault...>
    <management>
        <security-realms...>
        <audit-log...>
        <management-interfaces...>
    </management>
    <domain-controller>
        <local/>
    </domain-controller>
    <interfaces...>
    <jvms...>
    <servers...>
    <profile...>
</host>

Jedynymi koniecznymi elementami są <host>, <management> oraz <domain-controler>.

Omówmy pokrótce każdy element:

  • <extensions> – zawiera rozszerzenia, które są ładowane przez kontroler hosta, a nie przez instancję serwera.
  • <system-properties> – definiuje właściwości systemowe dla konkretnego hosta. Jeśli właściwość jest zdefiniowana kilka razy, to bierzemy wartość zgodnie z hierarchią: wartość z linii komend, wartość z host.xml, wartość z domain.xml
  • <path> – definiuje ścieżki w systemie, wykorzystywane przez konfigurację podsystemów. Każdy host może mieć to zmapowane inaczej
  • <vault> – definiuje vaulta, czyli miejsce, w którym można trzymać zaszyfrowane hasła
  • <management> – określa interfejsy zarządzania, ich zabezpieczenia i logi audytowe
  • <interfaces> – tutaj konfigurujemy adresy IP dla serwisów i podsystemów
  • <domain-controller> – określa jak się połączyć z kontrolerem domeny
  • <jvms> – definiuje konfiguracje JVM, do których po nazwie może się odnieść grupa serwerów, lub pojedynczy serwer
  • <servers> – określa instancje serwerów, które będą zarządzane przez danego kontrolera hostów.
  • <profile> – dostarcza konfigurację, dla wcześniej zdefiniowanych rozszerzeń

kontroler hosta jako kontroler domeny

Niezwykle ważna w pliku host.xml jest informacja o kontrolerze domeny. Generalnie mamy dwie możliwości: możemy powiedzieć, jak znaleźć kontrolera domeny, albo zdeklarować kontrolera hosta jako kontrolera domeny.
W przedstawionym przykładzie wybrano drugą opcję – kontrolerem domeny jest lokalny kontroler hosta.

    <domain-controller>
        <local/>
    </domain-controller> 

Aby inne kontrolery mogły się z nim komunikować, musi wystawić interfejs zarządzania. Konieczny jest tylko natywny interfejs. Interfejs http jest zalecany, gdyż umożliwia podłączenie konsoli administratora.

<management>
    <management-interfaces>
      <native-interface security-realm="ManagementRealm">
        <socket interface="management" port="${jboss.management.native.port:9999}"/>
      </native-interface>
      <http-interface security-realm="ManagementRealm" http-upgrade-enabled="true">
        <socket interface="management" port="${jboss.management.http.port:9990}"/>
      </http-interface>
    </management-interfaces>
</management>

Kontroler hosta łączy się do kontrolera domeny

Konfiguracja kontrolera hosta, który łączy się do kontrolera domeny, wygląda następująco:

    <domain-controller>
        <remote security-realm="ManagementRealm">
            <discovery-options>
                <static-discovery name="primary" protocol="${jboss.domain.master.protocol:remote+http}" host="${jboss.domain.master.address}" port="${jboss.domain.master.port:9990}"/>
            </discovery-options>
        </remote>
    </domain-controller>

Jak widać, przy pomocy elementu <static-discovery> dokładnie określiliśmy, jak można połączyć się do kontrolera domeny.
Możemy zdefiniować w ten sposób kilka kontrolerów domeny i tym samym stworzyć bezpiecznie przełączenie się na inny kontroler domeny, gdyby pierwszy przestał działać.

Aby poprawnie uruchomić EuroAP z powyższą konfiguracją hosta, należy podać przy uruchomieniu parametr jboss.domain.master.address.
Jak wspomniałam wcześniej przykład takiej konfiguracji mamy w pliku host-slave.xml

EUROAP_HOME/bin/domain.sh --host-config=host-slave.xml -Djboss.domain.master.address=IP_KONTROLERA_DOMENY

nazwa hosta

Każdy host musi posiadać unikalną nazwę. Ułatwia to administrację, między innymi pozwala używać tego samego pliku konfiguracyjnego na wielu hostach.
Do ustalenia nazwy wykorzystywana jest poniższa hierarchia:

  1. Nazwa z pliku konfiguracyjnego, o ile jest zdefiniowana.
  2. Wartość właściwości systemowej (ang. system property) jboss.host.name.
  3. Wartość właściwości systemowej jboss.qualified.host.name po ostatniej kropce albo cała wartość, jeśli nie zawiera kropek.
  4. Wartość zmiennej środowiskowej (ang. environmental variable) HOSTNAME (albo COMPUTERNAME na Windowsie) po ostaniej kropce albo cała wartość, jeśli nie zawiera kropek.

Przykład deklaracji w pliku:

<host xmlns="urn:jboss:domain:8.0" name="mojUnikalnyHostName">

Przykład deklaracji jako zmiennej systemowej w lini komend:

EUROAP_HOME/bin/domain.sh --host-config=host-slave.xml  -Djboss.host.name=mojUnikalnyHostName

serwery

W elemencie <servers> definiujemy serwery. W domyślnej konfiguracji zdefiowane są 3.

    <servers>
        <server name="server-one" group="main-server-group"/>
        <server name="server-two" group="main-server-group" auto-start="true">
            <jvm name="default"/>
            <socket-bindings port-offset="150"/>
        </server>
        <server name="server-three" group="other-server-group" auto-start="false">
            <jvm name="default"/>
            <socket-bindings port-offset="250"/>
        </server>
    </servers>

Definicja serwera musi zawierać nazwę i nazwę grupy serwerów (ang. server-group). Grupy serwerów konfigurowane są w pliku domain.xml. Zarówno
server-one, jak i server-two przypisay jest do grupy main-server-group. Oznacza to, że dziedziczą po niej podsystemy i powiązanie gniazd (socket binding). Aby uniknąć konfliktu portów z server-one, server-two zdefiniował przesunięcie portu port-offset.

Atrybut auto-start określa to, czy serwer będzie się włączał automatycznie, czy też nie. Domyślnie wartość tego atrybutu ustawiona jest na true.
Zatem zarówno server-one, jak i server-two uruchamiany jest, gdy startują kontrolery hostów, a server-three musi zostać włączony ręcznie.

Znacznikiem jvm sterujemy konfiguracją JVM. Gdy nie jest zdefiniowany, serwer dziedziczy ustawienia serwer grupy lub hosta.

Podsumowanie

Pokazaliśmy jak uruchamiać serwer aplikacji w trybie zarządzalnej domeny (amiętajcie o dobrej praktyce oddzielenia swojej konfiguracji domeny od instalacji EuroAP;)!), gdzie szukać plików związanych z trybem managed domain oraz omówiliśmy plik konfiguracyjny host.xml.
Przed nami analiza drugiego pliku konfiguracyjnego – domain.xml. Zapraszamy do lektury kolejnego artykułu :)

Autorzy

Artykuły na blogu są pisane przez osoby z zespołu EuroLinux. 80% treści zawdzięczamy naszym developerom, pozostałą część przygotowuje dział sprzedaży lub marketingu. Dokładamy starań, żeby treści były jak najlepsze merytorycznie i językowo, ale nie jesteśmy nieomylni. Jeśli zauważysz coś wartego poprawienia lub wyjaśnienia, będziemy wdzięczni za wiadomość.