Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:program SQL Server na maszynie wirtualnej platformy Azure
Napiwek
Istnieje wiele metod wdrażania grupy dostępności. Uprość wdrażanie i wyeliminuj konieczność korzystania z usługi Azure Load Balancer lub rozproszonej nazwy sieci (DNN) dla grupy dostępności Always On, tworząc maszyny wirtualne SQL Server w wielu podsieciach w tej samej sieci wirtualnej Azure. Jeśli grupa dostępności została już utworzona w jednej podsieci, możesz ją zmigrować do środowiska z wieloma podsieciami.
W tym artykule opisano, jak używać PowerShell lub Azure CLI do wdrażania klastra trybu failover systemu Windows, dodawania maszyn wirtualnych SQL Server do klastra oraz tworzenia wewnętrznego modułu równoważenia obciążenia i odbiornika dla grupy dostępności Always On w ramach jednej podsieci.
Wdrażanie grupy dostępności jest nadal wykonywane ręcznie za pomocą programu SQL Server Management Studio (SSMS) lub języka Transact-SQL (T-SQL).
Chociaż w tym artykule użyto PowerShell i interfejsu wiersza poleceń Az CLI do skonfigurowania środowiska grupy dostępności, można to zrobić również w portalu Azure, używając szablonów szybkiego startu Azure lub ręcznie.
Uwaga
Teraz można podnieść i przenieść rozwiązanie grupy dostępności do programu SQL Server na maszynach wirtualnych platformy Azure przy użyciu usługi Azure Migrate. Aby dowiedzieć się więcej, zobacz Migrowanie grupy dostępności.
Wymagania wstępne
Aby skonfigurować zawsze włączoną grupę dostępności, musisz mieć następujące wymagania wstępne:
- Subskrypcja platformy Azure.
- Grupa zasobów z kontrolerem domeny.
- Co najmniej jedna maszyna wirtualna przyłączona do domeny na platformie Azure z uruchomionym programem SQL Server 2016 (lub nowszym) wersją Enterprise w tym samym zestawie dostępności lub w różnych strefach dostępności zarejestrowanych w rozszerzeniu agenta IaaS SQL.
- Najnowsza wersja programu PowerShell lub interfejsu wiersza polecenia platformy Azure.
- Dwa dostępne (nieużytowane przez żadną jednostkę) adresy IP. Jeden z nich dotyczy wewnętrznego modułu równoważenia obciążenia. Druga dotyczy nasłuchiwacza grupy dostępności, która znajduje się w tej samej podsieci co grupa dostępności. Jeśli używasz istniejącego modułu równoważenia obciążenia, potrzebujesz tylko jednego dostępnego adresu IP dla odbiornika grupy dostępności.
- Windows Server Core nie jest obsługiwanym systemem operacyjnym dla poleceń programu PowerShell, o których mowa w tym artykule, ponieważ istnieje zależność od rsAT, która nie jest uwzględniona w instalacjach podstawowych systemu Windows.
Uprawnienia
Do skonfigurowania zawsze włączonej grupy dostępności przy użyciu interfejsu wiersza polecenia platformy Azure potrzebne są następujące uprawnienia konta:
- Istniejące konto użytkownika domeny z uprawnieniem Tworzenie obiektu komputera w domenie. Na przykład konto administratora domeny zwykle ma wystarczające uprawnienia (na przykład: account@domain.com). To konto powinno być również częścią grupy administratorów lokalnych na każdej maszynie wirtualnej w celu utworzenia klastra.
- Konto użytkownika domeny, które kontroluje program SQL Server.
Utwórz konto magazynowe
Klaster wymaga konta przechowywania, aby pełnić rolę świadka chmurowego. Możesz użyć dowolnego istniejącego konta magazynu lub utworzyć nowe konto magazynu. Jeśli chcesz użyć istniejącego konta magazynowego, przejdź do następnej sekcji.
Poniższy fragment kodu tworzy konto przechowywania:
# Create the storage account
# example: az storage account create -n 'cloudwitness' -g SQLVM-RG -l 'West US' `
# --sku Standard_LRS --kind StorageV2 --access-tier Hot --https-only true
az storage account create -n <name> -g <resource group name> -l <region> `
--sku Standard_LRS --kind StorageV2 --access-tier Hot --https-only true
Napiwek
Jeśli używasz nieaktualnej wersji interfejsu wiersza polecenia platformy Azure, może zostać wyświetlony błąd az sql: 'vm' is not in the 'az sql' command group . Pobierz najnowszą wersję interfejsu wiersza polecenia platformy Azure, aby przejść przez ten błąd.
Definiowanie metadanych klastra
Grupa poleceń Azure CLI az sql vm group zarządza metadanymi usługi Windows Server Failover Cluster (WSFC), która hostuje grupę dostępności. Metadane klastra obejmują domenę usługi Active Directory, konta klastra, wersję programu SQL Server oraz konta magazynu wykorzystywane jako monitor chmury. Użyj az sql vm group create , aby zdefiniować metadane dla WSFC, aby po dodaniu pierwszej maszyny wirtualnej z programem SQL Server klaster został utworzony zgodnie z definicją.
Poniższy fragment kodu definiuje metadane klastra:
# Define the cluster metadata
# example: az sql vm group create -n Cluster -l 'West US' -g SQLVM-RG `
# --image-offer SQL2017-WS2016 --image-sku Enterprise --domain-fqdn domain.com `
# --operator-acc vmadmin@domain.com --bootstrap-acc vmadmin@domain.com --service-acc sqlservice@domain.com `
# --sa-key '4Z4/i1Dn8/bpbseyWX' `
# --storage-account 'https://cloudwitness.blob.core.windows.net/'
# --cluster-subnet-type 'SingleSubnet'
az sql vm group create -n <cluster name> -l <region ex:eastus> -g <resource group name> `
--image-offer <SQL2016-WS2016 or SQL2017-WS2016> --image-sku Enterprise --domain-fqdn <FQDN ex: domain.com> `
--operator-acc <domain account ex: testop@domain.com> --bootstrap-acc <domain account ex:bootacc@domain.com> `
--service-acc <service account ex: testservice@domain.com> `
--sa-key '<PublicKey>' `
--storage-account '<ex:https://cloudwitness.blob.core.windows.net/>'
--cluster-subnet-type 'SingleSubnet'
Dodawanie maszyn wirtualnych do klastra
Dodanie pierwszej maszyny wirtualnej z programem SQL Server do klastra powoduje utworzenie klastra. Polecenie az sql vm add-to-group tworzy klaster o podanej wcześniej nazwie, instaluje rolę klastra na maszynach wirtualnych programu SQL Server i dodaje je do klastra. Kolejne zastosowania az sql vm add-to-group polecenia dodają więcej maszyn wirtualnych programu SQL Server do nowo utworzonego klastra.
Poniższy fragment kodu tworzy klaster i dodaje do niego pierwszą maszynę wirtualną z programem SQL Server. Zastąp <password> prawidłowym hasłem.
# Add SQL Server VMs to cluster
# example: az sql vm add-to-group -n SQLVM1 -g SQLVM-RG --sqlvm-group Cluster `
# -b <password> -p <password> -s <password>
# example: az sql vm add-to-group -n SQLVM2 -g SQLVM-RG --sqlvm-group Cluster `
# -b <password> -p <password> -s <password>
az sql vm add-to-group -n <VM1 Name> -g <Resource Group Name> --sqlvm-group <cluster name> `
-b <bootstrap account password> -p <operator account password> -s <service account password>
az sql vm add-to-group -n <VM2 Name> -g <Resource Group Name> --sqlvm-group <cluster name> `
-b <bootstrap account password> -p <operator account password> -s <service account password>
Użyj tego polecenia, aby dodać inne maszyny wirtualne programu SQL Server do klastra. Zmodyfikuj tylko parametr -n dla nazwy maszyny wirtualnej SQL Server. Zastąp <password> prawidłowym hasłem.
Konfigurowanie kworum
Mimo że świadek dysku jest najbardziej odporną opcją kworum, wymaga dysku udostępnionego platformy Azure, co nakłada pewne ograniczenia na grupę dostępności. W związku z tym świadek w chmurze jest zalecanym rozwiązaniem kworum dla klastrów, które hostują grupy dostępności dla programu SQL Server na maszynach wirtualnych Azure.
Jeśli masz parzystą liczbę głosów w klastrze, skonfiguruj rozwiązanie kworum, które najlepiej odpowiada twoim potrzebom biznesowym. Aby uzyskać więcej informacji, zobacz Kworum z maszynami wirtualnymi programu SQL Server.
Weryfikowanie klastra
Aby klaster failover był obsługiwany przez Microsoft, musi przejść walidację klastra. Połącz się z maszyną wirtualną przy użyciu preferowanej metody, takiej jak Bastion, i sprawdź, czy klaster przechodzi walidację przed kontynuowaniem. Jeśli tego nie zrobisz, pozostawisz swój klaster bez wsparcia.
Możesz zweryfikować klaster przy użyciu Menedżera klastra przełączania awaryjnego (FCM) lub następującego polecenia programu PowerShell:
Test-Cluster –Node ("<node1>","<node2>") –Include "Inventory", "Network", "System Configuration"
Tworzenie grupy dostępności
Ręcznie utwórz grupę dostępności, tak jak zwykle, przy użyciu programu SQL Server Management Studio, programu PowerShell lub języka Transact-SQL.
Ważne
Nie twórz odbiornika w tej chwili, ponieważ odbywa się to za pośrednictwem interfejsu wiersza polecenia platformy Azure w sekcjach poniżej.
Tworzenie wewnętrznego modułu równoważenia obciążenia
Uwaga
Wdrożenia grup dostępności w wielu podsieciach nie wymagają modułu równoważenia obciążenia. W środowisku z jedną podsiecią klienci korzystający z programu SQL Server 2019 CU8 lub nowszego w systemie Windows 2016 i nowszych mogą zastąpić tradycyjny odbiornik nazwy sieci wirtualnej (VNN) i odbiornik usługi Azure Load Balancer odbiornikiem rozproszonej nazwy sieci (DNN). Jeśli chcesz użyć DNN, pomiń dowolne kroki w samouczku, które konfigurują Azure Load Balancer dla grupy dostępności.
Odbiornik zawsze włączonej grupy dostępności wymaga wewnętrznego wystąpienia usługi Azure Load Balancer. Wewnętrzny moduł równoważenia obciążenia udostępnia "pływający" adres IP odbiornika grupy dostępności, który umożliwia szybsze przełączanie w tryb failover i ponowne nawiązywanie połączenia. Wewnętrzny moduł równoważenia obciążenia powinien znajdować się w tej samej sieci wirtualnej co wystąpienia maszyn wirtualnych programu SQL Server.
Uwaga
Podstawowy moduł równoważenia obciążenia został wycofany. W przypadku nowych wdrożeń użyj Standardowego modułu równoważenia obciążenia. Jeśli masz istniejące wdrożenie korzystające z podstawowego load balancera, przełącz na load balancer Standardowy.
Poniższy fragment kodu tworzy wewnętrzny moduł równoważenia obciążenia:
# Create the internal load balancer
# example: az network lb create --name sqlILB -g SQLVM-RG --sku Standard `
# --vnet-name SQLVMvNet --subnet default
az network lb create --name sqlILB -g <resource group name> --sku Standard `
--vnet-name <VNet Name> --subnet <subnet name>
Tworzenie odbiornika
Po ręcznym utworzeniu grupy dostępności można utworzyć odbiornik przy użyciu polecenia az sql vm ag-listener.
Identyfikator zasobu podsieci to wartość /subnets/<subnetname> dołączona do identyfikatora zasobu sieci wirtualnej. Aby zidentyfikować identyfikator zasobu podsieci:
- Przejdź do grupy zasobów w witrynie Azure Portal.
- Wybierz zasób sieci wirtualnej.
- Wybierz pozycję Właściwości w okienku Ustawienia .
- Zidentyfikuj identyfikator zasobu dla sieci wirtualnej i dołącz
/subnets/<subnetname>na końcu tego identyfikatora, aby utworzyć identyfikator zasobu podsieci. Na przykład:.- Identyfikator zasobu sieci wirtualnej to:
/subscriptions/a1a1-1a11a/resourceGroups/SQLVM-RG/providers/Microsoft.Network/virtualNetworks/SQLVMvNet - Nazwa podsieci to:
default - W związku z tym identyfikator zasobu podsieci to:
/subscriptions/a1a1-1a11a/resourceGroups/SQLVM-RG/providers/Microsoft.Network/virtualNetworks/SQLVMvNet/subnets/default
- Identyfikator zasobu sieci wirtualnej to:
Poniższy fragment kodu tworzy odbiornik grupy dostępności:
# Create the availability group listener
# example: az sql vm group ag-listener create -n AGListener -g SQLVM-RG `
# --ag-name SQLAG --group-name Cluster --ip-address 10.0.0.27 `
# --load-balancer sqlilb --probe-port 59999 `
# --subnet /subscriptions/a1a1-1a11a/resourceGroups/SQLVM-RG/providers/Microsoft.Network/virtualNetworks/SQLVMvNet/subnets/default `
# --sqlvms sqlvm1 sqlvm2
az sql vm group ag-listener create -n <listener name> -g <resource group name> `
--ag-name <availability group name> --group-name <cluster name> --ip-address <ag listener IP address> `
--load-balancer <lbname> --probe-port <Load Balancer probe port, default 59999> `
--subnet <subnet resource id> `
--sqlvms <names of SQL VM's hosting AG replicas, ex: sqlvm1 sqlvm2>
Konfigurowanie portu sondy
W przypadku korzystania z usługi Azure Load Balancer do obsługi zasobu nazwy sieci wirtualnej (VNN) należy skonfigurować klaster tak, aby odpowiadał na żądania sondy kondycji. Jeśli sonda kondycji nie otrzyma odpowiedzi z wystąpienia zaplecza, żadne nowe połączenia nie zostaną wysłane do tego wystąpienia zaplecza, dopóki sonda kondycji nie odniesie sukcesu ponownie.
Aby ustawić parametr portu sondy w programie PowerShell, użyj następującego skryptu raz na odpowiedni zasób adresu IP:
$ClusterNetworkName = "<MyClusterNetworkName>" # The cluster network name. Use Get-ClusterNetwork on Windows Server 2012 or later to find the name.
$IPResourceName = "<IPResourceName>" # The IP address resource name.
[int]$ProbePort = <nnnnn> # The probe port that you configured in the health probe of the load balancer for a given Frontend IP Address. Any unused TCP port is valid.
Import-Module FailoverClusters
Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$IPResourceName";"ProbePort"=$ProbePort;"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
Wprowadzone zmiany nie zostaną wprowadzone, dopóki zasób adresu IP nie zostanie przełączony do trybu offline i ponownie przełączony w tryb online. Przeprowadź przekierowanie awaryjne zasobu, aby ta zmiana weszła w życie.
Po ustawieniu sondy klastra użyj następującego skryptu programu PowerShell, aby sprawdzić parametry klastra:
Get-ClusterResource $IPResourceName | Get-ClusterParameter
Wyklucz porty z zakresu portów dynamicznych
W przypadku korzystania z portu sondy kondycji z zakresu od 49 152 do 65 536 ( domyślny zakres portów dynamicznych dla protokołu TCP/IP) dodaj wykluczenie dla każdego portu sondy kondycji na każdej maszynie wirtualnej.
Konfigurowanie wykluczenia portów uniemożliwia dynamiczne przypisywanie tego samego portu na maszynie wirtualnej przez inne procesy systemowe
Aby ustawić wykluczenie portów, użyj następującego skryptu programu PowerShell:
- dla każdego portu sondy kondycji
- na każdej maszynie wirtualnej
[int]$ProbePort = <nnnnn> # The probe port that you configured in the health probe of the load balancer. Any unused TCP port is valid.
netsh int ipv4 add excludedportrange tcp startport=$ProbePort numberofports=1 store=persistent
Aby upewnić się, że wykluczenia zostały prawidłowo skonfigurowane, użyj następującego polecenia:
netsh int ipv4 show excludedportrange tcp
Modyfikowanie liczby replik
Istnieje dodatkowa warstwa złożoności podczas wdrażania grupy dostępności na maszynach wirtualnych programu SQL Server hostowanych na platformie Azure. Dostawca zasobów i grupa maszyn wirtualnych teraz zarządzają zasobami. W związku z tym podczas dodawania lub usuwania replik w grupie dostępności istnieje dodatkowy krok aktualizowania metadanych odbiornika przy użyciu informacji o maszynach wirtualnych programu SQL Server. Podczas modyfikowania liczby replik w grupie dostępności należy również użyć polecenia az sql vm group ag-listener update, aby zaktualizować listenera metadanymi maszyn wirtualnych SQL Server.
Dodawanie repliki
Aby dodać nową replikę do grupy dostępności:
Interfejs wiersza polecenia platformy Azure
Dodaj maszynę wirtualną programu SQL Server do grupy klastrów. Zastąp
<password>prawidłowym hasłem.# Add the SQL Server VM to the cluster group # example: az sql vm add-to-group -n SQLVM3 -g SQLVM-RG --sqlvm-group Cluster ` # -b <password> -p <password> -s <password> az sql vm add-to-group -n <VM3 Name> -g <Resource Group Name> --sqlvm-group <cluster name> ` -b <bootstrap account password> -p <operator account password> -s <service account password>Użyj programu SQL Server Management Studio, aby dodać instancję SQL Server jako replikę w grupie dostępności.
Dodaj metadane maszyny wirtualnej programu SQL Server do odbiornika:
# Update the listener metadata with the new VM # example: az sql vm group ag-listener update -n AGListener ` # -g sqlvm-rg --group-name Cluster --sqlvms sqlvm1 sqlvm2 sqlvm3 az sql vm group ag-listener update -n <Listener> ` -g <RG name> --group-name <cluster name> --sqlvms <SQL VMs, along with new SQL VM>
Usuwanie repliki
Aby usunąć replikę z grupy dostępności:
Interfejs wiersza polecenia platformy Azure
- Usuń replikę z grupy dostępności przy użyciu programu SQL Server Management Studio.
- Usuń metadane maszyny wirtualnej z programu SQL Server z odbiornika:
# Update the listener metadata by removing the VM from the SQLVMs list # example: az sql vm group ag-listener update -n AGListener ` # -g sqlvm-rg --group-name Cluster --sqlvms sqlvm1 sqlvm2 az sql vm group ag-listener update -n <Listener> ` -g <RG name> --group-name <cluster name> --sqlvms <SQL VMs that remain> - Usuń maszynę wirtualną z programu SQL Server z klastra:
# Remove the SQL VM from the cluster # example: az sql vm remove-from-group --name SQLVM3 --resource-group SQLVM-RG az sql vm remove-from-group --name <SQL VM name> --resource-group <RG name>
Usuwanie odbiornika
Jeśli później musisz usunąć słuchacza grupy dostępności, skonfigurowanego za pomocą interfejsu wiersza polecenia platformy Azure, musisz przejść przez rozszerzenie agenta IaaS SQL. Ponieważ odbiornik jest zarejestrowany za pośrednictwem rozszerzenia agenta IaaS SQL, usunięcie go za pośrednictwem programu SQL Server Management Studio jest niewystarczające.
Najlepszą metodą jest usunięcie go za pośrednictwem rozszerzenia agenta IaaS SQL przy użyciu następującego fragmentu kodu w interfejsie wiersza polecenia platformy Azure. Spowoduje to usunięcie metadanych nasłuchiwacza grupy dostępności z rozszerzenia agenta IaaS SQL. Ponadto fizycznie usuwa nasłuchującego z grupy dostępności.
# Remove the availability group listener
# example: az sql vm group ag-listener delete --group-name Cluster --name AGListener --resource-group SQLVM-RG
az sql vm group ag-listener delete --group-name <cluster name> --name <listener name > --resource-group <resource group name>
Usuwanie klastra
Usuń wszystkie węzły z klastra, aby go zniszczyć, a następnie usuń metadane klastra z rozszerzenia agenta IaaS SQL. Możesz to zrobić przy użyciu interfejsu wiersza polecenia platformy Azure lub programu PowerShell.
Najpierw usuń wszystkie maszyny wirtualne programu SQL Server z klastra:
# Remove the VM from the cluster metadata
# example: az sql vm remove-from-group --name SQLVM2 --resource-group SQLVM-RG
az sql vm remove-from-group --name <VM1 name> --resource-group <resource group name>
az sql vm remove-from-group --name <VM2 name> --resource-group <resource group name>
Jeśli są to jedyne maszyny wirtualne w klastrze, klaster zostanie zniszczony. Jeśli w klastrze znajdują się inne maszyny wirtualne oprócz usuniętych maszyn wirtualnych programu SQL Server, pozostałe maszyny wirtualne nie zostaną usunięte i klaster nie zostanie zniszczony.
Następnie usuń metadane klastra z rozszerzenia agenta IaaS SQL:
# Remove the cluster from the SQL VM RP metadata
# example: az sql vm group delete --name Cluster --resource-group SQLVM-RG
az sql vm group delete --name <cluster name> Cluster --resource-group <resource group name>
Następne kroki
Po wdrożeniu grupy dostępności rozważ optymalizację ustawień usługi HADR dla programu SQL Server na maszynach wirtualnych platformy Azure.
Aby dowiedzieć się więcej, zobacz: