Azure SQL Databaseはgeoレプリケーションをサポートしており管理ポータルから数クリックで冗長構成を実現できます。 レプリケーションとは同じデータを持つデータベース(レプリカ)を2つ以上別のデータセンターなどに配置しておくことによって、データを保証したり可用性を実現するものです。 例えば1つのデータベースに障害が発生したとき、同じデータを持つデータベースが別のサーバーにあれば即座に元のデータを復元できます。 さらに、データベースに障害が発生した時にレプリカのデータベースが障害が発生したデータベースの代わりにマスターDBになることでフェールオーバーを実現します。 geoレプリケーションとは地理的に離れたデータセンター間でデータをレプリケーションすることを指します。 今回はAzure SQL Databaseをつかってgeoレプリケーションを実現してみましょう。 今回の構成はこのようにします。 SQL Databaseは東日本リージョンと米国西部リージョンの2つでレプリケーションすることとし、App Serviceからのトランザクションをさばきます。 上記の構成では東日本リージョンにあるDBのみにデータを書き込むことができ、このようなDBをMaster(Azureの場合はプライマリ)と呼びます。 米国西部にあるリージョンは読み込み専用とし、App Serviceからの読み込みのみのトランザクションを受け付けます。このようなDBをSlave(Azureの場合はセカンダリ)と呼びます。 もし東日本リージョンで障害が発生し、Masterが機能しなくなったとき、SlaveのDBがMasterに昇格し、書き込み可能となることでフェールオーバーを実現します。 WebAppsを作る まず最初に、DBにアクセスするためのWebアプリケーションを作成します。 リージョンは東日本とします。 Master DBを作る 東日本に置くMaster DBを作ります。 リージョンは東日本とし、サーバーも新しく作成してください。 価格レベルは一番安いもので大丈夫です。 Slave DBを作る 続いてレプリカ用のSlave DBを作ります。 先ほど作成したMaster DBの管理画面を開き、「geo レプリケーション」を選択します。 ターゲットリージョンから「米国西部」を選択します。 Slave DBの構成を聞かれますがMasterと同じ性能にしなければいけないのでそのままにします。 サーバーは米国西部に新しく作成します。 Slave DBを作成することができたらレプリケーションは完了です。 プライマリと表示されているのがMasterでセカンダリと表示されているのがSlave DBです。 ASP.net MVCから接続するアプリケーションを作る ではこれらの冗長構成のSQL DatabaseのMaster DBにデータを入れるアプリをASP.netで作ってみます。 ASP.net MVCで新規プロジェクトを作成します。 NugetからEntityFrameworkを追加します。 Web.configを編集し、接続文字列を追加します。 接続文字列は作成したMaster DBの管理画面から取得することができます。 接続文字列の中にはユーザー名とパスワードが埋まっていないので自身のDBServerに設定したユーザー名とパスワードを設定します。 接続文字列の名前は後ほど作成するDbContextと同じものにする必要があります。今回はItemContextとしました。 […]