Przełączanie awaryjne w wielu regionach z użyciem zasad routingu Cloud DNS i kontroli stanu na potrzeby wewnętrznego systemu równoważenia obciążenia TCP/UDP

1. Wprowadzenie

Ostatnia aktualizacja: 22.09.2022 r.

Co to jest zasada routingu DNS

Zasady routingu Cloud DNS umożliwiają użytkownikom konfigurowanie sterowania ruchem opartego na DNS w zależności od określonych kryteriów, takich jak waga, lokalizacja geograficzna czy kontrole stanu.

Cloud DNS obsługuje te zasady routingu:

  • Zasada routingu ważonego typu „round robin”
  • Zasada routingu geolokalizacji
  • Zasada routingu z obsługą geofencingu
  • Zasada routingu przełączania awaryjnego

W tym module skonfigurujesz i przetestujesz zasadę routingu przełączania awaryjnego.

Zasady routingu awaryjnego

Cloud DNS obsługuje kontrole stanu wewnętrznych systemów równoważenia obciążenia TCP/UDP, które mają włączony dostęp globalny. Dzięki zasadzie routingu przełączania awaryjnego możesz skonfigurować podstawowe i zapasowe adresy IP dla rekordu zasobu. W normalnym działaniu Cloud DNS będzie odpowiadać na zapytania przy użyciu adresów IP udostępnionych w zbiorze podstawowym. Gdy wszystkie adresy IP w zestawie podstawowym awansują (stan zmienia się na nieprawidłowy), Cloud DNS rozpoczyna obsługę adresów IP z zestawu kopii zapasowych.

Kontrole stanu

Zasada routingu DNS będzie zależeć od natywnych ujednoliconych kontroli stanu wewnętrznego systemu równoważenia obciążenia(UHC). Wewnętrzny system równoważenia obciążenia uznaje się za sprawny, jeśli przynajmniej 20% backendów jest sprawnych. Kontrole stanu wewnętrznych systemów równoważenia obciążenia TCP/UDP i wewnętrznych systemów równoważenia obciążenia HTTP(S) podają różne informacje. W przypadku wewnętrznego systemu równoważenia obciążenia HTTP(S) UHC udostępnia stan wszystkich serwerów proxy Envoy, ale w przypadku wewnętrznego systemu równoważenia obciążenia TCP/UDP Cloud DNS otrzymuje bezpośrednie sygnały dotyczące stanu z poszczególnych instancji backendowych. Szczegółowe informacje o kontroli stanu znajdziesz tutaj .

Co utworzysz

W ramach tego ćwiczenia w Codelabs utworzysz witrynę działającą w 2 regionach i powiążesz z nią zasadę routingu DNS. Konfiguracja obejmuje:

Aktywne zasoby –

  • Wewnętrzny system równoważenia obciążenia L4 w regionie REGION_1
  • Maszyna wirtualna z serwerem WWW Apache w regionie REGION_1

Tworzenie kopii zapasowych zasobów –

  • Wewnętrzny system równoważenia obciążenia L4 w regionie REGION_2
  • Maszyna wirtualna z serwerem WWW Apache w regionie REGION_2

Konfiguracja wygląda tak:

d0a91d3d3698f544.png

Czego się nauczysz

  • Jak utworzyć zasadę routingu przełączania awaryjnego
  • Aktywuj przełączanie awaryjne DNS
  • Jak przekierować ruch do zestawu kopii zapasowych

Czego potrzebujesz

  • Podstawowa znajomość systemu DNS
  • Podstawowa znajomość Google Compute Engine
  • Podstawowa znajomość wewnętrznego systemu równoważenia obciążenia L4

