Udostępnij za pośrednictwem


Samouczek: konfigurowanie grup dostępności dla programu SQL Server na maszynach wirtualnych RHEL na platformie Azure

Dotyczy:program SQL Server na maszynie wirtualnej platformy Azure

Uwaga

W tym samouczku używamy programu SQL Server 2017 (14.x) z systemem RHEL 7.6, ale w celu skonfigurowania wysokiej dostępności można użyć programu SQL Server 2019 (15.x) w systemie RHEL 7 lub RHEL 8. Polecenia służące do konfigurowania klastra Pacemaker i zasobów grupy dostępności uległy zmianie w systemie RHEL 8. Aby uzyskać więcej informacji na temat prawidłowych poleceń, zapoznaj się z artykułem Tworzenie zasobu grupy dostępności i zasobów grupy dostępności RHEL 8.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Tworzenie nowej grupy zasobów, zestawu dostępności i maszyn wirtualnych z systemem Linux
  • Włącz wysoką dostępność (HA)
  • Utwórz klaster Pacemaker
  • Skonfiguruj agenta fencingowego przez utworzenie urządzenia STONITH
  • Instalowanie programu SQL Server i narzędzi mssql-tools w systemie RHEL
  • Konfigurowanie zawsze włączonej grupy dostępności programu SQL Server
  • Skonfiguruj zasoby grupy dostępności (AG) w klastrze Pacemaker
  • Testowanie przełączenia awaryjnego i agenta ochrony

W tym samouczku do wdrażania zasobów na platformie Azure jest używany interfejs wiersza polecenia platformy Azure.

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Wymagania wstępne

  • Ten artykuł wymaga wersji 2.0.30 lub nowszej interfejsu wiersza polecenia platformy Azure. W przypadku korzystania z usługi Azure Cloud Shell najnowsza wersja jest już zainstalowana.

Tworzenie grupy zasobów

Jeśli masz więcej niż jedną subskrypcję, ustaw subskrypcję, do której chcesz wdrożyć te zasoby.

Użyj następującego polecenia, aby utworzyć grupę <resourceGroupName> zasobów w regionie. Zastąp <resourceGroupName> wybraną nazwą. Korzystamy z East US 2 tego samouczka. Aby uzyskać więcej informacji, zobacz następujący przewodnik Szybki start.

az group create --name <resourceGroupName> --location eastus2

Tworzenie zestawu dostępności

Następnym krokiem jest utworzenie zestawu dostępności. Uruchom następujące polecenie w usłudze Azure Cloud Shell i zastąp ciąg <resourceGroupName> nazwą grupy zasobów. Wybierz nazwę elementu <availabilitySetName>.

az vm availability-set create \
    --resource-group <resourceGroupName> \
    --name <availabilitySetName> \
    --platform-fault-domain-count 2 \
    --platform-update-domain-count 2

Po zakończeniu polecenia należy uzyskać następujące wyniki:

{
  "id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/availabilitySets/<availabilitySetName>",
  "location": "eastus2",
  "name": "<availabilitySetName>",
  "platformFaultDomainCount": 2,
  "platformUpdateDomainCount": 2,
  "proximityPlacementGroup": null,
  "resourceGroup": "<resourceGroupName>",
  "sku": {
    "capacity": null,
    "name": "Aligned",
    "tier": null
  },
  "statuses": null,
  "tags": {},
  "type": "Microsoft.Compute/availabilitySets",
  "virtualMachines": []
}

Tworzenie maszyn wirtualnych RHEL wewnątrz zestawu dostępności

Ostrzeżenie

Jeśli wybierzesz obraz RHEL w modelu zapłać-na-bieżąco (PAYG) i skonfigurujesz wysoką dostępność (HA), może być konieczne zarejestrowanie subskrypcji. Może to spowodować dwukrotne zapłacenie za subskrypcję, ponieważ zostanie naliczona opłata za subskrypcję microsoft Azure RHEL dla maszyny wirtualnej oraz subskrypcję platformy Red Hat. Aby uzyskać więcej informacji, zobacz https://access.redhat.com/solutions/2458541.

