Azure CLI を使用して Azure VM で SQL Server の Always On 可用性グループを構成するUse the Azure CLI to configure an Always On availability group for SQL Server on an Azure VM

この記事では、Azure CLI を使用して、Windows フェールオーバー クラスターをデプロイしたり、クラスターに SQL Server VM を追加したり、Always On 可用性グループの内部ロード バランサーおよびリスナーを作成したりする方法について説明します。This article describes how to use the Azure CLI to deploy a Windows failover cluster, add SQL Server VMs to the cluster, and create the internal load balancer and listener for an Always On availability group. Always On 可用性グループのデプロイは、引き続き SQL Server Management Studio (SSMS) を使用して手動で実行されます。Deployment of the Always On availability group is still done manually through SQL Server Management Studio (SSMS).

前提条件Prerequisites

Azure CLI を使用して Always On 可用性グループの設定を自動化するには、次の前提条件が満たされている必要があります。To automate the setup of an Always On availability group by using the Azure CLI, you must have the following prerequisites:

アクセス許可Permissions

Azure CLI を使用して Always On 可用性グループを構成するには、次のアカウントのアクセス許可が必要です。You need the following account permissions to configure the Always On availability group by using the Azure CLI:

  • ドメインでコンピューター オブジェクトを作成するためのアクセス許可を持っている既存のドメイン ユーザー アカウント。An existing domain user account that has Create Computer Object permission in the domain. たとえばドメイン管理者アカウントは、一般に十分なアクセス許可を持っています (例: account@domain.com)。For example, a domain admin account typically has sufficient permission (for example: account@domain.com). クラスターを作成するには、このアカウントが、各 VM でローカル管理者グループに含まれている必要もあります。This account should also be part of the local administrator group on each VM to create the cluster.
  • SQL Server サービスを制御するドメイン ユーザー アカウント。The domain user account that controls the SQL Server service.

手順 1:クラウド監視としてのストレージ アカウントを作成するStep 1: Create a storage account as a cloud witness

クラスターには、クラウド監視として機能するストレージ アカウントが必要です。The cluster needs a storage account to act as the cloud witness. いずれかの既存のストレージ アカウントを使用するか、または新しいストレージ アカウントを作成できます。You can use any existing storage account, or you can create a new storage account. 既存のストレージ アカウントを使用する場合は、次のセクションに進んでください。If you want to use an existing storage account, skip ahead to the next section.

次のコード スニペットは、ストレージ アカウントを作成します。The following code snippet creates the storage account:

# 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 ex:eastus> `
  --sku Standard_LRS --kind StorageV2 --access-tier Hot --https-only true

ヒント

古いバージョンの Azure CLI を使用している場合は、エラー az sql: 'vm' is not in the 'az sql' command group が表示されることがあります。You might see the error az sql: 'vm' is not in the 'az sql' command group if you're using an outdated version of the Azure CLI. このエラーを回避するには、最新バージョンの Azure CLI をダウンロードしてください。Download the latest version of Azure CLI to get past this error.

手順 2:Windows フェールオーバー クラスターのメタデータを定義するStep 2: Define Windows failover cluster metadata

Azure CLI の az sql vm group コマンド グループは、可用性グループをホストする Windows Server フェールオーバー クラスター (WSFC) サービスのメタデータを管理するものです。The Azure CLI az sql vm group command group manages the metadata of the Windows Server Failover Cluster (WSFC) service that hosts the availability group. クラスター メタデータには、Active Directory ドメイン、クラスター アカウント、クラウド監視として使用されるストレージ アカウント、および SQL Server バージョンが含まれています。Cluster metadata includes the Active Directory domain, cluster accounts, storage accounts to be used as the cloud witness, and SQL Server version. az sql vm group create を使用して WSFC のメタデータを定義し、最初の SQL Server VM が追加されたら、定義のとおりにクラスターが作成されるようにします。Use az sql vm group create to define the metadata for WSFC so that when the first SQL Server VM is added, the cluster is created as defined.

次のコード スニペットは、クラスターのメタデータを定義します。The following code snippet defines the metadata for the cluster:

# 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/'

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/>'

手順 3:クラスターに SQL Server VM を追加するStep 3: Add SQL Server VMs to the cluster

クラスターに最初の SQL Server VM を追加すると、クラスターが作成されます。Adding the first SQL Server VM to the cluster creates the cluster. az sql vm add-to-group コマンドは、前に指定された名前でクラスターを作成し、SQL Server VM にクラスター ロールをインストールした後、それらの VM をクラスターに追加します。The az sql vm add-to-group command creates the cluster with the name previously given, installs the cluster role on the SQL Server VMs, and adds them to the cluster. その後に az sql vm add-to-group コマンドを使用すると、新しく作成されたクラスターに SQL Server VM が追加されます。Subsequent uses of the az sql vm add-to-group command add more SQL Server VMs to the newly created cluster.