2. Konfiguracja i wymagania

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. To ciąg znaków, który nie jest używany przez interfejsy API Google. W każdej chwili możesz ją zmienić.
  • Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i nie można go zmienić (nie można go zmienić po ustawieniu). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń z programowania konieczne jest odwołanie się do identyfikatora projektu (zwykle nazywa się on PROJECT_ID). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować kolejny losowy. Możesz też spróbować własnych sił i sprawdzić, czy jest dostępna. Potem nie będzie można go zmienić. Pozostanie ono przez czas trwania projektu.
  • Dostępna jest trzecia wartość, numer projektu, z którego korzystają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Cloud/interfejsów API. Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Aby wyłączyć zasoby, aby nie naliczać opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Uruchamianie Cloud Shell

Google Cloud można obsługiwać zdalnie z laptopa, ale w ramach tego ćwiczenia z programowania wykorzystasz Google Cloud Shell – środowisko wiersza poleceń działające w chmurze.

W konsoli Google Cloud kliknij ikonę Cloud Shell na górnym pasku narzędzi:

55efc1aaa7a4d3ad.png

Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno pojawić się coś takiego:

7ffe5cbb04455448.png

Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, znacząco zwiększając wydajność sieci i uwierzytelnianie. Wszystkie zadania w ramach tego ćwiczenia z programowania można wykonywać w przeglądarce. Nie musisz niczego instalować.

3. Wersja pakietu SDK Google Cloud

W momencie pisania wiadomości pakiet 401.0.0 jest najnowszą wersją pakietu SDK Google Cloud. Wszystkie polecenia w tym module zostały przetestowane przy użyciu najnowszej wersji pakietu SDK Google Cloud. Zanim przejdziesz dalej, sprawdź, czy Cloud Shell używa najnowszej wersji pakietu SDK.

Sprawdzanie wersji pakietu SDK

Aby sprawdzić wersję pakietu SDK, użyj polecenia gcloud version. Uruchom te polecenia w Cloud Shell

Polecenie

gcloud version | grep "Google Cloud SDK"

Przykład wyjściowy

Google Cloud SDK 401.0.0

Następne kroki

  1. Jeśli wersja pakietu SDK to 401.0.0 lub nowsza, przejdź do następnej sekcji.
  2. Jeśli wersja pakietu SDK jest niższa niż 401.0.0, uruchom podane poniżej polecenie, aby zaktualizować pakiet SDK.

Polecenie opcjonalne

sudo apt-get update && sudo apt-get install google-cloud-sdk

4. Zanim zaczniesz

Zanim zaczniesz wdrażać architekturę, którą omówiliśmy powyżej, sprawdźmy, czy Cloud Shell jest poprawnie skonfigurowana i czy wszystkie wymagane interfejsy API są włączone.

Skonfiguruj identyfikator projektu

Sprawdź w Cloud Shell, czy identyfikator projektu jest skonfigurowany. Jeśli prompt Cloud Shell przypomina poniższe dane wyjściowe i nie planujesz zmieniać identyfikatora projektu, możesz przejść do następnego kroku (ustawiania zmiennych środowiskowych).

USER@cloudshell:~ (PROJECT_ID)$

Jeśli nadal chcesz zmienić identyfikator projektu, użyj polecenia wymienionego poniżej. Prompt Cloud Shell zmieni się z (PROJECT_ID) na (YOUR-PROJECT-ID)

Polecenie opcjonalne

gcloud config set project [YOUR-PROJECT-ID]

Przykład wyjściowy

Updated property [core/project].
USER@cloudshell:~ (YOUR-PROJECT-ID)$

Ustawianie zmiennych środowiskowych

Ustawianie zmiennych środowiskowych

Do ustawiania zmiennych środowiskowych użyjemy polecenia export. Uruchom te polecenia w Cloud Shell

Polecenia

export REGION_1=us-west1
export REGION_1_ZONE=us-west1-a
export REGION_2=us-east4
export REGION_2_ZONE=us-east4-a

Potwierdź