Aby uniknąć "podwójnego naliczania opłat", użyj obrazu RHEL HA podczas tworzenia maszyny wirtualnej platformy Azure. Obrazy udostępniane jako obrazy RHEL-HA są także obrazami PAYG z wcześniej włączonym repozytorium HA.

  1. Pobierz listę obrazów maszyn wirtualnych, które oferują system RHEL z wysoką dostępnością:

    az vm image list --all --offer "RHEL-HA"
    

    Powinny zostać wyświetlone następujące wyniki:

    [
      {
    "offer": "RHEL-HA",
    "publisher": "RedHat",
    "sku": "7.4",
    "urn": "RedHat:RHEL-HA:7.4:7.4.2019062021",
    "version": "7.4.2019062021"
       },
       {
    "offer": "RHEL-HA",
    "publisher": "RedHat",
    "sku": "7.5",
    "urn": "RedHat:RHEL-HA:7.5:7.5.2019062021",
    "version": "7.5.2019062021"
        },
        {
    "offer": "RHEL-HA",
    "publisher": "RedHat",
    "sku": "7.6",
    "urn": "RedHat:RHEL-HA:7.6:7.6.2019062019",
    "version": "7.6.2019062019"
         },
         {
    "offer": "RHEL-HA",
    "publisher": "RedHat",
    "sku": "8.0",
    "urn": "RedHat:RHEL-HA:8.0:8.0.2020021914",
    "version": "8.0.2020021914"
         },
         {
    "offer": "RHEL-HA",
    "publisher": "RedHat",
    "sku": "8.1",
    "urn": "RedHat:RHEL-HA:8.1:8.1.2020021914",
    "version": "8.1.2020021914"
          },
          {
    "offer": "RHEL-HA",
    "publisher": "RedHat",
    "sku": "80-gen2",
    "urn": "RedHat:RHEL-HA:80-gen2:8.0.2020021915",
    "version": "8.0.2020021915"
           },
           {
    "offer": "RHEL-HA",
    "publisher": "RedHat",
    "sku": "81_gen2",
    "urn": "RedHat:RHEL-HA:81_gen2:8.1.2020021915",
    "version": "8.1.2020021915"
           }
    ]
    

    W tym samouczku wybieramy obraz RedHat:RHEL-HA:7.6:7.6.2019062019 dla przykładu RHEL 7 i obraz RedHat:RHEL-HA:8.1:8.1.2020021914 dla przykładu RHEL 8.

    Możesz również wybrać preinstalację programu SQL Server 2019 (15.x) na obrazach RHEL8-HA. Aby uzyskać listę tych obrazów, uruchom następujące polecenie:

    az vm image list --all --offer "sql2019-rhel8"
    

    Powinny zostać wyświetlone następujące wyniki:

    [
       {
          "offer": "sql2019-rhel8",
          "publisher": "MicrosoftSQLServer",
          "sku": "enterprise",
          "urn": "MicrosoftSQLServer:sql2019-rhel8:enterprise:15.0.200317",
          "version": "15.0.200317"
       },
       {
          "offer": "sql2019-rhel8",
          "publisher": "MicrosoftSQLServer",
          "sku": "enterprise",
          "urn": "MicrosoftSQLServer:sql2019-rhel8:enterprise:15.0.200512",
          "version": "15.0.200512"
       },
       {
          "offer": "sql2019-rhel8",
          "publisher": "MicrosoftSQLServer",
          "sku": "sqldev",
          "urn": "MicrosoftSQLServer:sql2019-rhel8:sqldev:15.0.200317",
          "version": "15.0.200317"
       },
       {
          "offer": "sql2019-rhel8",
          "publisher": "MicrosoftSQLServer",
          "sku": "sqldev",
          "urn": "MicrosoftSQLServer:sql2019-rhel8:sqldev:15.0.200512",
          "version": "15.0.200512"
       },
       {
          "offer": "sql2019-rhel8",
          "publisher": "MicrosoftSQLServer",
          "sku": "standard",
          "urn": "MicrosoftSQLServer:sql2019-rhel8:standard:15.0.200317",
          "version": "15.0.200317"
       },
       {
          "offer": "sql2019-rhel8",
          "publisher": "MicrosoftSQLServer",
          "sku": "standard",
          "urn": "MicrosoftSQLServer:sql2019-rhel8:standard:15.0.200512",
          "version": "15.0.200512"
       }
    ]
    

    Jeśli użyjesz jednego z powyższych obrazów do utworzenia maszyn wirtualnych, program SQL Server 2019 (15.x) jest wstępnie zainstalowany. Pomiń sekcję Instalowanie programu SQL Server i mssql-tools zgodnie z opisem w tym artykule.

    Ważne

    Aby skonfigurować grupę dostępności, nazwy maszyn muszą być mniejsze niż 15 znaków. Nazwa użytkownika nie może zawierać wyższej litery, a hasła muszą zawierać więcej niż 12 znaków.

  2. Chcemy utworzyć 3 maszyny wirtualne w zestawie dostępności. Zastąp te wartości w następującym poleceniu:

    • <resourceGroupName>
    • <VM-basename>
    • <availabilitySetName>
    • <VM-Size> — Przykładem może być "Standard_D16_v3"
    • <username>
    • <password>
    for i in `seq 1 3`; do
           az vm create \
             --resource-group <resourceGroupName> \
             --name <VM-basename>$i \
             --availability-set <availabilitySetName> \
             --size "<VM-Size>"  \
             --image "RedHat:RHEL-HA:7.6:7.6.2019062019" \
             --admin-username "<username>" \
             --admin-password "<password>" \
             --authentication-type all \
             --generate-ssh-keys
    done
    

Powyższe polecenie tworzy maszyny wirtualne i tworzy domyślną sieć wirtualną dla tych maszyn wirtualnych. Aby uzyskać więcej informacji na temat różnych konfiguracji, zobacz artykuł az vm create .

Wyniki powinny być podobne do następujących po zakończeniu polecenia dla każdej maszyny wirtualnej:

{
  "fqdns": "",
  "id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<VM1>",
  "location": "eastus2",
  "macAddress": "<Some MAC address>",
  "powerState": "VM running",
  "privateIpAddress": "<IP1>",
  "publicIpAddress": "",
  "resourceGroup": "<resourceGroupName>",
  "zones": ""
}

Ważne

Domyślny obraz utworzony za pomocą powyższego polecenia domyślnie tworzy dysk systemu operacyjnego 32 GB. Możesz mieć brak miejsca przy tej instalacji domyślnej. Możesz użyć następującego parametru dodanego do powyższego az vm create polecenia, aby utworzyć dysk systemu operacyjnego z 128 GB jako przykład: --os-disk-size-gb 128.

Następnie można skonfigurować Menedżera woluminów logicznych (LVM), jeśli chcesz rozwinąć odpowiednie woluminy folderów, aby uwzględnić instalację.

Testowanie połączenia z utworzonymi maszynami wirtualnymi

Połącz się z maszyną wirtualną VM1 lub innymi maszynami wirtualnymi przy użyciu następującego polecenia w usłudze Azure Cloud Shell. Jeśli nie możesz znaleźć adresów IP maszyny wirtualnej, postępuj zgodnie z tym przewodnikiem Szybki start w usłudze Azure Cloud Shell.

ssh <username>@publicipaddress

Jeśli połączenie zakończy się pomyślnie, powinny zostać wyświetlone następujące dane wyjściowe reprezentujące terminal systemu Linux:

[<username>@<VM1> ~]$

Wpisz exit , aby opuścić sesję SSH.

Włącz wysoką dostępność

Ważne

Aby ukończyć tę część samouczka, musisz mieć subskrypcję dla systemu RHEL i dodatek wysokiej dostępności. Jeśli używasz obrazu zalecanego w poprzedniej sekcji, nie musisz rejestrować innej subskrypcji.

Połącz się z każdym węzłem VM i postępuj zgodnie z tym przewodnikiem, aby włączyć wysoką dostępność (HA). Aby uzyskać więcej informacji, zobacz włączanie subskrypcji wysokiej dostępności dla systemu RHEL.

Napiwek

Łatwiej będzie otworzyć sesję SSH dla każdej maszyny wirtualnej jednocześnie, ponieważ te same polecenia będą musiały być uruchamiane na każdej maszynie wirtualnej w całym artykule.

