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

Dotyczy: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łączanie wysokiej dostępności (HA)
  • Tworzenie klastra Pacemaker
  • Konfigurowanie agenta ogrodzenia 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
  • Konfigurowanie zasobów grupy dostępności w klastrze Pacemaker
  • Testowanie trybu failover i agenta ogrodzenia

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> ciąg 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

W przypadku wybrania obrazu systemu RHEL z płatnością zgodnie z rzeczywistym użyciem (PAYG) i skonfigurowania wysokiej dostępności (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. W celu uzyskania więcej informacji, zobacz następujący temat: 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 oferowane jako obrazy RHEL-HA są również obrazami PAYG z wstępnie 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 wybieramy RedHat:RHEL-HA:8.1:8.1.2020021914 przykład 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>
    • <adminPassword>
    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 "<adminPassword>" \
             --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 potencjalnie zabrakło miejsca z tą instalacją domyślną. 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łączenie do maszyny wirtualnej VM1 lub innych maszyn wirtualnych 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łączanie wysokiej dostępności

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łączenie do każdego węzła maszyny wirtualnej i postępuj zgodnie z tym przewodnikiem, aby włączyć wysoką dostępność. 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. Użyj następującego polecenia, aby otworzyć plik hosts i skonfigurować rozpoznawanie nazw hosta. Aby uzyskać więcej informacji, zobacz Konfigurowanie grupy dostępności na temat konfigurowania pliku hostów.

    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 klawisz 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 wystąpienia klastra trybu failover dla systemu RHEL.

Włączanie i uruchamianie usługi pcsd i Pacemaker

  1. Uruchom polecenia na wszystkich węzłach. Te polecenia umożliwiają węzłom ponowne dołączanie 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 utworzonego wcześniej 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 oczekiwane głosy w klastrze na żywo na 3. To polecenie ma wpływ tylko na klaster na żywo i nie zmienia plików konfiguracji.

    Na wszystkich węzłach ustaw oczekiwane głosy za pomocą następującego polecenia:

    sudo pcs quorum expected-votes 3
    

Konfigurowanie agenta ogrodzenia

Aby skonfigurować agenta ogrodzenia, następujące instrukcje są modyfikowane na potrzeby tego samouczka. 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

Powinny zostać wyświetlone podobne dane wyjściowe 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 identyfikatora entra firmy Microsoft i zapisz element 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 firma Microsoft — pojedyncza dzierżawa).
  6. Wybierz pozycję Sieć Web w polu Identyfikator URI przekierowania, a następnie wprowadź adres URL (na przykład http://localhost) i wybierz pozycję 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ść wpisu tajnego. Jest on używany jako hasło dla jednostki usługi.
  10. Wybierz Przegląd. Zapisz identyfikator aplikacji. Jest ona używana jako nazwa użytkownika (identyfikator logowania w poniższych krokach) jednostki usługi.

Tworzenie roli niestandardowej dla agenta ogrodzenia

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

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> ciąg identyfikatorem subskrypcji platformy 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> ciąg 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"
}

Przypisywanie roli niestandardowej do jednostki usługi

Przypisz rolę Linux Fence Agent Role-<username> niestandardową utworzoną w ostatnim kroku do jednostki usługi. 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 (Zarządzanie dostępem i tożsamościami)
  5. Wybierz pozycję 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:

  • <ApplicationID> Zastąp wartość identyfikatorem z rejestracji aplikacji.
  • Zastąp wartość <servicePrincipalPassword> wartością z klucza tajnego klienta.
  • Zastąp element <resourceGroupName> grupą zasobów z subskrypcji używanej na potrzeby tego samouczka.
  • Zastąp <subscriptionId> wartości <tenantID> i z subskrypcji platformy Azure.
sudo pcs property set stonith-timeout=900
sudo pcs stonith create rsc_st_azure fence_azure_arm login="<ApplicationID>" passwd="<servicePrincipalPassword>" 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

Otwieranie portu 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łączenie do wszystkich węzłów 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 z portem 1433 w sieciowej grupie zabezpieczeń dla każdej maszyny wirtualnej. Aby uzyskać więcej informacji, zobacz Tworzenie reguły zabezpieczeń na potrzeby tworzenia reguły zabezpieczeń dla ruchu przychodzącego.

    • Zastąp element <Master_Key_Password> własnym hasłem.
    ALTER EVENT SESSION  AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
    GO
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Master_Key_Password>';
    
  2. Połączenie do repliki podstawowej 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 <Private_Key_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 = '<Private_Key_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> wartości i <VM2> nazwą użytkownika i docelową nazwą maszyny wirtualnej, której używasz.
    • Uruchom to polecenie dla wszystkich replik pomocniczych.

    Uwaga

    Nie trzeba uruchamiać sudo -ipolecenia , co daje środowisko główne. Możesz po prostu uruchomić sudo polecenie przed każdym poleceniem, tak jak poprzednio 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> ciąg 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.
    • Uruchom te 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 = '<Private_Key_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łączenie do wystąpienia programu SQL Server, które hostuje replikę podstawową przy użyciu programu sqlcmd lub SSMS. Uruchom następujące polecenie, aby utworzyć grupę dostępności:

  • Zastąp ag1 ciąg żądaną nazwą grupy dostępności.
  • Zastąp <VM1>wartości , <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 identyfikatora logowania programu SQL Server dla programu Pacemaker

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

  • 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 wystąpieniach programu SQL Server zapisz poświadczenia używane do logowania programu SQL Server.

  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 klawisz Esc , a następnie wprowadź polecenie :wq , aby zapisać plik i zamknąć.

  3. Ustaw plik tylko do odczytu według katalogu głównego:

    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, należy otworzyć port 5022 w zaporze dla 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 w repliki podstawowej i każdej repliki 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 programie SSMS Eksplorator obiektów, rozwijając węzeł Zawsze włączone wysokiej dostępności:

    Screenshot shows the primary and secondary availability replicas.

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 lista synchronization_state_desc zsynchronizowana dla db1elementu oznacza, że repliki są synchronizowane. Sekundy są wyświetlane db1 w repliki podstawowej.

Tworzenie zasobów grupy dostępności w klastrze Pacemaker

Postępuj zgodnie z przewodnikiem tworzenia zasobów 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.

Tworzenie zasobu klastra grupy dostępności

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

    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 go znaleźć za pomocą narzędzia nmappoleceń .

    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 grupy dostępności 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 grupy dostępności jest uruchomiony przed adresem IP. Chociaż ograniczenie kolokacji oznacza ograniczenie porządkowania, wymusza to ograniczenie.

    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 zakończyła się pomyślnie, przetestujemy tryb failover. Aby uzyskać więcej informacji, zobacz Tryb failover zawsze włączonej grupy dostępności w systemie Linux.

  1. Uruchom następujące polecenie, aby ręcznie przejąć replikę podstawową w tryb failover na <VM2>. Zastąp <VM2> ciąg wartością nazwy 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ć ogrodzenie, uruchamiając następujące polecenie. Spróbuj uruchomić poniższe polecenie z <VM1> polecenia dla polecenia <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ł z systemem Red Hat .

Następny krok