Zmienne środowiskowe są już skonfigurowane, przejdźmy więc do weryfikacji za pomocą polecenia echo. Dane wyjściowe każdego polecenia powinny być zgodne z wartością skonfigurowaną powyżej za pomocą polecenia export. Uruchom te polecenia w Cloud Shell

Polecenia

echo $REGION_1
echo $REGION_1_ZONE
echo $REGION_2
echo $REGION_2_ZONE

Włączanie wszystkich wymaganych usług

Włącz interfejsy Compute API i DNS za pomocą polecenia gcloud services enable. Uruchom te polecenia w Cloud Shell

Włączanie interfejsu Compute API

Polecenie

gcloud services enable compute.googleapis.com

Włączanie interfejsu DNS API

Polecenie

gcloud services enable dns.googleapis.com

Potwierdź

Skoro usługi są już włączone, sprawdźmy za pomocą polecenia gcloud services list, aby wyświetlić listę wszystkich włączonych interfejsów API.

Polecenie

gcloud services list | grep -E 'compute|dns'

Przykład wyjściowy

NAME: compute.googleapis.com
NAME: dns.googleapis.com

5. Tworzenie sieci VPC, podsieci i reguł zapory sieciowej

W tej sekcji utworzymy sieć VPC, 2 podsieci (po 1 w każdym regionie) i wymagane reguły zapory sieciowej.

Tworzenie sieci VPC

Aby utworzyć sieć VPC, użyj polecenia gcloud compute networks create. Ustawiamy tryb podsieci na niestandardowy, ponieważ w następnym kroku utworzymy własne podsieci. Uruchom podane niżej polecenia w Cloud Shell.

Polecenie

gcloud compute networks create my-vpc --subnet-mode custom

Utwórz podsieci

Za pomocą polecenia gcloud compute networks subnets create utwórz 2 podsieci – jedną w regionie REGION_1, a drugą w regionie REGION_2. Uruchom te polecenia w Cloud Shell

Podsieć REGION_1

Polecenie

gcloud compute networks subnets create ${REGION_1}-subnet \
--network my-vpc \
--range 10.1.0.0/24 \
--region $REGION_1

Podsieć REGION_2

Polecenie

gcloud compute networks subnets create ${REGION_2}-subnet \
--network my-vpc \
--range 10.2.0.0/24 \
--region $REGION_2

Tworzenie reguł zapory sieciowej

Musisz zezwolić na ruch na porcie 80 z podsieci VPC i z zakresów adresów IP kontroli stanu systemu równoważenia obciążenia.

Oprócz tego musisz też utworzyć regułę zapory sieciowej zezwalającą na ruch SSH w maszynach wirtualnych klienta.

Użyj polecenia gcloud compute firewall-rules create, aby utworzyć reguły zapory sieciowej. Uruchom te polecenia w Cloud Shell

Zezwalaj na ruch przez port 80

Polecenie

gcloud compute firewall-rules create allow-http-lb-hc \
--allow tcp:80 --network my-vpc \
--source-ranges 10.1.0.0/24,10.2.0.0/24,35.191.0.0/16,130.211.0.0/22 \
--target-tags=allow-http

Zezwalaj na ruch SSH w maszynie wirtualnej klienta

Polecenie

gcloud compute firewall-rules create allow-ssh \
--allow tcp:22 --network my-vpc \
--source-ranges 0.0.0.0/0 \
--target-tags=allow-ssh

6. Utwórz Cloud NAT

Aby prywatne maszyny wirtualne mogły pobierać i instalować pakiety z internetu, potrzebujesz bram Cloud NAT w obu regionach.

  • Nasze maszyny wirtualne serwera WWW muszą pobrać i zainstalować serwer WWW Apache.
  • Klient maszyny wirtualnej musi pobrać i zainstalować pakiet dnsutils, którego użyjemy do testowania.

Każda brama Cloud NAT jest powiązana z jedną siecią VPC, jednym regionem i routerem Cloud Router. Zanim utworzymy bramy NAT, musimy utworzyć routery Cloud Router w każdym regionie.