Jeśli kopiujesz i wklejasz wiele sudo poleceń i zostanie wyświetlony monit o podanie hasła, dodatkowe polecenia nie zostaną uruchomione. Uruchom każde polecenie oddzielnie.

  1. Aby otworzyć porty zapory programu Pacemaker, uruchom następujące polecenia na każdej maszynie wirtualnej:

    sudo firewall-cmd --permanent --add-service=high-availability
    sudo firewall-cmd --reload
    
  2. Zaktualizuj i zainstaluj pakiety Pacemaker na wszystkich węzłach przy użyciu następujących poleceń:

    Uwaga

    Narzędzie nmap jest instalowane w ramach tego bloku poleceń jako narzędzie do znajdowania dostępnych adresów IP w sieci. Nie musisz instalować nmap, ale będzie ona przydatna w dalszej części tego samouczka.

    sudo yum update -y
    sudo yum install -y pacemaker pcs fence-agents-all resource-agents fence-agents-azure-arm nmap
    sudo reboot
    
  3. Ustaw hasło dla domyślnego użytkownika, który jest tworzony podczas instalowania pakietów Pacemaker. Użyj tego samego hasła we wszystkich węzłach.

    sudo passwd hacluster
    
  4. Aby otworzyć plik hosts i skonfigurować rozpoznawanie nazw hostów, użyj następującego polecenia. Aby uzyskać więcej informacji, przeczytaj Konfigurowanie AG o konfigurowaniu pliku hosts.

    sudo vi /etc/hosts
    

    W edytorze vi wprowadź i, aby wstawić tekst, a w pustym wierszu dodaj prywatny adres IP odpowiedniej maszyny wirtualnej. Następnie dodaj nazwę maszyny wirtualnej po spacji obok adresu IP. Każdy wiersz powinien mieć oddzielny wpis.

    <IP1> <VM1>
    <IP2> <VM2>
    <IP3> <VM3>
    

    Ważne

    Zalecamy użycie prywatnego adresu IP w poprzednim przykładzie. Użycie publicznego adresu IP w tej konfiguracji spowoduje niepowodzenie instalacji i nie zalecamy uwidaczniania maszyny wirtualnej w sieciach zewnętrznych.

    Aby zamknąć edytor vi , najpierw naciśnij Esc , a następnie wprowadź polecenie :wq , aby zapisać plik i zamknąć.

Tworzenie klastra Pacemaker

W tej sekcji włączysz i uruchomisz usługę pcsd, a następnie skonfigurujesz klaster. W przypadku programu SQL Server w systemie Linux zasoby klastra nie są tworzone automatycznie. Należy włączyć i ręcznie utworzyć zasoby programu Pacemaker. Aby uzyskać więcej informacji, zobacz artykuł dotyczący konfigurowania klastra w trybie przełączania awaryjnego dla systemu RHEL.

