Azure SQL DatabaseのアクティブGEOレプリケーションを設定してみた
Azure SQL DatabaseはSQLServerのPaaSサービスですが、標準で自動バックアップや別リージョンへのレプリケーションが付いているので、わざわざオンプレでSQLServerのDBサーバー立てるくらいならAzure SQLDatabase使っちゃおうよ、と思うようになりました。
SQLServerとSQLDatabaseの違い
SQLServerAgentのような別プロセスからのDBへのアプローチやDBメールが利用できない点に注意。
アクティブGEOレプリケーション
Azure SQL DatabaseのSLAは99.99%とはいえ、やはり別リージョンへのレプリケーションはとっておきたいところ。
オンプレミスで他拠点に設置したサーバーへのレプリケーションの構築は一仕事ですが、SQLDatabaseはPaaSなので比較的簡単に構築できます。
また、フェールオーバーグループで設定した接続文字列を使えばアプリケーション側で接続先のサーバーを意識する必要がないため、アプリの再デプロイや設定変更が不要となる点も魅力ですね。
構築
SQLDatabaseの構築はウィザードに進んで設定するだけなので割愛します。
SQLDatabase > 概要 > サーバー名を選択します。
設定 > フェールオーバーグループを選択します
グループの追加を選択します
フェールオーバー先の設定を行います
フェールオーバーグループ名(この名前が接続文字列となります)を入力し、レプリケーション先のサーバーを作成します。既存のサーバーがあれば選択しますが、今回は新規に作成します。
レプリケーション先は東南アジアにしてみました。
機能 | 内容 |
---|---|
読み込み/書き込みのフェールオーバーポリシー | フェールオーバーを自動で行うかを選択します |
猶予時間 | フェールオーバーを行うまでの猶予時間です |
設定終わり
以上で設定は完了です。簡単。 尚、サーバーファイヤウォールの設定はセカンダリサーバーにも同様の設定が必要です
検証
フェールオーバーグループの接続文字列で接続し、サーバー名を確認。
プライマリサーバー名になっています。
強制フェールオーバーを行い、再度サーバー名を確認
先程設定したフェールオーバー先のサーバー名になっており、フェールオーバーに成功したことが確認できました。
読み取り専用
尚、このアクティブGEOレプリケーションは、「読み取り専用リスナーポイント」で接続すれば通常時でもセカンダリサーバーを読み取り専用サーバーとして利用することができます。
多少のタイムラグがあるため、リアルタイム性を求めないような前日までの集計や月間バッチ処理などであれば負荷分散用サーバーとして利用することもできます。
便利ですね。
宿題
- サーバーファイヤウォールの設定を共通化できないのか?
- フェールオーバーの猶予時間が理解できていない