Tworzenie routerów Cloud Router

Za pomocą polecenia gcloud compute routers create utwórz routery Cloud Router w regionach us-west1 i us-east4. Uruchom podane niżej polecenia w Cloud Shell.

Region_1, router Cloud Router

Polecenia

gcloud compute routers create "${REGION_1}-cloudrouter" \
--region $REGION_1 --network=my-vpc --asn=65501

Region_2 Cloud Router

Polecenia

gcloud compute routers create "${REGION_2}-cloudrouter" \
--region $REGION_2 --network=my-vpc --asn=65501

Tworzenie bram NAT

Za pomocą polecenia gcloud compute routers nat create utwórz bramy NAT w regionach us-west1 i us-east4. Uruchom podane niżej polecenia w Cloud Shell.

Brama NAT Region_1

Polecenia

gcloud compute routers nats create "${REGION_1}-nat-gw" \
--router="${REGION_1}-cloudrouter" \
--router-region=$REGION_1 \
--nat-all-subnet-ip-ranges --auto-allocate-nat-external-ips

Brama NAT Region_2

Polecenia

gcloud compute routers nats create "${REGION_2}-nat-gw" \
--router="${REGION_2}-cloudrouter" \
--router-region=$REGION_2 \
--nat-all-subnet-ip-ranges --auto-allocate-nat-external-ips

7. Tworzenie maszyn wirtualnych Compute Engine

W tej sekcji utworzysz serwery WWW, niezarządzane grupy instancji dla serwerów WWW i maszynę wirtualną klienta.

Tworzenie maszyn wirtualnych serwera WWW

Aby utworzyć serwery WWW, użyj polecenia gcloud compute instances create. Musimy utworzyć dwa serwery WWW, jeden w regionie REGION_1, a drugi w regionie REGION_2. Do instalowania i konfigurowania serwera Apache na serwerach WWW używamy skryptów startowych.

REGION_1 Serwer WWW

Uruchom to polecenie w Cloud Shell

Polecenie

gcloud compute instances create "${REGION_1}-instance" \
--image-family=debian-11 --image-project=debian-cloud \
--zone=$REGION_1_ZONE \
--network-interface=network=my-vpc,subnet=${REGION_1}-subnet,no-address \
--tags=allow-http \
--metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'

REGION_2 Serwer WWW

Uruchom to polecenie w Cloud Shell

Polecenie

gcloud compute instances create "${REGION_2}-instance" \
--image-family=debian-11 --image-project=debian-cloud \
--zone=$REGION_2_ZONE \
--network-interface=network=my-vpc,subnet=${REGION_2}-subnet,no-address \
--tags=allow-http \
--metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'

Tworzenie niezarządzanych grup instancji

W tej sekcji utworzymy 2 niezarządzane grupy instancji. Użyjemy tych grup instancji w następnej sekcji, aby skonfigurować usługi backendu wewnętrznego systemu równoważenia obciążenia. Po utworzeniu grup instancji dodamy do nich maszyny wirtualne serwera WWW.

Tworzenie niezarządzanych grup instancji

Za pomocą polecenia gcloud compute instance-groups unmanaged create utwórz 2 niezarządzane grupy instancji – jedną dla serwera WWW us-west1 i jedną dla serwera WWW us-east4.

Grupa instancji Region_1

Polecenia

gcloud compute instance-groups unmanaged create \
"${REGION_1}-instance-group" --zone=$REGION_1_ZONE

Grupa instancji Region_2

Polecenia

gcloud compute instance-groups unmanaged create \
"${REGION_2}-instance-group" --zone=$REGION_2_ZONE

Dodawanie maszyn wirtualnych do grup instancji

Za pomocą polecenia gcloud compute instance-groups unmanaged add-instances dodaj instancje do właśnie utworzonych grup instancji. Dodaj serwer WWW REGION_1 do grupy instancji REGION_1 i serwer WWW REGION_2 do grupy instancji REGION_2

Grupa instancji Region_1

Polecenia

gcloud compute instance-groups unmanaged add-instances \
"${REGION_1}-instance-group" --instances $REGION_1-instance \
--zone=$REGION_1_ZONE

Grupa instancji Region_2

Polecenia

gcloud compute instance-groups unmanaged add-instances \
"${REGION_2}-instance-group" --instances $REGION_2-instance \
--zone=$REGION_2_ZONE

Tworzenie klienckiej maszyny wirtualnej

Użyjemy tej maszyny wirtualnej do przeprowadzania testów i sprawdzania konfiguracji DNS. Do zainstalowania pakietu dnsutils używamy skryptu startowego. Uruchom podane niżej polecenia w Cloud Shell.

Polecenie

gcloud compute instances create client-instance --image-family=debian-11 \
--image-project=debian-cloud \
--zone=$REGION_1_ZONE \
--network-interface=network=my-vpc,subnet=${REGION_1}-subnet,no-address \
--tags=allow-ssh \
--metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install dnsutils -y'

8. Tworzenie wewnętrznych systemów równoważenia obciążenia L4

Aby utworzyć wewnętrzny system równoważenia obciążenia L4, musimy utworzyć kontrolę stanu, usługę backendu i regułę przekierowania.

Utwórz kontrolę stanu

Aby utworzyć kontrolę stanu, użyj polecenia gcloud compute health-checks create. Tworzymy podstawową kontrolę stanu HTTP i portem docelowym jest port 80. Uruchom te polecenia w Cloud Shell

Polecenie

gcloud compute health-checks create http http-hc --port 80

Konfigurowanie usług backendu

Utwórz usługę backendu za pomocą polecenia gcloud compute backend-services create. Gdy usługi backendu zostaną utworzone, dodamy niezarządzane grupy instancji do usług backendu za pomocą polecenia gcloud compute backend-services add-backend. Uruchom podane niżej polecenia w Cloud Shell.

Utwórz usługę backendu

Polecenia

gcloud compute backend-services create $REGION_1-backend-service \
--load-balancing-scheme=INTERNAL --protocol=TCP \
--health-checks=http-hc --region=$REGION_1
gcloud compute backend-services create $REGION_2-backend-service \
--load-balancing-scheme=INTERNAL --protocol=TCP \
--health-checks=http-hc --region=$REGION_2

Dodaj backend

Polecenie

gcloud compute backend-services add-backend $REGION_1-backend-service \
--instance-group=$REGION_1-instance-group \
--region=$REGION_1 \
--instance-group-zone=$REGION_1_ZONE
gcloud compute backend-services add-backend $REGION_2-backend-service \
--instance-group=$REGION_2-instance-group \
--region=$REGION_2 \
--instance-group-zone=$REGION_2_ZONE

Tworzenie reguł przekierowania

Użyj polecenia gcloud compute forwarding-rules create, aby utworzyć reguły przekierowania w obu regionach. Uruchom te polecenia w Cloud Shell

REGION_1 – reguła przekierowania

Polecenia

gcloud compute forwarding-rules create $REGION_1-ilb \
    --region=$REGION_1 \
    --load-balancing-scheme=internal \
    --network=my-vpc \
    --subnet=$REGION_1-subnet \
    --ip-protocol=TCP \
    --ports=80 \
    --backend-service=$REGION_1-backend-service \
    --backend-service-region=$REGION_1 \
    --allow-global-access

Reguła przekierowania REGION_2

gcloud compute forwarding-rules create $REGION_2-ilb \
    --region=$REGION_2 \
    --load-balancing-scheme=internal \
    --network=my-vpc \
    --subnet=$REGION_2-subnet \
    --ip-protocol=TCP \
    --ports=80 \
    --backend-service=$REGION_2-backend-service \
    --backend-service-region=$REGION_2 \
    --allow-global-access

9. Skonfiguruj DNS

W tej sekcji utworzymy strefę prywatną i zestaw rekordów DNS z zasadą routingu przełączania awaryjnego.

Tworzenie prywatnej strefy DNS

Za pomocą polecenia gcloud dns managed-zones create utwórz strefę prywatną dla domeny example.com. Użyjemy tej strefy do utworzenia zestawu rekordów zasobów z zasadą routingu przełączania awaryjnego. Uruchom to polecenie w Cloud Shell

Polecenia

gcloud dns managed-zones create example-com \
--dns-name example.com. --description="My private zone" \
--visibility=private --networks my-vpc 

Tworzenie rekordu DNS z zasadą routingu przełączania awaryjnego

Utwórz rekord DNS z zasadą routingu przełączania awaryjnego za pomocą polecenia gcloud dns record-sets create. Podstawowym miejscem docelowym jest system równoważenia obciążenia w regionie REGION_1. Cloud DNS obsługuje tylko cele kopii zapasowych oparte na danych geograficznych, a zbiór kopii zapasowych to zasada geolokalizacji z systemem równoważenia obciążenia REGION_2 – miejscem docelowym zarówno w regionie REGION_1, jak i REGION_2. Uruchom te polecenia w Cloud Shell

Polecenie

gcloud dns record-sets create failover.example.com --ttl 5 --type A \
--routing-policy-type=FAILOVER \
--routing-policy-primary-data=$REGION_1-ilb \
--routing-policy-backup-data="${REGION_1}=${REGION_2}-ilb;${REGION_2}=${REGION_2}-ilb" \
--routing-policy-backup-data-type=GEO \
--zone=example-com \
--enable-health-checking

Przykład wyjściowy

NAME: failover.example.com.
TYPE: A
TTL: 5
DATA: Primary: "10.1.0.4, 80, tcp, https://www.googleapis.com/compute/v1/projects/my-clouddns-codelab/global/networks/my-vpc, my-clouddns-codelab, us-west1, regionalL4ilb" Backup: us-west1: "10.2.0.3, 80, tcp, https://www.googleapis.com/compute/v1/projects/my-clouddns-codelab/global/networks/my-vpc, my-clouddns-codelab, us-east4, regionalL4ilb";us-east4: "10.2.0.3, 80, tcp, https://www.googleapis.com/compute/v1/projects/my-clouddns-codelab/global/networks/my-vpc, my-clouddns-codelab, us-east4, regionalL4ilb"

10. Testowanie rozpoznawania nazw DNS

Zanim przetestujemy konfigurację przełączania awaryjnego, zwróćmy uwagę na adresy IP obu wewnętrznych systemów równoważenia obciążenia. Uruchom podane niżej polecenia w Cloud Shell.

Polecenie

gcloud compute forwarding-rules list --filter="name:($REGION_1-ilb $REGION_2-ilb)"

Przykład wyjściowy

W tym przykładzie sieć us-west1-ilb ma adres IP 10.1.0.4, a us-east4-ilb ma adres IP 10.2.0.3

NAME: us-west1-ilb
REGION: us-west1
IP_ADDRESS: 10.1.0.4
IP_PROTOCOL: TCP
TARGET: us-west1/backendServices/us-west1-backend-service

NAME: us-east4-ilb
REGION: us-east4
IP_ADDRESS: 10.2.0.3
IP_PROTOCOL: TCP
TARGET: us-east4/backendServices/us-east4-backend-service

Zalogujemy się teraz do instancji klienta i przetestujemy rozpoznawanie nazw DNS. W konsoli internetowej przejdź do pozycji „Compute Engine | „Instancje maszyn wirtualnych”

5c824940bf414501.png

Kliknij przycisk SSH, aby zalogować się do instancji klienta z poziomu konsoli.

b916eb32c60a4156.png