次のコード スニペットはクラスターを作成し、そこに最初の SQL Server VM を追加します。The following code snippet creates the cluster and adds the first SQL Server VM to it:

# Add SQL Server VMs to cluster
# example: az sql vm add-to-group -n SQLVM1 -g SQLVM-RG --sqlvm-group Cluster `
#  -b Str0ngAzur3P@ssword! -p Str0ngAzur3P@ssword! -s Str0ngAzur3P@ssword!
# example: az sql vm add-to-group -n SQLVM2 -g SQLVM-RG --sqlvm-group Cluster `
#  -b Str0ngAzur3P@ssword! -p Str0ngAzur3P@ssword! -s Str0ngAzur3P@ssword!

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>

クラスターに他の SQL Server VM を追加するには、このコマンドを使用します。Use this command to add any other SQL Server VMs to the cluster. SQL Server VM 名の -n パラメーターのみを変更してください。Modify only the -n parameter for the SQL Server VM name.

手順 4:可用性グループの作成Step 4: Create the availability group

SQL Server Management StudioPowerShellTransact-SQL のいずれかを使用して、通常どおりに可用性グループを手動で作成します。Manually create the availability group as you normally would, by using SQL Server Management Studio, PowerShell, or Transact-SQL.

重要

この時点では、リスナーを作成 "しないでください"。これは、以降のセクションで Azure CLI を使用して行います。Do not create a listener at this time because this is done through the Azure CLI in the following sections.

手順 5:内部ロード バランサーを作成するStep 5: Create the internal load balancer

Always On 可用性グループ リスナーには、Azure Load Balancer の内部インスタンスが必要です。The Always On availability group listener requires an internal instance of Azure Load Balancer. 内部ロード バランサーでは、より高速なフェールオーバーと再接続を可能にする可用性グループ リスナー用の "フローティング" IP アドレスが提供されます。The internal load balancer provides a “floating” IP address for the availability group listener that allows for faster failover and reconnection. 可用性グループ内の SQL Server VM が同じ可用性セットの一部である場合は、Basic ロード バランサーを使用できます。If the SQL Server VMs in an availability group are part of the same availability set, you can use a Basic load balancer. それ以外の場合は、Standard ロード バランサーを使用する必要があります。Otherwise, you need to use a Standard load balancer.

注意

内部ロード バランサーは、SQL Server VM インスタンスと同じ仮想ネットワークに存在する必要があります。The internal load balancer should be in the same virtual network as the SQL Server VM instances.

次のコード スニペットは、内部ロード バランサーを作成するものです。The following code snippet creates the internal load balancer:

# 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>

重要

各 SQL Server VM 用のパブリック IP リソースには、Standard Load Balancer と互換性のある Standard SKU が必要です。The public IP resource for each SQL Server VM should have a Standard SKU to be compatible with the Standard load balancer. VM のパブリック IP リソースの SKU を決定するには、 [リソース グループ] に移動し、目的の SQL Server VM 用の [パブリック IP アドレス] リソースを選択して、 [概要] ウィンドウの [SKU] で値を見つけます。To determine the SKU of your VM's public IP resource, go to Resource Group, select your Public IP Address resource for the desired SQL Server VM, and locate the value under SKU in the Overview pane.

手順 6:可用性グループ リスナーを作成するStep 6: Create the availability group listener

可用性グループを手動で作成したら、az sql vm ag-listener を使用してリスナーを作成できます。After you manually create the availability group, you can create the listener by using az sql vm ag-listener.

