Microsoft SQL Server の Always On 可用性グループを使用すると、複数の SQL Server Enterprise インスタンス間でデータベースを複製できます。
SQL Server フェイルオーバー クラスタ インスタンスと同様に、Always On 可用性グループは Windows Server フェイルオーバー クラスタリング(WSFC)を使用して高可用性を実装します。ただし、この 2 つの機能には次のような違いがあります。
Always On 可用性グループ | フェイルオーバー クラスタ インスタンス | |
---|---|---|
フェイルオーバーのスコープ | データベースのグループ | インスタンス |
ストレージ | 共有なし | 共有 |
詳細な比較については、フェイルオーバー クラスタ インスタンスと可用性グループの比較をご覧ください。
Always On 可用性グループは、複数の可用性モードをサポートしています。このチュートリアルでは、Always On 可用性グループを同期 commit モードでデプロイして、1 つ以上のデータベースの高可用性を実装する方法について説明します。
この設定では、3 つの VM インスタンスを作成します。2 つの VM インスタンス(node-1
と node-2
)がクラスタノードとして機能し、SQL Server を実行します。3 番目の VM インスタンス witness
は、フェイルオーバー シナリオでクォーラムを達成するために使用されます。3 つの VM インスタンスは 3 つのゾーンに分散され、共通のサブネットを共有します。
SQL Server Always On 可用性グループを使用して、サンプル データベース bookshelf
が 2 つの SQL Server インスタンス間で同期的に複製されます。
オンプレミスの Windows クラスタ環境では、Address Resolution Protocol(ARP)通知によってIP アドレスのフェイルオーバーがトリガーされます。ただし、Google Cloudは ARP の発表を無視します。そのため、内部ロードバランサと分散ネットワーク名(DNN)を使用する次の 2 つのオプションのいずれかを実装する必要があります。
この記事は、 Google Cloudに Active Directory がデプロイされており、SQL Server、Active Directory、Compute Engine の基本的な知識があることを前提としています。 Google Cloudでの Active Directory の詳細については、始める前にをご覧ください。
SQL Server Always On 可用性グループを使用して、サンプル データベース bookshelf
が、2 つの SQL Server インスタンス間で同期的に複製されます。クラスタの前に配置された分散ネットワーク名(DNN)リスナーは、SQL Server クライアントに単一のエンドポイントを提供します。
DNN の詳細については、可用性グループの DNN リスナーを構成するをご覧ください。
この図には次のものが含まれています。
- 同じリージョン内の 2 つの VM インスタンスと、
node-1
とnode-2
という名前の異なるゾーンのフェイルオーバー クラスタ。1 つは SQL Server データベースのプライマリ レプリカをホストし、もう一方はセカンダリ レプリカをホストします。 witness
という 3 つ目の VM は、ファイル共有監視として機能し、タイブレークの投票を行い、フェイルオーバーのクォーラムを達成します。- クラスタの前に DNN リスナーを配置すると、SQL Server クライアントに単一のエンドポイントが提供されます。
目標
- 2 つの SQL Server VM インスタンスと、ファイル共有監視の機能を有する 1 つの VM インスタンスで構成される WSFC をデプロイします。
- 同期 commit を使用して可用性グループを作成します。
- SQL Server を使用して可用性グループにトラフィックをルーティングするように分散ネットワーク名(DNN)を構成する
- フェイルオーバーをシミュレートして、設定が機能していることを確認します。
料金
このチュートリアルでは、 Google Cloudの課金対象コンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。
始める前に
このチュートリアルのタスクを完了するには、次のことを確認してください。
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- ドメイン コントローラが 1 つ以上配置された Active Directory ドメイン。Managed Microsoft AD を使用して Active Directory ドメインを作成できます。または、Compute Engine にカスタムの Active Directory 環境をデプロイして、DNS クエリをドメイン コントローラに転送するプライベート DNS 転送ゾーンを設定することもできます。
-
コンピュータをドメインに参加させ、RDP を使用してログインする権限を付与された Active Directory ユーザーが存在する。Managed Microsoft AD を使用している場合は、
setupadmin
ユーザーを使用できます。Active Directory ユーザー アカウントのプロビジョニングの詳細については、Active Directory ユーザー アカウントのプロビジョニングをご覧ください。 - Google Cloud プロジェクトと、Active Directory ドメイン コントローラに接続する Virtual Private Cloud(VPC)。
- Windows Server フェイルオーバー クラスタ VM インスタンスに使用するサブネット。
プロジェクトとネットワークを準備する
SQL Server Always On 可用性グループをデプロイするには、デプロイ用にGoogle Cloud プロジェクトと VPC を準備する必要があります。以降のセクションでは、この方法について詳しく説明します。
プロジェクトとリージョンを構成する
SQL Server Always On 可用性グループをデプロイするために Google Cloud プロジェクトを準備するには、次の操作を行います。
Google Cloud コンソールで、[Cloud Shell をアクティブにする] ボタンをクリックして Cloud Shell を開きます。
次の変数を初期化します。
VPC_NAME=
VPC_NAME
SUBNET_NAME=SUBNET_NAME
次のように置き換えます。
VPC_NAME
: VPC の名前SUBNET_NAME
: サブネットの名前
デフォルトのプロジェクト ID を設定します。
gcloud config set project
PROJECT_ID
PROJECT_ID
は、 Google Cloud プロジェクトの ID に置き換えます。デフォルトのリージョンを設定します。
gcloud config set compute/region
REGION
REGION
は、デプロイするリージョンの ID に置き換えます。
ファイアウォール ルールの作成
クライアントが SQL Server に接続し、クラスタノード間で通信できるようにするには、いくつかのファイアウォール ルールを作成する必要があります。ネットワーク タグを使用すると、次のようにこれらのファイアウォール ルールの作成を簡素化できます。
- 2 つのクラスタノードには、
wsfc-node
タグが付加されます。 - すべてのサーバー(
witness
を含む)には、wsfc
タグが付加されます。
これらのネットワーク タグを使用するファイアウォール ルールを作成するには、次の手順を行います。
- 既存の Cloud Shell セッションに戻ります。
クラスタノード間のトラフィックを許可するファイアウォール ルールを作成します。
SUBNET_CIDR=$(gcloud compute networks subnets describe $SUBNET_NAME --format=value\('ipCidrRange'\)) gcloud compute firewall-rules create allow-all-between-wsfc-nodes \ --direction=INGRESS \ --action=allow \ --rules=tcp,udp,icmp \ --enable-logging \ --source-tags=wsfc \ --target-tags=wsfc \ --network=$VPC_NAME \ --priority 10000 gcloud compute firewall-rules create allow-sql-to-wsfc-nodes \ --direction=INGRESS \ --action=allow \ --rules=tcp:1433 \ --enable-logging \ --source-ranges=$SUBNET_CIDR \ --target-tags=wsfc-node \ --network=$VPC_NAME \ --priority 10000
VM インスタンスを作成する
フェイルオーバー クラスタ用に 2 つの VM インスタンスを作成してデプロイします。どの時点においても、これらの VM の 1 つが SQL Server データベースのプライマリ レプリカをホストし、もう一方がセカンダリ レプリカをホストします。2 つの VM インスタンスは、次の条件を満たしている必要があります。
- フェイルオーバー クラスタリングと SQL Server がインストールされている。
- Compute Engine の WSFC サポートが有効になっている。
SQL Server 2022 がプリインストールされた SQL Server プレミアム イメージを使用します。
タイブレークのための投票を行ってフェイルオーバー シナリオのクォーラムを達成するには、次の手順でファイル共有監視として機能する 3 つ目の VM をデプロイします。
- 既存の Cloud Shell セッションに戻ります。
WSFC ノード用の専用スクリプトを作成します。このスクリプトは、必要な Windows 機能をインストールし、WSFC と SQL Server 用のファイアウォール ルールを作成します。
cat << "EOF" > specialize-node.ps1 $ErrorActionPreference = "stop" # Install required Windows features Install-WindowsFeature Failover-Clustering -IncludeManagementTools Install-WindowsFeature RSAT-AD-PowerShell # Open firewall for WSFC netsh advfirewall firewall add rule name="Allow WSFC health check" dir=in action=allow protocol=TCP localport=59998 # Open firewall for SQL Server netsh advfirewall firewall add rule name="Allow SQL Server" dir=in action=allow protocol=TCP localport=1433 # Open firewall for SQL Server replication netsh advfirewall firewall add rule name="Allow SQL Server replication" dir=in action=allow protocol=TCP localport=5022 # Format data disk Get-Disk | Where partitionstyle -eq 'RAW' | Initialize-Disk -PartitionStyle MBR -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel 'Data' -Confirm:$false # Create data and log folders for SQL Server md d:\Data md d:\Logs EOF
VM インスタンスを作成します。クラスタノードとして機能する 2 つの VM で、追加のデータディスクをアタッチし、メタデータキー
enable-wsfc
をtrue
に設定して Windows Server フェイルオーバー クラスタリングを有効にします。REGION=$(gcloud config get-value compute/region) ZONE1=
ZONE1
ZONE2=ZONE2
ZONE3=ZONE3
PD_SIZE=200 MACHINE_TYPE=n2-standard-8 gcloud compute instances create node-1 \ --zone $ZONE1 \ --machine-type $MACHINE_TYPE \ --subnet $SUBNET_NAME \ --image-family sql-ent-2022-win-2022 \ --image-project windows-sql-cloud \ --tags wsfc,wsfc-node \ --boot-disk-size 50 \ --boot-disk-type pd-ssd \ --boot-disk-device-name "node-1" \ --create-disk=name=node-1-datadisk,size=$PD_SIZE,type=pd-ssd,auto-delete=no \ --metadata enable-wsfc=true \ --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1 gcloud compute instances create node-2 \ --zone $ZONE2 \ --machine-type $MACHINE_TYPE \ --subnet $SUBNET_NAME \ --image-family sql-ent-2022-win-2022 \ --image-project windows-sql-cloud \ --tags wsfc,wsfc-node \ --boot-disk-size 50 \ --boot-disk-type pd-ssd \ --boot-disk-device-name "node-2" \ --create-disk=name=node-2-datadisk,size=$PD_SIZE,type=pd-ssd,auto-delete=no \ --metadata enable-wsfc=true \ --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1 gcloud compute instances create "witness" \ --zone $ZONE3 \ --machine-type e2-medium \ --subnet $SUBNET_NAME \ --image-family=windows-2022 \ --image-project=windows-cloud \ --tags wsfc \ --boot-disk-size 50 \ --boot-disk-type pd-ssd \ --metadata sysprep-specialize-script-ps1="add-windowsfeature FS-FileServer"使用しているゾーンに応じて、ZONE1、ZONE2、ZONE3 を置き換えます。
3 つの VM インスタンスを Active Directory に参加させるには、3 つの各 VM インスタンスに対して次の操作を行います。
シリアルポートの出力を表示して、VM の初期化プロセスをモニタリングします。
gcloud compute instances tail-serial-port-output
NAME
NAME
は VM インスタンスの名前に置き換えます。Instance setup finished
という出力が表示されるまで数分待ちます。表示されたら Ctrl+C キーを押します。この時点で、VM インスタンスが使用できるようになります。VM インスタンスにユーザー名とパスワードを作成します。
リモート デスクトップを使用して VM に接続し、前のステップで作成したユーザー名とパスワードを使用してログインします。
[スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。
特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。
コンピュータを Active Directory ドメインに追加して再起動します。
Add-Computer -Domain
DOMAIN -Restart
DOMAIN
は、Active Directory ドメインの DNS 名に置き換えます。VM をドメインに参加させる権限を持つアカウントの認証情報を入力します。
VM が再起動するまで待ちます。VM インスタンスが Active Directory に参加しました。
フェイルオーバー クラスタのデプロイ
これで、VM インスタンスを使用して Windows Server フェイルオーバー クラスタと SQL Server をデプロイできます。以降のセクションでは、この方法について詳しく説明します。
SQL Server の準備
次の手順で、Active Directory で SQL Server 用の新しいユーザー アカウントを作成します。
- リモート デスクトップを使用して、
node-1
に接続します。 ドメイン ユーザー アカウントでログインします。 - [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。
- 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。
SQL サーバーと SQL エージェントのドメイン ユーザー アカウントを作成し、パスワードを割り当てます。
$Credential = Get-Credential -UserName sql_server -Message 'Enter password' New-ADUser ` -Name "sql_server" ` -Description "SQL Admin account." ` -AccountPassword $Credential.Password ` -Enabled $true -PasswordNeverExpires $true
SQL Server を構成するには、node-1
と node-2
の両方で次の操作を行います。
- SQL Server 構成マネージャーを開きます。
- ナビゲーション パネルで [SQL Server Services] を選択します。
- サービスのリストで [SQL Server(MSSQLSERVER)] を右クリックし、[プロパティ] を選択します。
[ログオン] でアカウントを次のように変更します。
- アカウント名:
DOMAIN\sql_server
。DOMAIN
は Active Directory ドメインの NetBIOS 名です。 - パスワード: 前に選択したパスワードを入力します。
- アカウント名:
[OK] をクリックします。
SQL Server を再起動を求めるプロンプトが表示されたら、[Yes] を選択します。
SQL Server がドメイン ユーザー アカウントで実行されるようになりました。
ファイル共有を作成する
VM インスタンス witness
に 2 つのファイル共有を作成して、SQL Server のバックアップを保存し、ファイル共有監視として機能できるようにします。
- リモート デスクトップを使用して
witness
に接続します。ドメイン ユーザー アカウントでログインします。 - [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。
- 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。
監視ファイル共有を作成し、自身と 2 つのクラスタノードにファイル共有へのアクセス権を付与します。
New-Item "C:\QWitness" –type directory icacls C:\QWitness\ /grant 'node-1$:(OI)(CI)(M)' icacls C:\QWitness\ /grant 'node-2$:(OI)(CI)(M)' New-SmbShare ` -Name QWitness ` -Path "C:\QWitness" ` -Description "SQL File Share Witness" ` -FullAccess $env:username,node-1$,node-2$
別のファイル共有を作成してバックアップを保存し、SQL Server に完全アクセス権を付与します。
New-Item "C:\Backup" –type directory New-SmbShare ` -Name Backup ` -Path "C:\Backup" ` -Description "SQL Backup" ` -FullAccess $env:USERDOMAIN\sql_server
フェイルオーバー クラスタを作成する
フェイルオーバー クラスタを作成する手順は次のとおりです。
node-1
のリモート デスクトップ セッションに戻ります。- [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。
- 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。
新しいクラスタを作成します。
New-Cluster ` -Name sql-cluster ` -Node node-1,node-2 ` -NoStorage ` -ManagementPointNetworkType Distributed
witness
の PowerShell セッションに戻り、クラスタの仮想コンピュータ オブジェクトにファイル共有へのアクセス権限を付与します。icacls C:\QWitness\ /grant 'sql-cluster$:(OI)(CI)(M)' Grant-SmbShareAccess ` -Name QWitness ` -AccountName 'sql-cluster$' ` -AccessRight Full ` -Force
node-1
の PowerShell セッションに戻り、witness
のファイル共有をクラスタ クォーラムとして使用するようにクラスタを構成します。Set-ClusterQuorum -FileShareWitness \\witness\QWitness
クラスタが正常に作成されたことを確認します。
Test-Cluster
次のような警告が表示される場合がありますが、無視して問題ありません。
WARNING: System Configuration - Validate All Drivers Signed: The test reported some warnings.. WARNING: Network - Validate Network Communication: The test reported some warnings.. WARNING: Test Result: HadUnselectedTests, ClusterConditionallyApproved Testing has completed for the tests you selected. You should review the warnings in the Report. A cluster solution is supported by Microsoft only if you run all cluster validation tests, and all tests succeed (with or without warnings).
cluadmin.msc
を実行してフェイルオーバー クラスタ マネージャー MMC スナップインを起動し、クラスタの正常性を確認することもできます。Managed AD を使用している場合は、Windows クラスタで使用されるコンピュータ アカウントを Cloud Service Domain Join Accounts グループに追加して、コンピュータをドメインに参加させることができます。
Add-ADGroupMember ` -Identity "Cloud Service Domain Join Accounts" ` -Members sql-cluster$
両方のノードで Always On 可用性グループを有効にします。
Enable-SqlAlwaysOn -ServerInstance node-1 -Force Enable-SqlAlwaysOn -ServerInstance node-2 -Force
可用性グループの作成
サンプル データベース bookshelf
を作成し、bookshelf-ag
という名前の新しい可用性グループに組み込み、高可用性を構成します。
データベースの作成
新しいデータベースを作成します。このチュートリアルでは、データベースにデータが含まれている必要はありません。
node-1
のリモート デスクトップ セッションに戻ります。- SQL Server Management Studio を開きます。
- [サーバーに接続] ダイアログで、サーバー名が
node-1
に設定されていることを確認し、[接続] を選択します。 - メニューで [File] > [New] > [Query with current connection] を選択します。
次の SQL スクリプトをエディタに貼り付けます。
-- Create a sample database CREATE DATABASE bookshelf ON PRIMARY ( NAME = 'bookshelf', FILENAME='d:\Data\bookshelf.mdf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB) LOG ON ( NAME = 'bookshelf_log', FILENAME='d:\Logs\bookshelf.ldf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB) GO USE [bookshelf] SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON GO -- Create sample table CREATE TABLE [dbo].[Books] ( [Id] [bigint] IDENTITY(1,1) NOT NULL, [Title] [nvarchar](max) NOT NULL, [Author] [nvarchar](max) NULL, [PublishedDate] [datetime] NULL, [ImageUrl] [nvarchar](max) NULL, [Description] [nvarchar](max) NULL, [CreatedById] [nvarchar](max) NULL, CONSTRAINT [PK_dbo.Books] PRIMARY KEY CLUSTERED ([Id] ASC) WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO -- Create a backup EXEC dbo.sp_changedbowner @loginame = 'sa', @map = false; ALTER DATABASE [bookshelf] SET RECOVERY FULL; GO BACKUP DATABASE bookshelf to disk = '\\witness\Backup\bookshelf.bak' WITH INIT GO
このスクリプトは、1 つのテーブルで新しいデータベースを作成し、
witness
への初期バックアップを実行します。[実行] を選択して SQL スクリプトを実行します。
高可用性を構成する
これで、T-SQL または Server Management Studio を使用して、可用性グループの高可用性を構成できます。
T-SQL の使用
T-SQL を使用して可用性グループの高可用性を構成する手順は次のとおりです。
node-1
に接続し、次のスクリプトを実行してbookshelf-ag
可用性グループを作成します。CREATE LOGIN [
NET_DOMAIN
\sql_server] FROM WINDOWS; GO USE [bookshelf]; CREATE USER [NET_DOMAIN
\sql_server] FOR LOGIN [NET_DOMAIN
\sql_server]; GO USE [master]; CREATE ENDPOINT bookshelf_endpoint STATE=STARTED AS TCP (LISTENER_PORT=5022) FOR DATABASE_MIRRORING (ROLE=ALL); GO GRANT CONNECT ON ENDPOINT::[bookshelf_endpoint] TO [NET_DOMAIN
\sql_server] GOnode-2
に接続し、次のスクリプトを実行します。CREATE LOGIN [
NET_DOMAIN
\sql_server] FROM WINDOWS; GO CREATE ENDPOINT bookshelf_endpoint STATE=STARTED AS TCP (LISTENER_PORT=5022) FOR DATABASE_MIRRORING (ROLE=ALL); GO GRANT CONNECT ON ENDPOINT::[bookshelf_endpoint] TO [NET_DOMAIN
\sql_server] GOnode-1
で次のスクリプトを実行して、bookshelf-ag
可用性グループを作成します。USE master; GO CREATE AVAILABILITY GROUP [bookshelf-ag] WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY, CLUSTER_TYPE = WSFC, DB_FAILOVER = ON ) FOR DATABASE [bookshelf] REPLICA ON N'node-1' WITH ( ENDPOINT_URL = 'TCP://node-1:5022', AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, FAILOVER_MODE = AUTOMATIC, BACKUP_PRIORITY = 50, SEEDING_MODE = AUTOMATIC, SECONDARY_ROLE(ALLOW_CONNECTIONS = NO) ), N'node-2' WITH ( ENDPOINT_URL = 'TCP://node-2:5022', AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, FAILOVER_MODE = AUTOMATIC, BACKUP_PRIORITY = 50, SEEDING_MODE = AUTOMATIC, SECONDARY_ROLE(ALLOW_CONNECTIONS = NO) ); GO
node-2
に接続し、次のスクリプトを実行して、セカンダリ レプリカを可用性グループに結合し、自動シーディングを有効にします。USE master; GO ALTER AVAILABILITY GROUP [bookshelf-ag] JOIN; ALTER AVAILABILITY GROUP [bookshelf-ag] GRANT CREATE ANY DATABASE;
可用性グループのステータスを確認します。
SELECT * FROM sys.dm_hadr_availability_group_states; GO
synchronization_health_desc
がHEALTHY
として表示されます。
SQL Server Management Studio を使用する
SQL Server Management Studio を使用して可用性グループの高可用性を構成する手順は次のとおりです。
- [Object Explorer] ウィンドウで、[Always On High Availability] を右クリックし、[New Availability Group Wizard] を選択します。
- [Specify Options] ページで、可用性グループ名を
bookshelf-ag
に設定し、[次へ] を選択します。 - [Select Databases] ページで、
bookshelf
データベースを選択し、[Next] を選択します。 [Specify Replicas] ページで、[Replicas] タブを選択します。
- [レプリカを追加] を選択します。
[Connect to server] ダイアログで、サーバー名として「
node-2
」と入力し、[Connect] を選択します。可用性レプリカのリストに SQL Server インスタンス
node-1
とnode-2
が追加されました。両方のインスタンスで、可用性モードを [Synchrounous commit] に設定します。
両方のインスタンスで、自動フェイルオーバーを [Enabled] に設定します。
[次へ] を選択します。
[データ同期の選択] ページで、[自動シード] を選択します。
[Validation] ページで、すべてのチェックが成功したことを確認します。可用性グループ リスナーのチェックは無視できます。
[概要] ページで、[終了] を選択します。
[Results] ページで、[Close] を選択します。
可用性グループの DNN リスナーを構成する
DNN リスナーは、SQL Server クライアントの単一のエンドポイントとして機能します。DNN リスナーを構成する手順は次のとおりです。
node-1
の PowerShell セッションに戻ります。次のスクリプトを実行して、DNN リスナーを作成します。
$Ag='bookshelf-ag' $Port='
DNN_PORT
' $Dns='DNN_NAME
' # create the DNN resource with the port as the resource name Add-ClusterResource -Name $Port -ResourceType "Distributed Network Name" -Group $Ag # set the DNS name of the DNN resource Get-ClusterResource -Name $Port | Set-ClusterParameter -Name DnsName -Value $Dns # start the DNN resource Start-ClusterResource -Name $Port # add the Dependency from availability group resource to the DNN resource Set-ClusterResourceDependency -Resource $Ag -Dependency "[$Port]" # restart the availability group resource Stop-ClusterResource -Name $Ag Start-ClusterResource -Name $AgDNN_PORT
は、DNN リスナーのポートに置き換えます。DNN リスナーポートは、一意のポートとして構成する必要があります。詳細については、ポートに関する考慮事項をご覧ください。DNN_NAME
は、DNN リスナー名に置き換えます。node-1
とnode-2
の両方で、DNN リスナーポートのファイアウォール ルールを作成します。netsh advfirewall firewall add rule name="Allow DNN listener" dir=in action=allow protocol=TCP localport=
DNN_PORT
フェイルオーバーをテストする
これで、フェイルオーバーが想定どおりに機能するかどうかをテストする準備が整いました。
witness
の PowerShell セッションに戻ります。次のスクリプトを実行します。
while ($True){ $Conn = New-Object System.Data.SqlClient.SqlConnection $Conn.ConnectionString = "Server=
DNN_NAME
,DNN_PORT
;Integrated Security=true;Initial Catalog=master" $Conn.Open() $Cmd = New-Object System.Data.SqlClient.SqlCommand $Cmd.Connection = $Conn $Cmd.CommandText = "SELECT SERVERPROPERTY('ServerName')" $Adapter = New-Object System.Data.SqlClient.SqlDataAdapter $Cmd $Data = New-Object System.Data.DataSet $Adapter.Fill($Data) | Out-Null $Data.Tables[0] + (Get-Date -Format "MM/dd/yyyy HH:mm:ss") Start-Sleep -Seconds 2 }DNN_NAME
は DNN リスナー名に、DNN_PORT
は DNN リスナー ポートに置き換えます。このスクリプトは、2 秒ごとに可用性グループ リスナーを使用して SQL Server に接続し、サーバー名を照会します。
スクリプトを実行したままにします。
node-1
のリモート デスクトップ セッションに戻り、フェイルオーバーをトリガーします。- SQL Server Management Studio で、[Always On High Availability] > [Availability Groups] > [bookshelf-ag (Primary)] に移動し、ノードを右クリックします。
- [フェイルオーバー] を選択します。
- [Select new primary replica] ページで、
node-2
が新しいプライマリ レプリカとして選択され、[Failover readiness] 列にNo data loss
が表示されていることを確認します。[Next] を選択します。 - [Connect to replica] ページで、[Connect] を選択します。
- [Connect to server] ダイアログで、サーバー名が
node-2
であることを確認し、[Connect] をクリックします。 - [Next]、[Finish] の順に選択します。
- [結果] ページで、フェイルオーバーが成功したことを確認します。
witness
の PowerShell セッションに戻ります。実行中のスクリプトの出力を確認して、フェイルオーバーの結果として、サーバー名が
node-1
からnode-2
に変更されたことを確認します。Ctrl+C
を押してスクリプトを停止します。
クリーンアップ
チュートリアルが終了したら、作成したリソースをクリーンアップして、割り当ての使用を停止し、課金されないようにできます。次のセクションで、リソースを削除または無効にする方法を説明します。
プロジェクトの削除
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.