Jesteśmy już w maszynie wirtualnej klienta. Użyj polecenia dig, aby znaleźć nazwę domeny failover.example.com.

Pętla jest skonfigurowana tak, aby polecenie było uruchamiane 10 razy z wyłącznikiem czasowym ustawionym na 6 sekund.

Polecenie

for i in {1..10}; do echo $i; dig failover.example.com +short; sleep 6; done

Wartość TTL w rekordzie DNS jest ustawiona na 5 sekund, dlatego dodano 6-sekundowy wyłącznik czasowy. Wyłącznik czasowy sprawia, że dla każdego żądania DNS otrzymasz niebuforowaną odpowiedź DNS. Wykonanie tego polecenia zajmie około jednej minuty.

W danych wyjściowych zobaczysz adres IP systemu równoważenia obciążenia w podstawowym zbiorze rekordu zasobu. W naszej konfiguracji będzie to adres IP systemu równoważenia obciążenia w regionie us-west1.

11. Testowanie przełączania awaryjnego

Przeprowadzimy symulację przełączania awaryjnego, usuwając tag sieci z maszyny wirtualnej REGION_1. Spowoduje to zablokowanie dostępu do portu 80 i w związku z tym kontrole stanu zaczną kończyć się niepowodzeniem.

Usuwanie tagu sieci

Aby usunąć tag sieci z maszyny wirtualnej, użyj polecenia gcloud compute instances remove-tags. Uruchom to polecenie w Cloud Shell

Polecenie

gcloud compute instances remove-tags $REGION_1-instance \
--zone=$REGION_1_ZONE --tags=allow-http

Kontrola stanu zakończy się niepowodzeniem za 10 sekund. Ponownie uruchom test rozpoznawania nazw DNS.

Rozwiązywanie nazw DNS

W instancji klienta uruchom następujące polecenie

Polecenie

for i in {1..10}; do echo $i; dig failover.example.com +short; sleep 6; done

W danych wyjściowych zobaczysz adres IP systemu równoważenia obciążenia w zestawie kopii zapasowej rekordu zasobu. W naszej konfiguracji będzie to adres IP systemu równoważenia obciążenia w regionie us-east4.

12. Sprawdzanie przepływu ruchu

Domyślnie zasada przełączania awaryjnego zwraca adres IP głównego punktu końcowego dla wszystkich żądań DNS i zwraca zapasowe adresy IP tylko wtedy, gdy podstawowy punkt końcowy nie przejdzie kontroli stanu. Cloud DNS umożliwia użytkownikom skonfigurowanie współczynnika dryfu, co umożliwia Cloud DNS wysyłanie części ruchu do celów kopii zapasowych, nawet jeśli cele główne są sprawne. Procent musi mieć wartość z zakresu od 0 do 1. Wartość domyślna to 0.

Aby to przetestować, dodajmy tag sieci z powrotem do serwera WWW REGION_1.

Dodaj tag sieci

Dodaj tag z powrotem do maszyny wirtualnej serwera WWW, aby umożliwić ruch HTTP do maszyny wirtualnej regionu głównego. Uruchom podane niżej polecenie w Cloud Shell.

Polecenie

gcloud compute instances add-tags $REGION_1-instance \
--zone $REGION_1_ZONE --tags allow-http

Kontrole stanu zostaną zaliczone w ciągu 10 sekund

Sprawdź, czy rozpoznawanie nazw DNS wskazuje podstawowy system równoważenia obciążenia. W naszej konfiguracji będzie to adres IP systemu równoważenia obciążenia w regionie us-west1.

W instancji klienta uruchom następujące polecenie

Polecenie

dig +short failover.example.com

Aktualizowanie rekordu DNS

Teraz zmodyfikujemy rekord DNS domeny failover.example.com, aby spływać 30% ruchu do zestawu kopii zapasowych, nawet jeśli podstawowy nie ma problemów. Uruchom to polecenie w Cloud Shell

