Równomierne obciążenie w praktyce - Menadżer Ruchu

Równomierne obciążenie w praktyce - Menadżer Ruchu

Autor: Patryk Pilarski

Opublikowano: 12/14/2016, 12:00 AM

Liczba odsłon: 5489

Poprzedni artykuł przybliżył czytelnikom CentrumXP zasadę działania oraz techniczne zagadnienia dotyczące technologii równomiernego obciążenia. Niniejszy artykuł ma na celu zademonstrowanie działania loadbalancingu „w praktyce” podczas konfiguracji zasobów w Azure. Nawiązując do tekstu „Modele zasobów w Microsoft Azure”, będziemy używali w tym celu „nowego” GUI, a więc portalu Azure. Poniższy artykuł jest pierwszym tekstem z serii poradników traktujących o loadbalancingu jako usłudze w chmurze Microsoft. W pierwszej odsłonie skupimy się na konfiguracji zasobów oraz skonfigurowaniu ich do pracy w trybie równomiernego obciążenia z wykorzystaniem usługi Menadżer Ruchu (Traffic Manager). Skonfigurujemy kilka instancji usług działających jako serwery HTTP po to, aby następnie uruchomić tryb równomiernego obciążenia działający na poziomie zapytań DNS. Jest to świetny sposób na stopniowe migrowanie usług do chmury, ponieważ z pomocą usługi Menadżera Ruchu możemy równoważyć ruch sieciowy nie tylko dla zasobów uruchomionych w Azure, ale również dla innych serwerów i systemów dostępnych poprzez sieć Internet. W osobnym poradniku zostanie zaprezentowana usługa Azure Load Balancer oraz jej wykorzystanie do konfiguracji zasobów Azure charakteryzujących się wysoką dostępnością i ciągłością działania w razie awarii (znane też jako HA – High Availability).

Konfiguracja maszyn wirtualnych

Dobrym przykładem zastosowania loadbalancera będzie prosty system składający się z dwóch serwerów HTTP. Zaczynając więc od podstaw – pierwszym etapem jest utworzenie maszyn wirtualnych z zainstalowanymi usługami działającymi jako serwery HTTP. Aby przykład był trochę bardziej interesujący, w Azure utworzymy dwie różne maszyny – jedną działającą pod kontrolą systemu Windows Server 2016, a drugą działająca pod kontrolą popularnej dystrybucji systemu Linux – Ubuntu Server 16.10.

Pierwszym krokiem jest utworzenie zasobu, tj. maszyny z systemem Windows. W Azure wybieramy więc opcję "Nowy -> Obliczeniowe -> Windows 2016".

Następnie definiujemy podstawowe parametry maszyny – nazwę, typ dysku (do testów wybrano mniej wydajną opcję „Dysk twardy” zamiast „SSD”), nazwę użytkownika, hasło, grupę zasobów (zalecamy utworzenie nowej grupy, do której później zostanie dodana również druga maszyna) oraz lokalizację (zalecamy Europa Zachodnia (Amsterdam) lub Europa Północna (Dublin)). Jeśli strona w zamyśle miałaby działać dla klientów np. w USA, w takim przypadku należy wybrać jedną z lokalizacji w Ameryce Północnej. W kwestii wyboru lokalizacji pomocne mogą być narzędzia, takie jak Azure Speedtest, który sprawdza parametry sieci z naszej obecnej lokalizacji do lokalizacji centr danych Microsoft.

Wybieramy rozmiar maszyny, tzn. jej konfigurację sprzętową. Dla przykładu wybierzmy "A1 Standard" wyceniany na ok. 56 euro miesięcznie (cena ta została wyliczona przy założeniu ciągłego działania maszyny). W następnym oknie konfiguratora należy zdefiniować opcje dotyczące magazynu i sieci wirtualnych – domyślne wszystkie opcje są skonfigurowane tak, aby utworzyć nowy zasób magazynu i sieci.

Ostatnim oknem konfiguratora jest widoczne poniżej okno podsumowania. Jeśli wszystkie wybrane przez nas opcje zostały pomyślne napisane, możemy już zakończyć proces tworzenia maszyny, wybierając opcję „OK”.

Po chwili oczekiwania maszyna wirtualna powinna być już gotowa do pracy. Możemy przejść do widoku zarządzania maszyną, wybierając opcję „Virtual Machines”, a następnie wybierając odpowiednią maszynę analogicznie, jak na poniższym przykładzie.