Włącz i uruchom usługę pcsd oraz Pacemaker

  1. Uruchom polecenia na wszystkich węzłach. Te komendy umożliwiają węzłom ponowne dołączenie do klastra po ponownym uruchomieniu każdego węzła.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  2. Usuń dowolną istniejącą konfigurację klastra ze wszystkich węzłów. Uruchom następujące polecenie:

    sudo pcs cluster destroy
    sudo systemctl enable pacemaker
    
  3. W węźle podstawowym uruchom następujące polecenia, aby skonfigurować klaster.

    • Podczas uruchamiania pcs cluster auth polecenia w celu uwierzytelnienia węzłów klastra zostanie wyświetlony monit o podanie hasła. Wprowadź hasło dla wcześniej utworzonego użytkownika hacluster.

    RHEL7

    sudo pcs cluster auth <VM1> <VM2> <VM3> -u hacluster
    sudo pcs cluster setup --name az-hacluster <VM1> <VM2> <VM3> --token 30000
    sudo pcs cluster start --all
    sudo pcs cluster enable --all
    

    RHEL8

    W przypadku systemu RHEL 8 należy oddzielnie uwierzytelnić węzły. Wprowadź ręcznie nazwę użytkownika i hasło dla hacluster po wyświetleniu monitu.

    sudo pcs host auth <node1> <node2> <node3>
    sudo pcs cluster setup <clusterName> <node1> <node2> <node3>
    sudo pcs cluster start --all
    sudo pcs cluster enable --all
    
  4. Uruchom następujące polecenie, aby sprawdzić, czy wszystkie węzły są w trybie online.

    sudo pcs status
    

    RHEL 7

    Jeśli wszystkie węzły są w trybie online, zostaną wyświetlone dane wyjściowe podobne do następującego przykładu:

    Cluster name: az-hacluster
    
    WARNINGS:
    No stonith devices and stonith-enabled is not false
    
    Stack: corosync
    Current DC: <VM2> (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum
    Last updated: Fri Aug 23 18:27:57 2019
    Last change: Fri Aug 23 18:27:56 2019 by hacluster via crmd on <VM2>
    
    3 nodes configured
    0 resources configured
    
    Online: [ <VM1> <VM2> <VM3> ]
    
    No resources
    
    Daemon Status:
          corosync: active/enabled
          pacemaker: active/enabled
          pcsd: active/enabled
    

    RHEL 8

    Cluster name: az-hacluster
    
    WARNINGS:
    No stonith devices and stonith-enabled is not false
    
    Cluster Summary:
      * Stack: corosync
      * Current DC: <VM2> (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum
      * Last updated: Fri Aug 23 18:27:57 2019
      * Last change: Fri Aug 23 18:27:56 2019 by hacluster via crmd on <VM2>
      * 3 nodes configured
      * 0 resource instances configured
    
    Node List:
      * Online: [ <VM1> <VM2> <VM3> ]
    
    Full List of Resources:
      * No resources
    
    Daemon Status:
      * corosync: active/enabled
      * pacemaker: active/enabled
      * pcsd: active/enabled
    
  5. Ustaw oczekiwaną liczbę głosów w działającym klastrze na 3. To polecenie ma wpływ tylko na klaster na żywo i nie zmienia plików konfiguracji.

    Na wszystkich węzłach ustaw konfigurację oczekiwanych głosów za pomocą następującego polecenia:

    sudo pcs quorum expected-votes 3
    

Konfiguracja agenta fencing

Aby skonfigurować agenta typu fencing, instrukcje w tym samouczku zostały zmodyfikowane. Aby uzyskać więcej informacji, zobacz tworzenie urządzenia STONITH.

Sprawdź wersję agenta usługi Azure Fence, aby upewnić się, że został zaktualizowany. Użyj następującego polecenia:

sudo yum info fence-agents-azure-arm

Powinieneś zobaczyć podobny wynik do poniższego przykładu.

Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
Installed Packages
Name        : fence-agents-azure-arm
Arch        : x86_64
Version     : 4.2.1
Release     : 11.el7_6.8
Size        : 28 k
Repo        : installed
From repo   : rhel-ha-for-rhel-7-server-eus-rhui-rpms
Summary     : Fence agent for Azure Resource Manager
URL         : https://github.com/ClusterLabs/fence-agents
License     : GPLv2+ and LGPLv2+
Description : The fence-agents-azure-arm package contains a fence agent for Azure instances.

Rejestrowanie nowej aplikacji w usłudze Microsoft Entra ID

Aby zarejestrować nową aplikację w usłudze Microsoft Entra ID (dawniej Azure Active Directory), wykonaj następujące kroki:

  1. Przejdź do https://portal.azure.com.
  2. Otwórz okienko Właściwości Microsoft Entra ID i zanotuj Tenant ID.
  3. Wybierz pozycję Rejestracje aplikacji.
  4. Wybierz opcjęNowa rejestracja.
  5. Wprowadź nazwę taką jak <resourceGroupName>-app. W przypadku obsługiwanych typów kont wybierz pozycję Konta tylko w tym katalogu organizacyjnym (tylko Microsoft — pojedyncza dzierżawa).
  6. Wybierz Sieć Web dla URI przekierowania, a następnie wprowadź adres URL (na przykład http://localhost) i wybierz Dodaj. Adres URL logowania może być dowolnym prawidłowym adresem URL. Po zakończeniu wybierz pozycję Zarejestruj.
  7. Wybierz pozycję Certyfikaty i wpisy tajne dla nowej rejestracji aplikacji, a następnie wybierz pozycję Nowy klucz tajny klienta.
  8. Wprowadź opis nowego klucza (klucz tajny klienta), a następnie wybierz pozycję Dodaj.
  9. Zapisz wartość tajemnicy. Jest on używany jako hasło dla jednostki usługi.
  10. Wybierz Przegląd. Zapisz identyfikator aplikacji. Jest używana jako nazwa użytkownika (ID logowania w poniższych krokach) głównej usługi.

Tworzenie roli niestandardowej dla agenta ogrodzenia

Postępuj zgodnie z samouczkiem, aby utworzyć rolę niestandardową platformy Azure przy użyciu Azure CLI.

Plik JSON powinien wyglądać podobnie do poniższego przykładu:

  • Zastąp ciąg <username> wybraną nazwą. Należy unikać duplikowania podczas tworzenia tej definicji roli.
  • Zastąp <subscriptionId> identyfikatorem subskrypcji Azure.
{
  "Name": "Linux Fence Agent Role-<username>",
  "Id": null,
  "IsCustom": true,
  "Description": "Allows to power-off and start virtual machines",
  "Actions": [
    "Microsoft.Compute/*/read",
    "Microsoft.Compute/virtualMachines/powerOff/action",
    "Microsoft.Compute/virtualMachines/start/action"
  ],
  "NotActions": [
  ],
  "AssignableScopes": [
    "/subscriptions/<subscriptionId>"
  ]
}

Aby dodać rolę, uruchom następujące polecenie:

  • Zastąp <filename> nazwą pliku.
  • Jeśli wykonujesz polecenie ze ścieżki innej niż folder, do którego jest zapisywany plik, dołącz ścieżkę folderu pliku w poleceniu .
az role definition create --role-definition "<filename>.json"

Powinny zostać wyświetlone następujące dane wyjściowe:

{
  "assignableScopes": [
    "/subscriptions/<subscriptionId>"
  ],
  "description": "Allows to power-off and start virtual machines",
  "id": "/subscriptions/<subscriptionId>/providers/Microsoft.Authorization/roleDefinitions/<roleNameId>",
  "name": "<roleNameId>",
  "permissions": [
    {
      "actions": [
        "Microsoft.Compute/*/read",
        "Microsoft.Compute/virtualMachines/powerOff/action",
        "Microsoft.Compute/virtualMachines/start/action"
      ],
      "dataActions": [],
      "notActions": [],
      "notDataActions": []
    }
  ],
  "roleName": "Linux Fence Agent Role-<username>",
  "roleType": "CustomRole",
  "type": "Microsoft.Authorization/roleDefinitions"
}

Przypisz rolę niestandardową do podmiotu usługi

Przypisz jednostce usługi utworzoną w ostatnim kroku rolę niestandardową Linux Fence Agent Role-<username>. Nie używaj już roli Właściciel.

  1. Przejdź do strony https://portal.azure.com
  2. Otwórz okienko Wszystkie zasoby
  3. Wybierz maszynę wirtualną pierwszego węzła klastra
  4. Wybierz pozycję Kontrola dostępu (IAM)
  5. Wybierz Dodaj przypisanie roli
  6. Wybierz rolę Linux Fence Agent Role-<username> z listy Rola
  7. Na liście Wybierz wprowadź nazwę utworzonej wcześniej aplikacji.<resourceGroupName>-app
  8. Wybierz pozycję Zapisz
  9. Powtórz te kroki dla wszystkich węzłów klastra.

Tworzenie urządzeń STONITH

Uruchom następujące polecenia w węźle 1:

  • Zastąp <ApplicationID> wartością identyfikatora z rejestracji aplikacji.
  • Zamień <password> na wartość z sekretu klienta.
  • Zastąp element <resourceGroupName> grupą zasobów z subskrypcji używanej na potrzeby tego samouczka.
  • Zastąp <tenantID> oraz <subscriptionId> z subskrypcji platformy Azure.
sudo pcs property set stonith-timeout=900
sudo pcs stonith create rsc_st_azure fence_azure_arm login="<ApplicationID>" passwd="<password>" resourceGroup="<resourceGroupName>" tenantId="<tenantID>" subscriptionId="<subscriptionId>" power_timeout=240 pcmk_reboot_timeout=900

Ponieważ dodaliśmy już regułę do zapory, aby zezwolić na korzystanie z usługi wysokiej dostępności (--add-service=high-availability), nie ma potrzeby otwierania następujących portów zapory na wszystkich węzłach: 2224, 3121, 21064, 5405. Jeśli jednak występują jakiekolwiek problemy z połączeniem z wysoką dostępnością, użyj następującego polecenia, aby otworzyć te porty skojarzone z wysoką dostępnością.

Napiwek

Opcjonalnie możesz dodać wszystkie porty w tym samouczku jednocześnie, aby zaoszczędzić trochę czasu. Porty, które należy otworzyć, zostały wyjaśnione w odpowiednich sekcjach. Jeśli chcesz teraz dodać wszystkie porty, dodaj dodatkowe porty: 1433 i 5022.

sudo firewall-cmd --zone=public --add-port=2224/tcp --add-port=3121/tcp --add-port=21064/tcp --add-port=5405/tcp --permanent
sudo firewall-cmd --reload

Instalowanie programu SQL Server i narzędzi mssql-tools

Uwaga

Jeśli utworzono maszyny wirtualne z wstępnie zainstalowanym programem SQL Server 2019 (15.x) w systemie RHEL8-HA, możesz pominąć poniższe kroki, aby zainstalować program SQL Server i narzędzia mssql-tools, a następnie uruchomić sekcję Konfigurowanie grupy dostępności po skonfigurowaniu hasła sa na wszystkich maszynach wirtualnych, uruchamiając polecenie sudo /opt/mssql/bin/mssql-conf set-sa-password na wszystkich maszynach wirtualnych.

Użyj poniższej sekcji, aby zainstalować program SQL Server i narzędzia mssql-tools na maszynach wirtualnych. Możesz wybrać jeden z poniższych przykładów, aby zainstalować program SQL Server 2017 (14.x) w systemie RHEL 7 lub SQL Server 2019 (15.x) w systemie RHEL 8. Wykonaj każdą z tych akcji na wszystkich węzłach. Aby uzyskać więcej informacji, zobacz Instalowanie programu SQL Server na maszynie wirtualnej z systemem Red Hat.

Instalowanie programu SQL Server na maszynach wirtualnych

Do zainstalowania programu SQL Server służą następujące polecenia:

RHEL 7 z programem SQL Server 2017

sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repo
sudo yum install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup
sudo yum install mssql-server-ha

RHEL 8 z programem SQL Server 2019

sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-2019.repo
sudo yum install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup
sudo yum install mssql-server-ha

Otwórz port zapory 1433 dla połączeń zdalnych

Aby połączyć się zdalnie, musisz otworzyć port 1433 na maszynie wirtualnej. Użyj następujących poleceń, aby otworzyć port 1433 w zaporze każdej maszyny wirtualnej:

sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent
sudo firewall-cmd --reload

Instalowanie narzędzi wiersza polecenia programu SQL Server

Następujące polecenia służą do instalowania narzędzi wiersza polecenia programu SQL Server. Aby uzyskać więcej informacji, zobacz instalowanie narzędzi wiersza polecenia programu SQL Server.

RHEL 7

sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/7/prod.repo
sudo yum install -y mssql-tools unixODBC-devel

RHEL 8

sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo
sudo yum install -y mssql-tools unixODBC-devel

Uwaga

Dla wygody dodaj /opt/mssql-tools/bin/ do zmiennej środowiskowej PATH. Dzięki temu można uruchamiać narzędzia bez określania pełnej ścieżki. Uruchom następujące polecenia, aby zmodyfikować ścieżkę zarówno dla sesji logowania, jak i sesji interakcyjnych/niezwiązanych z logowaniem:

echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

Sprawdzanie stanu programu SQL Server

Po zakończeniu pracy z konfiguracją możesz sprawdzić stan programu SQL Server i sprawdzić, czy jest on uruchomiony:

systemctl status mssql-server --no-pager

Powinny zostać wyświetlone następujące dane wyjściowe:

● mssql-server.service - Microsoft SQL Server Database Engine
   Loaded: loaded (/usr/lib/systemd/system/mssql-server.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2019-12-05 17:30:55 UTC; 20min ago
     Docs: https://learn.microsoft.com/sql/linux
 Main PID: 11612 (sqlservr)
   CGroup: /system.slice/mssql-server.service
           ├─11612 /opt/mssql/bin/sqlservr
           └─11640 /opt/mssql/bin/sqlservr

Konfigurowanie grupy dostępności

Wykonaj poniższe kroki, aby skonfigurować zawsze włączoną grupę dostępności programu SQL Server dla maszyn wirtualnych. Aby uzyskać więcej informacji, zobacz Konfigurowanie zawsze włączonych grup dostępności programu SQL Server pod kątem wysokiej dostępności w systemie Linux.

Włączanie zawsze włączonych grup dostępności i ponowne uruchamianie programu mssql-server

Włącz zawsze włączone grupy dostępności w każdym węźle, który hostuje wystąpienie programu SQL Server. Następnie uruchom ponownie narzędzie mssql-server. Uruchom następujący skrypt:

sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
sudo systemctl restart mssql-server

Tworzenie certyfikatu

Obecnie nie obsługujemy uwierzytelniania usługi AD w punkcie końcowym grupy dostępności. W związku z tym musimy użyć certyfikatu do szyfrowania punktu końcowego grupy dostępności.

  1. Połącz się ze wszystkimi węzłami przy użyciu programu SQL Server Management Studio (SSMS) lub sqlcmd. Uruchom następujące polecenia, aby włączyć sesję AlwaysOn_health i utworzyć klucz główny:

    Ważne

    Jeśli łączysz się zdalnie z wystąpieniem programu SQL Server, musisz otworzyć port 1433 w zaporze. Należy również zezwolić na połączenia przychodzące do portu 1433 w grupie zabezpieczeń sieciowych dla każdej maszyny wirtualnej. Aby uzyskać więcej informacji, zobacz Tworzenie reguły zabezpieczeń dla ruchu przychodzącego.

    • Zastąp element <password> własnym hasłem.
    ALTER EVENT SESSION  AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
    GO
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
    
  2. Połącz się z repliką podstawową przy użyciu programu SSMS lub sqlcmd. Następujące polecenia tworzą certyfikat w lokalizacji /var/opt/mssql/data/dbm_certificate.cer i klucz prywatny w var/opt/mssql/data/dbm_certificate.pvk podstawowej repliki programu SQL Server:

    • Zastąp element <password> własnym hasłem.
    CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm';
    GO
    
    BACKUP CERTIFICATE dbm_certificate
       TO FILE = '/var/opt/mssql/data/dbm_certificate.cer'
       WITH PRIVATE KEY (
               FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
               ENCRYPTION BY PASSWORD = '<password>'
           );
    GO
    

Zamknij sesję sqlcmd , uruchamiając exit polecenie i wróć do sesji SSH.

Skopiuj certyfikat do replik pomocniczych i utwórz certyfikaty na serwerze

  1. Skopiuj dwa pliki, które zostały utworzone do tej samej lokalizacji na wszystkich serwerach, które będą hostować repliki dostępności.

    Na serwerze podstawowym uruchom następujące scp polecenie, aby skopiować certyfikat na serwery docelowe:

    • Zastąp <username> nazwą użytkownika i <VM2> nazwą docelowej maszyny wirtualnej, której używasz.
    • Uruchom to polecenie dla wszystkich replik pomocniczych.

    Uwaga

    Nie trzeba uruchamiać sudo -i, który zapewnia środowisko root. Możesz po prostu uruchomić polecenie sudo przed każdym poleceniem, tak jak robiliśmy to wcześniej w tym samouczku.

    # The below command allows you to run commands in the root environment
    sudo -i
    
    scp /var/opt/mssql/data/dbm_certificate.* <username>@<VM2>:/home/<username>
    
  2. Na serwerze docelowym uruchom następujące polecenie:

    • Zastąp <username> nazwą użytkownika.
    • Polecenie mv przenosi pliki lub katalog z jednego miejsca do innego.
    • Polecenie chown służy do zmiany właściciela i grupy plików, katalogów lub linków.
    • Wykonaj następujące polecenia dla wszystkich replik pomocniczych.
    sudo -i
    mv /home/<username>/dbm_certificate.* /var/opt/mssql/data/
    cd /var/opt/mssql/data
    chown mssql:mssql dbm_certificate.*
    
  3. Poniższy skrypt języka Transact-SQL tworzy certyfikat z kopii zapasowej utworzonej w podstawowej repliki programu SQL Server. Zaktualizuj skrypt przy użyciu silnych haseł. Hasło odszyfrowywania jest tym samym hasłem, które zostało użyte do utworzenia pliku pvk w poprzednim kroku. Aby utworzyć certyfikat, uruchom następujący skrypt przy użyciu narzędzia sqlcmd lub SSMS na wszystkich serwerach pomocniczych:

    CREATE CERTIFICATE dbm_certificate
        FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer'
        WITH PRIVATE KEY (
        FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
        DECRYPTION BY PASSWORD = '<password>'
                );
    GO
    

Tworzenie punktów końcowych dublowania bazy danych na wszystkich replikach

Uruchom następujący skrypt we wszystkich wystąpieniach programu SQL Server przy użyciu narzędzia sqlcmd lub programu SSMS:

CREATE ENDPOINT [Hadr_endpoint]
    AS TCP (LISTENER_PORT = 5022)
    FOR DATABASE_MIRRORING (
    ROLE = ALL,
    AUTHENTICATION = CERTIFICATE dbm_certificate,
ENCRYPTION = REQUIRED ALGORITHM AES
);
GO

ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;
GO

Tworzenie grupy dostępności

Połącz się z instancją SQL Server, która hostuje replikę podstawową, używając sqlcmd lub SSMS. Uruchom następujące polecenie, aby utworzyć grupę dostępności:

  • Zastąp ag1 wybraną nazwą grupy dostępności.
  • Zastąp wartości <VM1>, <VM2> i <VM3> nazwami wystąpień programu SQL Server hostujących repliki.
CREATE AVAILABILITY GROUP [ag1]
     WITH (DB_FAILOVER = ON, CLUSTER_TYPE = EXTERNAL)
     FOR REPLICA ON
         N'<VM1>'
          WITH (
             ENDPOINT_URL = N'tcp://<VM1>:5022',
             AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
             FAILOVER_MODE = EXTERNAL,
             SEEDING_MODE = AUTOMATIC
             ),
         N'<VM2>'
          WITH (
             ENDPOINT_URL = N'tcp://<VM2>:5022',
             AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
             FAILOVER_MODE = EXTERNAL,
             SEEDING_MODE = AUTOMATIC
             ),
         N'<VM3>'
         WITH(
            ENDPOINT_URL = N'tcp://<VM3>:5022',
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC
            );
GO

ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
GO

Tworzenie loginu SQL Server dla Pacemaker

We wszystkich wystąpieniach SQL Server utwórz login SQL Server dla Pacemaker. Poniższy kod Transact-SQL tworzy login.

  • Zastąp <password> ciąg własnym złożonym hasłem.
USE [master]
GO

CREATE LOGIN [pacemakerLogin] with PASSWORD= N'<password>';
GO

ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemakerLogin];
GO

We wszystkich instancjach programu SQL Server zapamiętaj poświadczenia używane do logowania.

  1. Utwórz plik:

    sudo vi /var/opt/mssql/secrets/passwd
    
  2. Dodaj następujące wiersze do pliku:

    pacemakerLogin
    <password>
    

    Aby zamknąć edytor vi , najpierw naciśnij Esc , a następnie wprowadź polecenie :wq , aby zapisać plik i zamknąć.

  3. Ustaw dostęp do pliku tylko dla użytkownika root.

    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 400 /var/opt/mssql/secrets/passwd
    

Dołączanie replik pomocniczych do grupy dostępności

  1. Aby dołączyć repliki pomocnicze do grupy dostępności (AG), należy otworzyć port 5022 na zaporach sieciowych wszystkich serwerów. Uruchom następujące polecenie w sesji SSH:

    sudo firewall-cmd --zone=public --add-port=5022/tcp --permanent
    sudo firewall-cmd --reload
    
  2. W replikach pomocniczych uruchom następujące polecenia, aby dołączyć je do Grupy dostępności.

    ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
    GO
    
  3. Uruchom następujący skrypt Języka Transact-SQL na replice podstawowej oraz na każdej replice pomocniczej.

    GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::ag1 TO pacemakerLogin;
    GO
    
    GRANT VIEW SERVER STATE TO pacemakerLogin;
    GO
    
  4. Po dołączeniu replik pomocniczych można je zobaczyć w Eksploratorze obiektów SSMS, rozwijając węzeł Always On High Availability:

    Zrzut ekranu przedstawiający repliki dostępności podstawowej i pomocniczej.

Dodawanie bazy danych do grupy dostępności

Postępujmy zgodnie z artykułem dotyczącym konfigurowania grupy dostępności podczas dodawania bazy danych.

W tym kroku są używane następujące polecenia języka Transact-SQL. Uruchom następujące polecenia w repliki podstawowej:

CREATE DATABASE [db1]; -- creates a database named db1
GO

ALTER DATABASE [db1] SET RECOVERY FULL; -- set the database in full recovery model
GO

BACKUP DATABASE [db1] -- backs up the database to disk
   TO DISK = N'/var/opt/mssql/data/db1.bak';
GO

ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1]; -- adds the database db1 to the AG
GO

Sprawdź, czy baza danych została utworzona na serwerach pomocniczych

Na każdej pomocniczej repliki programu SQL Server uruchom następujące zapytanie, aby sprawdzić, czy baza danych db1 została utworzona i ma stan SYNCD:

SELECT * FROM sys.databases WHERE name = 'db1';
GO
SELECT DB_NAME(database_id) AS 'database', synchronization_state_desc FROM sys.dm_hadr_database_replica_states;

Jeśli synchronization_state_desc lista pokazuje SYNCHRONIZED dla db1, oznacza to, że repliki są zsynchronizowane. Repliki wtórne są wyświetlane db1 w replika podstawowej.

Utwórz zasoby grupy dostępności w klastrze Pacemaker

Postępujemy zgodnie z przewodnikiem, aby tworzyć zasoby grupy dostępności w klastrze Pacemaker.

Uwaga

Komunikacja bez uprzedzeń

Ten artykuł zawiera odwołania do terminu niewolnik, termin Microsoft uznaje za obraźliwe w przypadku użycia w tym kontekście. Termin pojawia się w tym artykule, ponieważ jest on obecnie wyświetlany w oprogramowaniu. Po usunięciu terminu z oprogramowania usuniemy go z artykułu.

Utwórz zasób klastra AG

  1. Użyj jednego z następujących poleceń opartych na środowisku wybranym wcześniej, aby utworzyć zasób ag_cluster w grupie dostępności ag1.

    RHEL 7

    sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=30s master notify=true
    

    RHEL 8

    sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=30s promotable notify=true
    
  2. Przed kontynuowaniem upewnij się, że zasoby są w trybie online, używając następującego polecenia:

    sudo pcs resource
    

    Powinny zostać wyświetlone następujące dane wyjściowe:

    RHEL 7

    [<username>@VM1 ~]$ sudo pcs resource
    Master/Slave Set: ag_cluster-master [ag_cluster]
    Masters: [ <VM1> ]
    Slaves: [ <VM2> <VM3> ]
    

    RHEL 8

    [<username>@VM1 ~]$ sudo pcs resource
    * Clone Set: ag_cluster-clone [ag_cluster] (promotable):
    * ag_cluster             (ocf::mssql:ag) :            Slave VMrhel3 (Monitoring)
    * ag_cluster             (ocf::mssql:ag) :            Master VMrhel1 (Monitoring)
    * ag_cluster             (ocf::mssql:ag) :            Slave VMrhel2 (Monitoring)
    

Tworzenie zasobu wirtualnego adresu IP

  1. Użyj dostępnego statycznego adresu IP z sieci, aby utworzyć zasób wirtualnego adresu IP. Możesz znaleźć za pomocą narzędzia poleceń nmap.

    nmap -sP <IPRange>
    # For example: nmap -sP 10.0.0.*
    # The above will scan for all IP addresses that are already occupied in the 10.0.0.x space.
    
  2. Ustaw właściwość stonith-enabled na false:

    sudo pcs property set stonith-enabled=false
    
  3. Utwórz zasób wirtualnego adresu IP przy użyciu następującego polecenia. Zastąp <availableIP> ciąg nieużywanym adresem IP.

    sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=<availableIP>
    

Dodawanie ograniczeń

  1. Aby upewnić się, że adres IP i zasób AG są uruchomione w tym samym węźle, należy skonfigurować ograniczenie kolokacji. Uruchom następujące polecenie:

    RHEL 7

    sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Master
    

    RHEL 8

     sudo pcs constraint colocation add virtualip with master ag_cluster-clone INFINITY with-rsc-role=Master
    
  2. Utwórz ograniczenie porządkowania, aby upewnić się, że zasób AG jest uruchomiony przed adresem IP. Chociaż ograniczenie kolokacji oznacza ograniczenie porządkowe, to je wymusza.

    RHEL 7

    sudo pcs constraint order promote ag_cluster-master then start virtualip
    

    RHEL 8

    sudo pcs constraint order promote ag_cluster-clone then start virtualip
    
  3. Aby sprawdzić ograniczenia, uruchom następujące polecenie:

    sudo pcs constraint list --full
    

    Powinny zostać wyświetlone następujące dane wyjściowe:

    RHEL 7

    Location Constraints:
    Ordering Constraints:
          promote ag_cluster-master then start virtualip (kind:Mandatory) (id:order-ag_cluster-master-virtualip-mandatory)
    Colocation Constraints:
          virtualip with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-master-INFINITY)
    Ticket Constraints:
    

    RHEL 8

    Location Constraints:
    Ordering Constraints:
            promote ag_cluster-clone then start virtualip (kind:Mandatory) (id:order-ag_cluster-clone-virtualip-mandatory)
    Colocation Constraints:
            virtualip with ag_cluster-clone (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-clone-INFINITY)
    Ticket Constraints:
    

Włącz ponownie stonith

Jesteśmy gotowi do testowania. Ponownie włącz stonith w klastrze, uruchamiając następujące polecenie w węźle 1:

sudo pcs property set stonith-enabled=true

Sprawdzanie stanu klastra

Stan zasobów klastra można sprawdzić przy użyciu następującego polecenia:

[<username>@VM1 ~]$ sudo pcs status
Cluster name: az-hacluster
Stack: corosync
Current DC: <VM3> (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum
Last updated: Sat Dec  7 00:18:38 2019
Last change: Sat Dec  7 00:18:02 2019 by root via cibadmin on VM1

3 nodes configured
5 resources configured

Online: [ <VM1> <VM2> <VM3> ]

Full list of resources:

 Master/Slave Set: ag_cluster-master [ag_cluster]
     Masters: [ <VM2> ]
     Slaves: [ <VM1> <VM3> ]
 virtualip      (ocf::heartbeat:IPaddr2):       Started <VM2>
 rsc_st_azure   (stonith:fence_azure_arm):      Started <VM1>

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

Testowanie pracy w trybie failover

Aby upewnić się, że konfiguracja do tej pory była udana, przetestujemy procedurę przełączenia awaryjnego. Aby uzyskać więcej informacji, zobacz failover w grupie dostępności Always On w systemie Linux.

  1. Uruchom następujące polecenie, aby ręcznie zmienić tryb pracy podstawowej repliki na failover do <VM2>. Zastąp <VM2> wartością odpowiadającą nazwie serwera.

    RHEL 7

    sudo pcs resource move ag_cluster-master <VM2> --master
    

    RHEL 8

    sudo pcs resource move ag_cluster-clone <VM2> --master
    

    Można również określić dodatkową opcję, aby tymczasowe ograniczenie, które zostało utworzone w celu przeniesienia zasobu do żądanego węzła, zostało wyłączone automatycznie i nie trzeba wykonywać kroków 2 i 3 w poniższych instrukcjach.

    RHEL 7

    sudo pcs resource move ag_cluster-master <VM2> --master lifetime=30S
    

    RHEL 8

    sudo pcs resource move ag_cluster-clone <VM2> --master lifetime=30S
    

    Inną alternatywą do zautomatyzowania kroków 2 i 3, które usuwają tymczasowe ograniczenie w samym poleceniu przenoszenia zasobu, jest połączenie wielu poleceń w jednym wierszu.

    RHEL 7

    sudo pcs resource move ag_cluster-master <VM2> --master && sleep 30 && pcs resource clear ag_cluster-master
    

    RHEL 8

    sudo pcs resource move ag_cluster-clone <VM2> --master && sleep 30 && pcs resource clear ag_cluster-clone
    
  2. Jeśli ponownie sprawdzisz ograniczenia, zobaczysz, że inne ograniczenie zostało dodane z powodu ręcznego przejścia w tryb failover:

    RHEL 7

    [<username>@VM1 ~]$ sudo pcs constraint list --full
    Location Constraints:
          Resource: ag_cluster-master
            Enabled on: VM2 (score:INFINITY) (role: Master) (id:cli-prefer-ag_cluster-master)
    Ordering Constraints:
            promote ag_cluster-master then start virtualip (kind:Mandatory) (id:order-ag_cluster-master-virtualip-mandatory)
    Colocation Constraints:
            virtualip with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-master-INFINITY)
    Ticket Constraints:
    

    RHEL 8

    [<username>@VM1 ~]$ sudo pcs constraint list --full
    Location Constraints:
          Resource: ag_cluster-master
            Enabled on: VM2 (score:INFINITY) (role: Master) (id:cli-prefer-ag_cluster-clone)
    Ordering Constraints:
            promote ag_cluster-clone then start virtualip (kind:Mandatory) (id:order-ag_cluster-clone-virtualip-mandatory)
    Colocation Constraints:
            virtualip with ag_cluster-clone (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-clone-INFINITY)
    Ticket Constraints:
    
  3. Usuń ograniczenie z identyfikatorem cli-prefer-ag_cluster-master przy użyciu następującego polecenia:

    RHEL 7

    sudo pcs constraint remove cli-prefer-ag_cluster-master
    

    RHEL 8

    sudo pcs constraint remove cli-prefer-ag_cluster-clone
    
  4. Sprawdź zasoby klastra przy użyciu polecenia sudo pcs resourcei sprawdź, czy wystąpienie podstawowe ma teraz wartość <VM2>.

    [<username>@<VM1> ~]$ sudo pcs resource
    Master/Slave Set: ag_cluster-master [ag_cluster]
         ag_cluster (ocf::mssql:ag):        FAILED <VM1> (Monitoring)
         Masters: [ <VM2> ]
         Slaves: [ <VM3> ]
    virtualip      (ocf::heartbeat:IPaddr2):       Started <VM2>
    [<username>@<VM1> ~]$ sudo pcs resource
    Master/Slave Set: ag_cluster-master [ag_cluster]
         Masters: [ <VM2> ]
         Slaves: [ <VM1> <VM3> ]
    virtualip      (ocf::heartbeat:IPaddr2):       Started <VM2>
    

Testowanie ogrodzenia

Możesz przetestować zabezpieczenie, uruchamiając następujące polecenie. Spróbuj uruchomić poniższe polecenie z <VM1> dla <VM3>.

sudo pcs stonith fence <VM3> --debug

Uwaga

Domyślnie akcja ogrodzenia powoduje wyłączenie węzła, a następnie włączenie. Jeśli chcesz przełączyć węzeł do trybu offline, użyj opcji --off w poleceniu .

Powinny zostać wyświetlone następujące dane wyjściowe:

[<username>@<VM1> ~]$ sudo pcs stonith fence <VM3> --debug
Running: stonith_admin -B <VM3>
Return Value: 0
--Debug Output Start--
--Debug Output End--

Node: <VM3> fenced

Aby uzyskać więcej informacji na temat testowania urządzenia ogrodzenia, zobacz następujący artykuł firmy Red Hat.

Następny krok