Azure SQL Databaseで、Elastic PoolにGEOレプリケーションする時にハマった話
はじめに
Azure SQL Databaseは単独リージョンへの展開のみで 99.99% の可用性をSLAで保証しています。(SQL Database の SLA)
とはいえ「2017年3月 のAzure障害祭り」のようなことが発生することも事実です。
(私個人としては、”Azure(やクラウド)批判派”ではなく”Azure(クラウド)推進派”であり、障害は起こる前提を想定すべき、との立場です)
単独で 99.99% のアベイラビリティに加えて「GEOレプリケーション」を組んでおく事が、さらなる安心、さらなるアベイラビリティの向上につながります。
という事で(仕事上のこともあり)、Azure SQL DatabaseのGEOレプリケーションについて調べる中で、少しハマった事がありましたので、ここにメモしておきます。
行おうとした事は以下です。
- 複数のデータベースを東日本リージョンに作成する
- 複数のデータベースは、1つのエラスティック データベース プールを利用する
- 複数のデータベースは、それぞれ西日本リージョンにGEOレプリケーションする
- 西日本リージョンのGEOレプリケーション先は、マスターより eDTU値 を落としたエラスティック データベース プールとする
1. マスターのSQL Databaseを作成
Azureポータルを表示します。
1.1. 1つ目のSQL Databaseを作成
「新規作成 → SQL Databaseを検索」します。
「SQL Database」を作成します。
作成するSQL Databaseは以下の設定とします。
データベース名: RdExampleSQL1
リソースグループ: RdExampleSQL
サーバー: サーバー名 rdsqlsrv1 / 場所 東日本
SQLエラスティックプールを使用。
エラスティックプールデータベース: 名前 RdSqlPool1 / 価格レベル Standard Pool / プールの構成 200 eDTU
「作成」ボタンをクリックしたら、デプロイが完了するまでしばらく待ちます・・・
1.2. 2つ目のSQL Databaseを作成
先程と同様の手順にてSQL Databaseの作成を行います。
構成内容は以下とします。
データベース名: RdExampleSQL2
リソースグループ: RdExampleSQL
SQLエラスティックプール使用: あり
エラスティックプールデータベースプール: RdSqlPool1(先程作成したRdExampleSQL1と共通のプール)
以上で東日本リージョンに「RdSqlPool1」というエラスティック データベース プール上に、2つのデータベース「RdExampleSQL1」と「RdExampleSQL2」が作成されました。
1.3. [NG!!]Geoレプリケーションを構成
ここからが、私がちょっとハマった点です。。。
「RdExampleSQL1」SQLデータベースを西日本リージョンにGEOレプリケーションさせようとしました。
「RdExampleSQL1」を選択します。
「geoレプリケーション」を選択します。
レプリケーション先として「西日本」リージョンを選択します。
すると、「エラスティック データベース プール」が選択できません。
「対象サーバー」を構成しても「エラスティック データベース プール」はロックされた状態のままです。
ここで一度、私は「GEOレプリケーションにはエラスティック データベース プールが使えないのではないか?」と考えてしまいました・・・
が、事実はそうではなく以下の手順を行うことで可能でした。
(ちなみに、以下の方法は帰宅途中の電車の中で突然「もしかして!?」と思いつきました。人間の突然の思いつき、は不思議・・・^^;)
2. レプリケーション先のエラスティック データベース プールを作成
正しい手順としては、「1.2. 2つ目のSQL Databaseを作成」の続きになります。
「新規作成 → SQL エラスティック データベース プール」を検索・作成します。
以下の画面で、「サーバー」をクリックし、「新しいサーバーの作成」を選択します。
サーバー構成は以下とします。
サーバー: rdsqlsrv2
場所: 西日本
「プールの構成」をクリックします。eDTU を 50 に設定します(マスターの eDTU 200 より低い値)。
「作成」ボタンをクリックしたら、デプロイが完了するまでしばらく待ちます・・・
以下が、西日本リージョンに「エラスティック データベース プール(RdSqlPool2)/ サーバー(rdsqlsrv2)」が作成された画面です。
3. Geoレプリケーションを構成
では RdExampeSQL1(東日本リージョン) を西日本リージョンにGEOレプリケーションしましょう。
RdExampleSQL1(SQLデータベース)を選択し、「geoレプリケーション」メニューをクリックします。
レプリケーション先として「西日本」リージョンを選択します。
以下の画面で、「対象サーバー」をクリックすると、先程作成した「rdsqlsrv2」が選択することができます。
「rdsqlsrv2」を選択します。
「エラスティック データベース プール」をクリックします。
「RdSqlPool2」を選択します。
「OK」ボタンをクリックすると、デプロイが開始されます。
RdExampeSQL2 についても同様の geoレプリケーション 設定を行います。
4. 作成結果
以上の操作により、以下のようなAzure SQL Database構成が完成しました。
- 東日本リージョンのエラスティック データベース プールは 200eDTU
- 東日本リージョンの2つのデータベース「RdExampleSQL1 / RdExampleSQL2」は西日本リージョンの 50 eDTU 環境のレプリケーションされている
まとめ
ということで、Azure SQL Databaseにおいて、無事、2リージョン間で「エラスティック データベース プールによるGeoレプリケーション」が完成しました。
エラスティック データベース プールを使うか、データベース個別にDTUを確保するか等はシステム規模や要件、コストにより要検討事項ですが、決した安くはないクラウドにおいて、適切なプランや構成を選択していきたいですね。
また、今回「Amazon RDS」も並行して調べてみたのですが、RDSの場合はMulti-AZ構成にしても「SQL Serverを使用した場合には、アベイラビリティに関するSLAが付かない」という点にちょっとびっくりしました。「MySQL, MariaDB, Oracle or PostgreSQL」の場合には 99.95% のアベイラビリティがSLAされます。
という個人的にハマったことを含めての投稿でした。
※週末にはまたCosmos DB入門の続きを書きますー、ではー。