Nowoutworzona maszyna jest domyślnie uruchomiona, dzięki czemu od razu możemy rozpocząć sesję RDP (Remote Desktop Protocol) z maszyną poprzez kliknięcie w przycisk „Połącz”. W rezultacie na dysku zapisany zostanie plik .rdp, który umożliwi szybkie uruchomienie połączenia z maszyną.

Konfiguracja serwerów HTTP

Z pomocą uprzednio zdefiniowanych danych logowania powinniśmy dostać się na maszynę wirtualną, a naszym oczom powinien ukazać się pulpit systemu Windows Server 2016. Następnym krokiem będzie instalacja serwera HTTP. Do instalacji oprogramowania Microsoft IIS wykorzystamy narzędzie System Manager, które automatycznie uruchamia się wraz ze startem systemu Windows Server. W oknie głównym programu wybieramy opcję „2. Add roles and features”.

Na ekranie pojawi się konfigurator, w którym klikamy przycisk „Next” w trzech kolejnych oknach. Następnie w oknie wyboru roli do zainstalowania zaznaczamy opcję „Web Server (IIS)” zgodnie z przykładem widocznym poniżej.

Po zaznaczaniu powyższej opcji pojawi się okno z zapytaniem o to, czy narzędzia do zarządzania serwerem web również mają zostać zainstalowane – zgadzamy się na to poprzez wybranie opcji „Add Features”. Następnie czterokrotnie klikamy przycisk „Next”, aż przejdziemy do finalnego okna konfiguracji, gdzie klikamy przycisk „Install” i czekamy, aż rola serwera IIS zostanie zainstalowana.

Po zainstalowaniu roli serwer HTTP powinien być dostępny zaraz po instalacji. Możemy to zweryfikować poprzez narządzie do zarządzania serwerem IIS. Aby je uruchomić, w górnym prawym rogu Server Managera powinniśmy wybrać opcję "Tools", a następnie z listy rozwijanej wybrać "Internet Information Services (IIS) Manager". Powinniśmy w ten sposób uruchomić widoczny poniżej program.

To, czy serwer HTTP działa, można zweryfikować również poprzez wpisanie adresu http://localhost/ w przeglądarce zainstalowanej na maszynie wirtualnej. Weryfikując połączenie z zewnątrz poprzez pisanie w adres przeglądarki adresu IP naszej maszyny zwerfikujemy jednak, że nasz serwer IIS nie jest dostępny z zewnątrz, tj. globalnie z sieci Internet. Jest to spowodowane ustawieniami filtrowania ruchu w Azure. Ze względów bezpieczeństwa ustawienia te pozwalają domyślnie jedynie na połączenie RDP. Aby dodać wyjątek pozwalający na ruch przychodzący HTTP do maszyny, należy w portalu Azure ponownie wrócić do ekranu zarzadzania maszyną wirtualną i wybrać opcję "Interfejsy sieciowe -> Grupa zabezpieczeń sieci". Następnie dodajemy nową regułę analogicznie do poniższego przykładu.

Po zapisaniu ustawień strona domowa IIS będzie dostępna z zewnątrz, co można zweryfikować poprzez wpisanie w pasku przeglądarki adresu IP naszej maszyny. Następnie zmieniamy konfigurację serwera IIS tak, by po podłączeniu do serwera wyświetlana była strona o ustalonej przez nas treści. Aby tego dokonać, należy w IIS Manager nacisnąć prawym przyciskiem na "Default Web Sites" (widoczne po lewej stronie) i wybrać opcję „Explore”. W wyświetlonym folderze należy usunąć obecne tam piki i utworzyć nowy plik np. index.html, w treści wpisując np. „Hej! Jesteś połączony do serwera HTTP1 (IIS)”. Następnie powinno się w ISS Manager kliknąć prawym przyciskiem myszy nazwę serwera i wybrać opcję „Refresh”. W ten prosty sposób udało się zmienić główną stronę, widoczną po połączeniu z naszym serwerem.

Następnym etapem jest konfiguracja drugiego serwera działającego pod kontrolą systemu Ubuntu Server. Proces tworzenia maszyny wygląda analogicznie, z tą tylko różnica, że zamiast maszyny z Windows wybieramy maszyną z systemem Ubuntu, a podczas procesu konfiguracji pamiętamy o wyborze dodania nowego serwera do istniejącej już grupy zasobów. Pamiętajmy również o dodaniu reguły pozwalającej na połączenie http (port 80) do serwera. Istotną różnicą widoczną po uruchomieniu maszyny z Ubuntu jest to, że połączenie do maszyny jest realizowane przez protokół SSH (zamiast RDP). Aby połączyć się z maszyną, należy użyć terminala, jakim jest np. popularne Putty.. W celu skonfigurowania maszyny uruchamiamy terminal, w adresie docelowym podajemy adres serwera wirtualnego w formacie nazwa_użytkownika@adres IP oraz wybieramy protokół SSH (port 22). Po wybraniu opcji „Połącz” i podaniu hasła powinniśmy zyskać dostęp do konsoli Ubuntu.

