演習 - General Purpose 高可用性
前のユニットでは、Azure SQL の高可用性アーキテクチャについて学習しました。 この演習では、Azure SQL Database の General Purpose レベルがオンプレミスのフェールオーバー クラスター インスタンスと同じように動作するしくみを学習します。 この機能は、オンプレミスでの設定に時間がかかる場合や面倒になる場合がありますが、Azure SQL を使用すると、すぐに使用できます。
この演習では、前のモジュールで使用した ostress ツールを使用してワークロードを作成します。 その後、Azure Cloud Shell で Azure PowerShell モジュールを使用してフェールオーバーを開始します。 最後に、フェールオーバーが ostress ワークロードに与える影響を確認します。
Azure SQL General Purpose サービス レベルの基本的な高可用性
この演習では、次の手順を行います。
- ostress ワークロードを実行する。
- 環境が正しく構成されていることを確認する。
- PowerShell を使用して、Azure SQL Database のフェールオーバーを開始する。
- Ostress で結果を表示する。
- フェールオーバーが発生した兆候をポータルで探す。
ostress ワークロードを実行する
最初の手順は、実行時間の長いワークロードを作成することです。 このワークロードにより、フェールオーバーがデータの読み取りおよび書き込みの機能に与える影響、および Azure SQL Database の General Purpose サービス レベルでフェールオーバーにかかる時間を確認できます。 ostress を使用します。
ローカル コンピューターで新しいコマンド プロンプト ウィンドウを開きます。
cd
を使用して、前にクローンまたはダウンロードしたリポジトリの、可用性モジュールが含まれるディレクトリに移動します。 たとえば、次のコマンドを使用できます。cd C:\Users\username\mslearn-azure-sql-fundamentals\05-Availability
ostress 実行可能ファイルは、このフォルダー内にあります (小さいです)。ostress ワークロードによって接続され、簡易クエリが 5 万回実行されます。
次の ostress スクリプトを使用して、ワークロードを実行します。
serverName
を、ご利用の Azure SQL Database 論理サーバーの名前に置き換えます。password
を、ご利用のパスワードに置き換えます。.\ostress.exe -S"serverName.database.windows.net" -Q"SELECT COUNT(*) FROM SalesLT.Customer" -U"cloudadmin" -d"AdventureWorks" -P"password" -n1 -r50000
ワークロードが正常に実行されている場合は、コマンド プロンプト ウィンドウに、クエリの結果
847
が繰り返し表示されます。完了する前に ostress ワークロードの実行を停止する場合は、ターミナルの Ctrl + C キーを押します。
ワークロードを再度実行する場合は、そのコマンドをもう一度実行できます。
Azure Cloud Shell で PowerShell を使用してフェールオーバーを開始し、結果を確認する
このページの右側にある Azure Cloud Shell ターミナルで、この PowerShell スクリプトを実行して環境を構成します。
$resourceGroup = "<rgn>[sandbox resource group name]</rgn>" $database = "AdventureWorks" $server = Get-AzureRmSqlServer -ResourceGroupName $resourceGroup $server = $server.ServerName # Specify your default resource group and Azure SQL Database logical server az configure --defaults group=$resourceGroup sql-server=$server # Confirm the defaults are set az configure --list-defaults
このブラウザーとコマンド プロンプト ウィンドウを同時に表示できるように、ウィンドウを構成します。
Azure Cloud Shell ターミナルでこのコードを実行します。
# Create a failover Invoke-AzSqlDatabaseFailover -ResourceGroupName $resourceGroup ` -ServerName $server ` -DatabaseName $database
コマンド プロンプト ウィンドウで ostress の結果を確認します。 このコマンドが実行されている間、コマンド プロンプト ウィンドウに表示されるすべての変更を確認する必要があります。 フェールオーバーが行われている間は、データベースにアクセスできないことがわかります。 約 30 秒後にフェールオーバーが完了すると、ワークロードが再び正常に実行されていることを確認できます。 (さまざまな理由のために) Azure によってフェールオーバーが実行された場合に、アプリケーションに障害が発生したり、フェールオーバーにかかる時間よりも長いダウンタイムが発生したりしないようにするために、アプリケーションの再試行ロジックは非常に重要です。
コマンドでフェールオーバーを作成するこの機能は、特定のシナリオで役立ちます。 サービスによって、この処理が頻繁に行われないように調整されることに注意してください。 次のコマンドを実行して、別のフェールオーバーを実行します。
# Create a failover again Invoke-AzSqlDatabaseFailover -ResourceGroupName $resourceGroup ` -ServerName $server ` -DatabaseName $database
次のようなエラーが表示されます。
Invoke-AzSqlDatabaseFailover: Long running operation failed with status 'Failed'. Additional Info:'There was a recent failover on the database or pool if database belongs in an elastic pool. At least 15 minutes must pass between database failovers.'
これで、コマンド プロンプト ウィンドウを選択し、Ctrl + C キーを選択して、ウィンドウでワークロードを停止できるようになりました。 次の演習でも同じワークロードを使うので、ウィンドウは開いたままにしておいてかまいません。
フェールオーバーが発生したかどうかを確認する方法があるのか疑問に思うかもしれません。 現在、"フェールオーバーが発生しました" という明確なメッセージはありませんが、Resource Health は適切な指標になる可能性があります。
Azure portal で、Azure SQL Database に移動します。 左側のペインの [ヘルプ] で、[Resource Health] を選びます。 フェールオーバー後、5 から 15 分の間に、次のスクリーンショットに示すような正常性イベントが表示されることがあります。 このイベントはいくつかのことを示している可能性がありますが、その 1 つが、何かが発生したために Azure によってフェールオーバーが実行されたことを示している可能性があります。