SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Database の Geo レプリケーションに自動フェールオーバーグループの機能が追加されました

one comment

SQL Database の Geo レプリケーションに、自動フェールオーバーグループの機能が新規に追加されました。

Auto-Failover Group capabilities

Azure SQL Database now supports transparent geographic failover of database groups

 

基本的な動作については de:code 2017 の まかせて! Azure SQL Database で (山本さんが) お見せできるかなと。

今までの Geo レプリケーションは、プライマリと複数の非同期セカンダリを異なるデータセンターに作成することができ、フェールオーバーも任意 (または、自動) に実行することができたのですが、接続先に関しては、透過的にプライマリに接続される仕組みを持っていなかったため、フェールオーバーの実行後には、明示的な接続文字列の変更が必要となっていました。

今回の自動フェールオーバーグループでは、透過的なプライマリまたは、セカンダリへの接続を行うことができる二つのリスナーを準備することが可能となっています。

  • 読み取り/書き込みリスナー
    • プライマリサーバーを示す DNS レコード (グループ名.database.windows.net)
    • フェールオーバーを実行した後は、DNS レコードが旧セカンダリサーバーに向くように変更される
  • 読み取り専用リスナー
    • セカンダリサーバーを示す DNS レコード (グループ名.secondary.database.windows.net)
    • フェールオーバーを実行した後は、DNS レコードが旧プライマリサーバーに向くように変更される
    • セカンダリサーバーが使用できない場合には、プライマリサーバーに向くように構成することもできる (AllowReadOnlyFailoverToPrimary)
  • データ損失の猶予期間 (GracePeriodWithDataLossHours)
    • プライマリ / セカンダリは非同期でレプリケーションが実行されるため、自動フェールオーバーが発生する場合の、データ同期の損失の猶予期間を設定することができる
    • 設定を変更することで、完全なデータ同期が行われていない状態で障害が発生した場合に、フェールオーバーを行う前の待機時間を制御することが可能
      完全なデータ同期が行われている状態 (フレンドリフェールオーバーが可能) ではない場合に、どの程度の猶予期間をおいてフェールオーバーするかを設定できる (フレンドリフェールオーバーが可能な場合は、猶予期間に達していなくてもフェールオーバーしてくれる)

サーバーについては、同一の地域には設定することができないため

  • プライマリ : 東日本 / セカンダリ : 東日本

ではなく、

  • プライマリ : 東日本 / セカンダリ : 西日本

というような配置にすること必要があります。
(ペアリージョンではなく、ほかの国に配置も可能です。)

最初の設定としては、以下のようなコマンドでフェールオーバーグループを作成します。

$PName = "<プライマリサーバー>"
$SName = "<セカンダリサーバー>"
$Rgroup = "<リソースグループ>"
$Fgroup = "<フェールオーバーグループ名>"

# Failover Group の設定
New-AzureRmSqlDatabaseFailoverGroup -ResourceGroupName $Rgroup -FailoverGroupName $Fgroup `
-ServerName $PName `
-PartnerServerName $SName `
-FailoverPolicy Automatic  # Automatic or Manual

これにより、New-​Azure​Rm​Sql​Database​Failover​Group に記載されているエンドポイントが作成されます。

Two Azure SQL Database TDS endpoints are created at ‘.’ (for example, ‘.database.windows.net’) and ‘.secondary..’ These endpoints may be used to connect to the primary and secondary servers in the Failover Group, respectively. If the primary server is affected by an outage, automatic failover of the endpoints and databases will be triggered as dictated by the Failover Group’s failover policy and grace period.

GracePeriodWithDataLossHours で、障害発生してから、データ損失が発生する可能映画ある場合の切り替えを行うまでの猶予期間を設定できます。
プライマリ/セカンダリ間はGeo レプリで同期されているため、非同期で同期が行われているため、猶予期間が設定できるのですが、この猶予期間はデータ損失がある場合の待機になるはずで、障害発生時にデータ同期が完了しており、データ損失が発生しない場合には (フレンドりフェールオーバーが可能)、この猶予期間は考慮することなく自動フェールオーバーされる仕様のようです。

AllowReadOnlyFailoverToPrimary による、セカンダリンに続できない場合に、読み取りアクセスをプライマリに流すことを許可するかということをオプションとして設定できるようです。

オプションの詳細については、Auto-Failover Group capabilities を見ていただくとよいかと。

 

これで、フェールオーバーグループのエンドポイントが作成されるのですが、これだけで完了ではありません。
次に Add-​Azure​Rm​Sql​Database​To​Failover​Group を使用して、グループにデータベースを追加します。
(DB を追加することで、エンドポイント経由のアクセスが可能となるようで、DB を追加するまでは、エンドポイント経由でのアクセスはできませんでした。)

# データベースの登録
$DB = Get-AzureRmSqlDatabase -ResourceGroupName $Rgroup -ServerName $PName -DatabaseName "<DB 名>"
Add-AzureRmSqlDatabaseToFailoverGroup -ResourceGroupName $Rgroup -FailoverGroupName $Fgroup `
-ServerName $PName `
-Database $DB

これで、フェールオーバーグループをスイッチすると、グループ内に含まれる DB のプライマリとセカンダリが切り替わります。

スイッチに関しては、以下のようなコマンドで実行可能です。

# Failover Group のスイッチ
Switch-AzureRmSqlDatabaseFailoverGroup -ResourceGroupName $Rgroup -ServerName $SName -FailoverGroupName $Fgroup
Switch-AzureRmSqlDatabaseFailoverGroup -ResourceGroupName $Rgroup -ServerName $PName -FailoverGroupName $Fgroup

スイッチすることで、プライマリとセカンダリのフェールオーバーと DNS レコードの切り替えが行われます。
DNS の切り替え にちょっと時間かかるようで、コマンド実行して即時に接続はできないようですが、待っていればプライマリの接続先が変わります。
(TTL は短めのようですが、最新の情報になるまで時間かかっていました。)

フェールオーバーグループは、複数作成することができ、グループ内には複数のデータベースを追加することができますのでこの辺は、AlwaysOn 可用性グループのような構成をイメージするとよいかと思います。

Written by masayuki.ozawa

5月 12th, 2017 at 9:59 am

Posted in SQL Database

Tagged with

One Response to 'SQL Database の Geo レプリケーションに自動フェールオーバーグループの機能が追加されました'

Subscribe to comments with RSS or TrackBack to 'SQL Database の Geo レプリケーションに自動フェールオーバーグループの機能が追加されました'.

  1. […] SQL Database の Geo レプリケーションに自動フェールオーバーグループの機能が追加されました […]

Leave a Reply

*