Jednym z najpopularniejszych serwerów HTTP, dostępnym za darmo w ramach oprogramowania OpenSource, jest Apache. Poniższe komendy pozwolą nam na zainstalować i skonfigurować serwer Apache na systemie Ubuntu.

  • sudo apt install apache2 – polecenie ściągnięcia i instalacji paczki apache;
  • cd /var/www/html – przejścia do katalogu głownego web servera;
  • sudo rm index.html – usunięcie domyślnej strony domowej;
  • sudo touch index.html – utworzenie nowego pliku index.html;
  • sudo nano index.html – otwarcie edytora tekstowego – tutaj należy wpisać dowolny tekst np. "Hej! Jesteś połączony do serwera HTTP2 (Apache)". Wyjście z edytora poprzez skrót klawiszowy Ctrl + X;
  • sudo /etc/init.d/apache2 restart – zrestartowanie serwisu Apache;

Finalnie udało Nam się skonfigurować dwa serwery HTTP. Kolejnym etapem jest skonfigurowanie usługi Traffic Manager dla skonfigurowanych maszyn. Aby skonfigurować tę usługę, trzeba przypisać maszynom wirtualnym nazwę DNS (tzw. rekord A). Jednocześnie warto zmienić typ adresu IP na statyczny, tak aby zawsze łączyć się z wybraną maszyną za pomocą tego samego adresu. Konfiguracji tej można dokonać w menu „Przegląd” zasobu maszyna wirtualna, korzystając z opcji „Konfiguracja”. W opisywanym przykładzie nazwa DNS maszyn wirtualnych została zmieniona analogicznie do konfiguracji widocznej na poniższym zrzucie ekranu.

Konfiguracja usługi Menadżer Ruchu

Po dodaniu nazw DNS dla maszyn możemy przejść do konfiguracji usługi Menadżer Ruchu. Tworzymy nowy zasób, wyszukując usługę i przypisując ją do tej samej grupy zasobów, do której zostały przypisane też zasoby maszyn wirtualnych.

Podczas konfiguracji usług należy podać nazwę (dla poniższego przykładu będzie to centrumxplb.trafficmanager.net) oraz wybrać jeden z trybów działania routingu. Do wyboru są trzy następujące tryby:

  • wydajność – ruch zostanie przekierowany do punktu końcowego charakteryzującego się najniższym czasem opóźnienia w danej chwili;
  • priorytet – ruch zostanie przekierowany do punktów końcowych zgodnie z ustalonym przez użytkownika priorytetem (kolejnością);
  • ważony – ruch zostanie przekierowany do punktów końcowych zgodnie z ustalonymi przez użytkownika wagami.

Wybór trybu pracy usługi zależy od wymagań stawianych wobec aplikacji. Jeśli np. nasza aplikacja ma zasięg globalny i działa jednocześnie na wielu zasobach skonfigurowanych w różnych częściach świata, to zalecanym trybem pracy jest tryb wydajności, ponieważ klient - np. łączący się z Azji - zostanie przekierowany do zasobu znajdującego się najbliżej jego lokalizacji (ponieważ wybrany zasób zaoferuje najlepsze parametry połączenia). Jeśli zależy nam na równomiernym obciążeniu wielu zasobów, wówczas zalecanym trybem pracy jest tryb ważony, gdzie sami ustalamy wagi dla poszczególnych punktów końcowych, a użytkownicy są przekierowani losowo pomiędzy serwerami w puli (z uwzględnieniem parametru wagi). Jeśli zależy nam na ręcznym zdefiniowaniu priorytetu połączenia, zalecanym trybem pracy jest wtedy tryb priorytet. Należy pamiętać, że we wszystkich powyżej opisanych trybach usługa Menadżer Ruchu podejmuje decyzje o przekierowaniu klienta jedynie na aktywne punkty końcowe – dostępność punktów końcowych jest automatycznie sprawdzana (domyślnie co 300s, najniższa dopuszczalna wartość to 30s) w oparciu o określony protokół, port lub ścieżkę do pliku. Dokładny opis usługi można znaleźć na stronach wsparcia technicznego Microsoft. W celu skonfigurowania naszego środowiska wybieramy tryb ważony. Po utworzeniu zasobu przechodzimy do jego konfiguracji. W zakładce "Punkty Końcowe" dodajemy zasoby publicznych adresów IP uprzednio skonfigurowanych maszyn – dla każdego Punktu Końcowego ustawiamy wartość wagi równą 1.

