SQL Database の プレミアムではアクティブジオレプリケーションを利用することが可能です。
Azure SQL データベースの継続性
今まで設定したことがなかったので少し情報をまとめておきたいと思います。
アクティブジオレプリケーションについての情報は以下のドキュメントから追えるかと。
Geo-Replicaton in Azure SQL Database
Azure SQL データベースのアクティブ ジオレプリケーション
ジオレプリケーションの設定はポータルの [ジオ (主要地域) レプリケーション] からセカンダリを追加することで使用することができます。
Standard で設定をしようとた場合は、アクティブジオレプリケーションは設定できず、オフラインのジオレプリケーション (スタンバイセカンダリ) のみが設定できます。
プレミアムを使用している場合は、オフラインの他に [オンライン (読み取り専用)] のジオレプリケーションを設定することができます。
レプリケーションの状態が [保留中] → [シード中] → [アクティブ] と変わっていき、[アクティブ] になれば初期の複製が終わった状態で使用することができるようになります。
アクティブジオレプリケーションは非同期でレプリケーションが行われますが、軽く試してみた範囲ではそれほど同期の遅延はないように感じました。
Microsoft Azure SQL データベースのアクティブなジオレプリケーション機能は、同じ Azure リージョン内または異なるリージョン間でデータベースの冗長性を提供するしくみを実装します (地理的冗長性)。アクティブなジオレプリケーションは、データベースのコミット済みトランザクションを、別のサーバーにある最大 4 つのデータベース コピーに非同期にレプリケートします。
レプリケーションの状態については sys.dm_continuous_copy_status で確認をすることができます。
アクティブジオレプリケーションという名前の通り、セカンダリを読み取りで利用することはできますが、更新を行おうとすると以下のようなエラーとなります。
Failed to update database ‘Premium’ because the database is an active secondary database.
アクティブでないレプリケーションの場合は以下のようなメッセージが表示されアクセスができません。
# オフラインのジオレプリケーションの場合は、どのようなオブジェクトが作られているかをセカンダリで見ることもできないようですね。
Connection to an offline secondary database is not allowed. See ‘http://go.microsoft.com/fwlink/?LinkID=402429&clcid=0x409′ for more information.
使い勝手としては AlwaysOn 可用性グループの読み取り可能なセカンダリと同じ使い勝手かもしれませんね。
# リスナーを使用した単一アクセスポイントの透過利用はアクティブジオレプリケーションではないようですので、接続文字の切り替えは必要そうですが。
セカンダリではプライマリのデータを適用したタイミングで、そのデータ自体がメモリにキャッシュされるようで、AlwaysOn 可用性グループと同様に、セカンダリを読み取りで使用した場合もできるだけレスポンスがよいような設計になっているみたいですね。
Table ‘sample_table’. Scan count 1, logical reads 25114, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
以下はデータ更新直後にセカンダリで SELECT を実行した結果なのですが、物理読み取りは発生せずに、論理読み取りのみが発生しています。
Table ‘sample_table’. Scan count 1, logical reads 25114, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
フェールオーバーを想定して、セカンダリを書き込みで使用したい場合 (障害発生時を想定) は、セカンダリの停止によりジオレプリケーションを停止することで、書き込みが可能となります。
ジオレプリケーションはレプリケーション先のサーバーに既に同一のデータベース名が存在している場合は設定ができませんので、サーバーが復旧した場合などはレプリケーション先のデータベースはリネームする等の対応が必要になるかと思います。
# アクティブな geo レプリケーション設定でのフェールオーバー に書かれている内容になります。
マネージドサービスだとクリックベースでレプリケーション環境が構築できて楽でよいですね~。