"サブネット リソース ID" は、仮想ネットワーク リソースのリソース ID に追加された /subnets/<subnetname> の値です。The subnet resource ID is the value of /subnets/<subnetname> appended to the resource ID of the virtual network resource. サブネット リソース ID を識別するには、次の操作を行います。To identify the subnet resource ID:

  1. Azure portal で、ご利用のリソース グループに移動します。Go to your resource group in the Azure portal.
  2. 仮想ネットワーク リソースを選択します。Select the virtual network resource.
  3. [設定] ウィンドウで [プロパティ] を選択します。Select Properties in the Settings pane.
  4. 仮想ネットワークのリソース ID を特定し、その最後に /subnets/<subnetname> を追加してサブネット リソース ID を作成します。Identify the resource ID for the virtual network and append /subnets/<subnetname> to the end of it to create the subnet resource ID. 例:For example:
    • 仮想ネットワークのリソース ID は /subscriptions/a1a1-1a11a/resourceGroups/SQLVM-RG/providers/Microsoft.Network/virtualNetworks/SQLVMvNet です。Your virtual network resource ID is: /subscriptions/a1a1-1a11a/resourceGroups/SQLVM-RG/providers/Microsoft.Network/virtualNetworks/SQLVMvNet
    • サブネット名は default です。Your subnet name is: default
    • そのため、サブネット リソース ID は /subscriptions/a1a1-1a11a/resourceGroups/SQLVM-RG/providers/Microsoft.Network/virtualNetworks/SQLVMvNet/subnets/default です。Therefore, your subnet resource ID is: /subscriptions/a1a1-1a11a/resourceGroups/SQLVM-RG/providers/Microsoft.Network/virtualNetworks/SQLVMvNet/subnets/default

次のコード スニペットは、可用性グループ リスナーを作成するものです。The following code snippet creates the availability group listener:

# 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>

可用性グループ内のレプリカの数を変更するModify the number of replicas in an availability group

Azure でホストされている SQL Server VM に可用性グループをデプロイすると複雑さが増します。There's an added layer of complexity when you're deploying an availability group to SQL Server VMs hosted in Azure. リソースは、リソースプロバイダーおよび仮想マシン グループによって管理されるようになります。The resource provider and the virtual machine group now manage the resources. このため、可用性グループにレプリカを追加したり、可用性グループからレプリカを削除したりする場合は、SQL Server VM に関する情報でリスナー メタデータを更新する手順が別途発生します。As such, when you're adding or removing replicas in the availability group, there's an additional step of updating the listener metadata with information about the SQL Server VMs. 可用性グループ内のレプリカの数を変更する場合は、az sql vm group ag-listener update コマンドを使用して、SQL Server VM のメタデータでリスナーを更新する必要もあります。When you're modifying the number of replicas in the availability group, you must also use the az sql vm group ag-listener update command to update the listener with the metadata of the SQL Server VMs.

レプリカを追加するAdd a replica

可用性グループに新しいレプリカを追加するには、次の操作を行います。To add a new replica to the availability group:

  1. クラスターに SQL Server VM を追加します。Add the SQL Server VM to the cluster:
    # Add the SQL Server VM to the cluster
    # example: az sql vm add-to-group -n SQLVM3 -g SQLVM-RG --sqlvm-group Cluster `
    # -b Str0ngAzur3P@ssword! -p Str0ngAzur3P@ssword! -s Str0ngAzur3P@ssword!
    
    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>
    
  2. SQL Server Management Studio を使用して、SQL Server インスタンスを可用性グループ内のレプリカとして追加します。Use SQL Server Management Studio to add the SQL Server instance as a replica within the availability group.
  3. リスナーに SQL Server VM メタデータを追加します。Add the SQL Server VM metadata to the listener:
    # 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>
    

レプリカの削除Remove a replica

可用性グループからレプリカを削除するには、次の操作を行います。To remove a replica from the availability group:

  1. SQL Server Management Studio を使用して、可用性グループからレプリカを削除します。Remove the replica from the availability group by using SQL Server Management Studio.
  2. リスナーから SQL Server VM メタデータを削除します。Remove the SQL Server VM metadata from the listener:
    # 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>
    
  3. クラスターから SQL Server VM を削除します。Remove the SQL Server VM from the cluster:
    # 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> 
    

可用性グループ リスナーを削除するRemove the availability group listener

Azure CLI で構成された可用性グループ リスナーを後で削除する必要が生じた場合は、SQL VM リソースプロバイダーを使用する必要があります。If you later need to remove the availability group listener configured with the Azure CLI, you must go through the SQL VM resource provider. リスナーは SQL VM リソースプロバイダーを介して登録されるため、SQL Server Management Studio を使用して削除するだけでは十分ではありません。Because the listener is registered through the SQL VM resource provider, just deleting it via SQL Server Management Studio is insufficient.

最適な方法は、Azure CLI で次のコード スニペットを使用して、SQL VM リソースプロバイダーを通じて削除することです。The best method is to delete it through the SQL VM resource provider by using the following code snippet in the Azure CLI. そうすることで、SQL VM リソースプロバイダーから可用性グループ リスナー メタデータが削除されます。Doing so removes the availability group listener metadata from the SQL VM resource provider. また、可用性グループから物理的にリスナーが削除されます。It also physically deletes the listener from the availability group.

# 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>

次の手順Next steps

詳細については、次の記事を参照してください。For more information, see the following articles: