SQL Server の AlwaysOn と ILB
このポストは、10 月 1 日に投稿された SQL Server AlwaysOn and ILB の翻訳です。
Azure が提供するインフラストラクチャ サービスの SQL Server AlwaysOn 可用性グループは、2013 年 8 月からサポートが開始されました (英語)。また、Azure サービスの内部負荷分散 (Internal Load Balancing: ILB) 機能は 2014 年 5 月にプレビューがリリースされ、7 月に一般提供が開始されました (英語)。今回、SQL Server AlwaysOn 可用性グループで ILB を実行できるようになり、この 2 つの機能を同時にご利用いただけるようになりました。可用性グループは、SQL Server で高可用性と災害復旧を実現するための最も重要なソリューションです。高可用性グループ リスナーを使用すると、構成内に存在するレプリカの数にかかわらず、クライアント アプリケーションがシームレスにプライマリ レプリカと接続できます。
リスナー (DNS) 名は負荷分散対象の IP アドレスにマッピングされ、Azure のロード バランサーが受信トラフィックをレプリカ群のプライマリ サーバーにのみ転送します。これまでは、この負荷分散対象の IP アドレスはインターネットから接続可能なパブリック IP アドレスである必要があり、リスナーへのアクセスを信頼できるエンティティのみに制限する場合、エンドポイントのアクセス制御リスト (ACL) を使用する必要がありました。しかし、ACL の保守は特定のシナリオでは手間がかかり、また通常は時間の経過と共に困難になります。
これを大幅に改善するために、今回 Azure の ILB で SQL Server AlwaysOn (リスナー) のエンドポイントをサポートすることを発表しました。これにより、リスナーのアクセス制御、および負荷分散対象の IP アドレスを Virtual Network (VNET) のサブネットを指定して選択することができるようになりました。リスナーで ILB を使用すると、SQL Server のエンドポイント (例: Server=tcp:<リスナー名>,1433;Database=<データベース名>) へのアクセスを下記からのものだけに制限できます。
- Virtual Network 内のサービスおよび VM
- オンプレミスのネットワークから接続されているサービスおよび VM
- Virtual Network から相互接続されているサービスおよび VM
内部ロード バランサーはこれまでと同様に Azure ポータルでは使用できないため、今後も下記のように Powershell スクリプトで構成する必要があります。
*次の例では、「Subnet-1」というサブネットを含む Virtual Network を使用しています。
# 内部ロード バランサーをサービスに追加
Add-AzureInternalLoadBalancer -InternalLoadBalancerName ILB_SQL_AO -SubnetName Subnet-1 -ServiceName SqlSvc
# 負荷分散対象のエンドポイントを ILB に追加
Get-AzureVM -ServiceName SqlSvc -Name sqlsvc1 | Add-AzureEndpoint -Name "LisEUep" -LBSetName "ILBSet1" -Protocol tcp -LocalPort 1433 -PublicPort 1433 -ProbePort 59999 -ProbeProtocol tcp -ProbeIntervalInSeconds 10 -InternalLoadBalancerName ILB_SQL_AO | Update-AzureVM
Get-AzureVM -ServiceName SqlSvc -Name sqlsvc2 | Add-AzureEndpoint -Name "LisEUep" -LBSetName "ILBSet1" -Protocol tcp -LocalPort 1433 -PublicPort 1433 -ProbePort 59999 -ProbeProtocol tcp -ProbeIntervalInSeconds 10 -InternalLoadBalancerName ILB_SQL_AO | Update-AzureVM
ILB の詳細については、こちらの MSDN ドキュメントまたは ILB に関する前回のブログ記事を参照してください。