Polecenie

gcloud dns record-sets update failover.example.com --ttl 30 --type A \
--routing-policy-type=FAILOVER \
--routing-policy-primary-data=$REGION_1-ilb \
--routing-policy-backup-data="${REGION_1}=${REGION_2}-ilb;${REGION_2}=${REGION_2}-ilb" \
--routing-policy-backup-data-type=GEO \
--zone=example-com --enable-health-checking \
--backup-data-trickle-ratio=0.3

Rozwiązywanie nazw DNS

Uruchom to polecenie z klienckiej maszyny wirtualnej. Zauważysz, że rekord DNS failover.example.com przejdzie pod adres IP podstawowego systemu równoważenia obciążenia ok. przez 70% czasu i na adres IP zapasowego systemu równoważenia obciążenia, ok. W 30% przypadków.

for i in {1..10}; do echo $i; dig failover.example.com +short; sleep 6; done

13. Procedura czyszczenia

Aby wyczyścić zasoby używane w tym module, uruchom w CloudShell te polecenia

gcloud dns record-sets delete failover.example.com --type=A \
--zone=example-com --quiet

gcloud dns managed-zones delete example-com --quiet

gcloud compute forwarding-rules delete $REGION_1-ilb \
--region=$REGION_1 --quiet

gcloud compute forwarding-rules delete $REGION_2-ilb \
--region=$REGION_2 --quiet

gcloud compute backend-services delete $REGION_1-backend-service \
--region=$REGION_1 --quiet

gcloud compute backend-services delete $REGION_2-backend-service \
--region=$REGION_2 --quiet

gcloud compute health-checks delete http-hc --quiet

gcloud compute instances delete client-instance --zone=$REGION_1_ZONE --quiet

gcloud compute instance-groups unmanaged delete $REGION_1-instance-group \
--zone=$REGION_1_ZONE --quiet

gcloud compute instance-groups unmanaged delete $REGION_2-instance-group \
--zone=$REGION_2_ZONE --quiet

gcloud compute instances delete $REGION_1-instance \
--zone=$REGION_1_ZONE --quiet

gcloud compute instances delete $REGION_2-instance \
--zone=$REGION_2_ZONE --quiet

gcloud compute routers nats delete $REGION_1-nat-gw \
--router=$REGION_1-cloudrouter --region=$REGION_1 --quiet

gcloud compute routers nats delete $REGION_2-nat-gw \
--router=$REGION_2-cloudrouter --region=$REGION_2 --quiet

gcloud compute routers delete $REGION_1-cloudrouter \
--region=$REGION_1 --quiet

gcloud compute routers delete $REGION_2-cloudrouter \
--region=$REGION_2 --quiet

gcloud compute firewall-rules delete allow-ssh allow-http-lb-hc --quiet

gcloud compute networks subnets delete $REGION_1-subnet \
--region=$REGION_1 --quiet

gcloud compute networks subnets delete $REGION_2-subnet \
--region=$REGION_2 --quiet

gcloud compute networks delete my-vpc --quiet

14. Gratulacje

Gratulujemy! Udało Ci się wdrożyć i przetestować zasadę routingu przełączania awaryjnego Cloud DNS

Omówione zagadnienia

  • Jak skonfigurować zasadę routingu przełączania awaryjnego Cloud DNS
  • Przetestuj przełączanie awaryjne DNS
  • Jak skierować ruch do zestawu kopii zapasowych

Co dalej?

  • Spróbuj skonfigurować wiele adresów IP dla zestawów aktywnych i kopii zapasowych
  • Spróbuj dodać wiele maszyn wirtualnych backendu do niezarządzanych grup instancji
  • Spróbuj skonfigurować wiele systemów równoważenia obciążenia w różnych regionach dla zasady geolokalizacji w zestawie kopii zapasowych.

Więcej informacji

https://cloud.google.com/dns/docs/zones/manage-routing-policies