Po skonfigurowaniu punktów końcowych możemy sprawdzić działanie Menadżera Ruchu np. wpisując w pasku przeglądarki skonfigurowany wcześniej adres http://centrumxplb.trafficmanager.net. Po połączeniu z podanym adresem powinien wyświetlić się nam skonfigurowany wcześniej komunikat informujący, z jakim serwerem jesteśmy aktualnie połączeni (IIS lub Apache). Odświeżając stronę zauważymy, że co pewien czas zostajemy przekierowani na inny serwer z puli. Możemy też sprawdzić, co stanie się, gdy wyłączymy jeden z serwerów. W takiej sytuacji Menadżer Ruchu będzie przekierowywać ruch jedynie na aktywny serwer (pamiętajmy jednak o tym, że dostępność serwerów może być sprawdzana z najniższym interwałem czasu równym 30s). Na tym etapie moglibyśmy zakończyć ten artykuł, przedstawiający możliwości platformy Azure i usługi Menadżera Ruchu, ale warto rozszerzyć nasze skonfigurowane środowisko o kolejne opcje.

Konfiguracja AppService

Jak już zostało wspomniane wcześniej – do puli Menadżera Ruchu możemy dodać również inne zasoby. Dotychczas używaliśmy zasobów typu IaaS, czyli maszyn wirtualnych, po to by uruchomić serwer http i działającą stronę. Oczywiście nie jest to najszybsza droga to uruchomienia swojej strony, ale za to daje nam pełną kontrolę nad serwerem. Alternatywnie można utworzyć nowy zasób AppService, a więc zasób typu PaaS, który daje nam możliwość uruchomienia własnej strony bez konieczności konfiguracji maszyny wirtualnej, serwera http itd. Tworzenie zasobu AppService przebiega standardowo. Podajemy jedynie nazwę – adres strony - pod którą dostępna będzie nasza witryna, oraz decydujemy, czy biblioteka Application Insights ma być dodana do naszej strony. Pozwala to w późniejszym czasie na dostęp do zaawansowanych statystyk i monitoringu aplikacji. Po utworzeniu zasobu nie musimy nawet instalować edytora HTML, aby zmienić jej domyślny wygląd. Wystarczy w menu zasobu AppService wybrać opcję "Edytor Usługi App Service (wersja zapoznawcza)".

Po kliknięciu linku „Przejdź” przejedziemy to edytora kodu dostępnego w przeglądarce, w którym należy zmienić domyślny kod strony na dowolną treść, a następnie skompilować kod poprzez wybranie opcji "Run".

W tak prosty sposób udało się nam zmodyfikować zawartość strony uruchomionej w ramach zasobu AppService. Możemy teraz wrócić do ustawień punktów końcowych Menadżera Ruchu i skonfigurować kolejny punkt końcowy w postaci usługi aplikacji. Po poprawnym dodaniu AppService z wagą 1 do puli Menadżera Ruchu powinniśmy zaobserwować poprawne zachowanie mechanizmu równomiernego obciążenia, który to mechanizm w losowy sposób powinien przekierowywać ruch na wszystkie 3 serwery w puli (dwie maszyny wirtualne i jeden AppService).

Gorąco zachęcamy do wykorzystania Menadżera Ruchu jako podstawowego mechanizmy równomiernego obciążenia dla zasobów Azure i innych zasobów dostępnych poprzez sieć Internet. Do puli można dodawać również adresy zewnętrze, przez co nic nie stoi na przeszkodzie, by mechanizm równomiernego obciążenia obejmował swoim działaniem serwery uruchomione u innych dostawców. Pamiętajmy jednak, że w przypadku tego zasobu o konfigurację wysokiej dostępności (HA) musimy zadbać we własnych zakresie. Kolejna część z naszej serii opisze, jak wykorzystać mechanizmy wysokiej dostępności, oferowane przez Azure, i w jaki sposób skonfigurować loadbalancer, aby zapewnić najwyższy współczynnik SLA dla aplikacji działających w chmurze Microsoft.

Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży
Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży

Wydarzenia