SQL Azure Data Sync プレビューを使ってみる ~ クラウドカバー Episode 80
今回のクラウドカバー「Episode 80 - Getting Started with SQL Azure Data Sync Preview」では、Cory と Nick をホストに、Windows Azure のエバンジェリスト Scott Klein からデータ同期を行うサービスである SQL Azure Data Sync の紹介です。
ちなみに、Scott は「Scott Klein による SQL Azure における Throttling 解説 ~ クラウドカバー Episode 68」でも登場しています♪
では、いつものようにニュースから。
◆ The Rock Paper Azure Challenge is Back For a Spring Fling!
Windows Azure 上のじゃんけん(ボット)大会、Rock Paper Azure のお知らせ。
米国以外からの参加は不可、なのが残念ですが、”Open Round” としての登録であれば可能ですので、我こそは!、と思われる方は是非。
(ユーザー登録時に、”Open Round” 参加のチェックボックスをチェックすると、米国住所の登録などの入力をスキップできます)
米国 San Diego カウンティにおいて、災害などの緊急時に情報発信を行うためのサイトを Windows Azure で構築した、という事例の紹介です。
パフォーマンスゴールである 120,000 ページ ビューを Windows Azure の3つのインスタンスで達成できたこと、またコスト面でも緊急時のみスケールアウトすることができるため、オンプレミスのソリューション導入に比較して 78% 程度のコスト削減が可能、と試算しています。
また、Cory からは、日本の MVP の皆様による東日本大震災の際の取り組みについても言及がされています(MVP の皆様による活動に関しては、「Behind the Scenes in Japan, Windows Azure MVPs Help Drive Vital Communications」を参照ください(日本語のブログです))
◆ Updates to Windows Azure Marketplace Offer More Flexibility and Opportunity
Windows Azure Marketplace において行われた2つの更新に関するニュースです。
一つ目として、Windows Azure Marketplace にて「プロモーションコード」が発行できるようになった、というお知らせ。二つ目が、 データクレンジングのサービスの提供が行われる、というお知らせです。
ということで、軽めにニュース紹介を終了し、さくっと本題に。
Scott に SQL Azure Data Sync の説明を始めてもらいます。
まず位置づけについてですが、SQL Azure Data Sync は現在は「プレビュー」として公開中で、正式リリース目指して頑張っている最中だそうです。
Nick が初めて Data Sync のテクノロジーに出会った時には、”Sync Framework” と呼ばれていたころで、データ同期を行わせたい環境にツールをインストールしたり、同期のためのコードを書いたり、という作業が必要でしたが、これが SQL Azure の付加サービス、として 「サービス」 になったのをきっかけに、基本的にはクリックしてコンフィギュレーションを行っていけるような、抽象度高く利用いただけるテクノロジーになっています。
データベースを同期させるのは、競合とかトランザクションの問題とかいろいろあるんだけど、Data Sync サービスは、ノーコーディングで、すぐに同期設定ができるんだよ、と強調する Scott。
Data Sync サービスでは、クラウド上の SQL Azure とオンプレミスの SQL Server との同期も可能で、その場合はオンプレミス側に同期のための Agent を用意する必要があります。
また、SQL Server 2012 で強化された機能として、Dac Pac(ダックパック)と、Bac Pac(バックパック)があり、前者は SQL Server のスキーマ情報を抜き出したもの、後者はスキーマ情報とデータを抜き出したもの、になります。SQL Server 2012 (そして、SQL Server 2012 と同じコアを持つ SQL Azure)では、この Dac Pac と Bac Pac を利用することで、データベースのポータビリティを向上させています(Import/Export により、スキーマ、あるいはスキーマ+データ、の移動が容易になっています)
さて、デモとしては、オンプレミス(Scott のPC)にあるデータベースから、その BacPac を作成するところから始まります。
次に、Management Studio から SQL Azure に接続し、先ほどの Bac Pac を使ってデータベースのインポートを行います。
このデータベース インポートの際に、データベースの作成も行います。その際にウィザードにおいて SQL Azure のデータベースサイズを指定する必要がありますが、このサイズ指定ではインポートするデータサイズ以上の容量を設定しておく必要があります。
また、今回オンプレミスのデータベースを、SQL Azure にコピー(Export/Import)することから作業を始めている理由ですが、Data Sync において、Hub/Spoke の同期設定を行う際に、Hub のデータベースが SQL Azure であること、が必須条件なためです。
さて、データベースの Import は続いていますが、実際の Data Sync の設定は、Windows Azure の管理ポータルから行うことになるので、管理ポータルにて、”Data Sync” のメニューを選択してみましょう。
この画面で、Data Sync を行いたいサブスクリプションを選択し(ポータルの左上の部分。Scott は、”SQLScottAzure” を選択)、 ”Provision Data Sync Preview Server” のアイコンを選択肢、Data Sync の設定を行っていきます。
ウィザードの途中で、Data Sync のサーバーを配置するデータセンターの選択が出てきます。
このデータセンター選択は、ネットワークレイテンシによるパフォーマン低下を避けるため、Sync を行いたいデータベースと同じデータセンターを選択するようにしてください。
一連の作業により、サブスクリプション “SQLScottAzure” の下に、データセンター “South Central US” で稼働する同期用のサーバーが作成されました。
画面を Management Studio に戻すと、先ほど行っていた Bac Pac を用いた SQL Azure へのデータのインポートが終了しています。このデータベースが、Data Sync の設定において、Hub になるデータベースサーバーになります。
次に、Sync Group (同期グループ)の設定を行います。
これは、管理ポータルから実行でき、オンプレミスの SQL Server を同期グループに含める場合は、真ん中のメニューを、SQL Azure だけで同期グループを作成する場合は下のメニューを選択します。
今回 Scott は SQL Server を同期グループに含めることにし、真ん中のメニューをクリックしています。すると、同期グループ設定のためのウィザードが立ち上がります。
さて、同期グループの設定を開始したいところですが、今回の設定では、Hub としては先ほどインポートしたデータベースを利用し、スポークのデータベースをヨーロッパということで設定したい、ということで、ヨーロッパのデータセンターに、新しい SQL Azure のデータベースを用意します。
管理ポータルから、データベース サーバーの作成、Firewall 設定などをさくさくこなす Scott。
この作業で、ヨーロッパのデータセンターに、SQL Azure のあららしいデータベース サーバーが作成されています。
ということで、同期グループの設定に戻ります。
同期グループの設定では、最初に同期グループの名前を設定したのち、Hub データベースの情報を入力します。
同様に、スポークのデータベース設定を行います。
先ほどデータベースサーバーの作成を行ったので、今度は、データベースの作成を行いたいと思います。Management Studio から、ヨーロッパに作成したデータベースサーバーに接続し、Sync 用のデータベースである “SyncDemoEU” を作成します。
準備ができたら、Hub の設定と同様に、必要な情報を管理ポータルから入力します。
なお、この設定の際に同期の方向を指定する箇所があります。
同期の方向は、同期グループごとに設定を行い、適用されるルールであり、テーブル毎に選択を行う、といった粒度にはなっていませんので、留意ください。
さて、Hub / Spoke の設定が以下のように反映されています。
次は、同期の設定を行います。
同期の設定としては、同期のスケジュール(最低5分から選択可能です。また同期の単位としては、”分”、”時間”、”日”、”月” の単位で設定が可能で、最長の設定が1か月、になります。詳しくは「Configure a Sync Group」を参照ください)、およびデータの競合が起きた際に、どのような競合解決を行うか、の選択を行います。
※ データ競合は、Hub のデータベースと、Spoke のデータベースで異なるデータ更新を行った際に発生します。このような場合に競合解決の方法として、Hub のデータを「正」として採用するか(“Hub Wins” の戦略)、Spoke のデータを「正」として採用するか(”Client Wins” の戦略)、を指定しておきます。
次は、実際に同期を行うデータセットの定義を行います。
データセットの定義では、Hub のデータベースにあるテーブル、およびそのテーブルに含まれるカラムを選択可能です。
また、各カラムに対して、フィルター条件を設定することが可能です。
今回のデモでは、欧州のデータベースとの同期、ということで、顧客の国の属性に対して、”Germany” の条件を追加しています。
フィルターは、And および Or の条件で複数設定することが可能です。
さて、同期グループ、および同期の設定が終わったので、この設定内容を “Deploy” します。
これによって、同期グループに含まれるデータベースにおいて、同期のための準備が開始されます。
例えば、Hub のデータベースにおいて、同期のための情報を格納するトラッキング用のテーブルが新たに追加されています。
同様に、Spoke 側のデータベースでは、同期対象として選択されたテーブル、並びにトラッキング用のテーブルが追加されています。
なお、この同期の準備はちょっと時間がかかるので、ちょっと早送り、、、、、、
で、準備が完了したところで、様子を確認すると Hub の設定は “Good” ですが、Spoke の設定で “Warning” が出ているのが確認できました。
ログを確認すると外部キーの制約でエラーが発生しているようです。
どうやら、”顧客” データに関しては国でのフィルターをかけたのですが、”注文” データにおいてフィルターを設定しなかったため、「顧客データと関連付けることができない注文」が発生したようです。
同期ログにおいては、このように同期時のエラー内容を確認できるので、なにか問題が発生した際に後からそのログを参照し、どのような問題が発生したのかを理解することが可能です。
また、Windows Azure ではデータセンター間の通信に関しては料金が発生するため、適切なフィルター設定を行うことは、コスト的にも意味があるよねー、と Cory。
さて、お次はオンプレミスの SQL Server を同期グループに追加したいと思います。
オンプレミスの SQL Server を追加する場合、一番最初に行うべきは、Agent のインストールです。
次に、管理ポータルで Agent の名前を指定し、Agent に渡すためのキーの生成を行います。
生成されたキー情報を、先ほどインストールした Agent に対し入力し、また同期グループに含めたいデータベース情報を入力します。今回、同期グループに含めるデータベースは、このデモの一番最初に登場した SyncDemo データベースです(エクスポートで、Bac Pac を作成したデータベース)。
さて、再び管理ポータルに戻って、ウィザードを進めると、Agent との通信により、インストールした Agent に登録されたデータベースを、同期グループに含むことができるようになっています。
以上の設定により、同期グループに対してオンプレミスのデータベースが Spoke として参加するようになりました。
引き続き、「Deploy」を行うことで、同期の準備が開始されます。
さて、今回同期グループの設定においては、顧客テーブルと注文テーブルを指定しています。一方で、今回同期グループに参加させたオンプレミスのデータベースは、SQL Azure 上にある Hub データベースのコピー元となったデータベースで、それ以外のテーブル(注文詳細、など)も存在します。このような場合は同期グループに参加していないデータベースはそのまま独立して存在し、同期対象となったテーブルだけが同期の対象となります。
さてここで、オンプレミスのデータベースにおいて、”Germany” の顧客で、CustomerID が ALFKI のデータにおいて会社名を “Cory Fowler Inc.” に変更します。
次に、管理ポータルから “Sync Now” を選択し、手動で同期を開始します。
ここで、Scott からの質問。
「オンプレミスの Spoke で行った変更は、同期によって他の Spoke に反映されると思う?」
Cory と Nick の解答は「Yes」。Scott の解答は「No」。
Data Sync においては、Spoke で行った変更が Hub に同期される、のと、Hub に同期された変更が他の Spoke に同期される、のシナリオは個別の Sync として実施されるため、他の Spoke へデータが反映されるのは2回の同期が実行されたのちになります。
30分ごとにスケジュールされた同期を行う、と設定している今回の同期グループにおいては、(手動の同期を行わなければ)最初の同期により Hub までの同期が行われ、次の 30分後の同期によって他の Spoke へ同期が伝えられることとなります。
さて、データ同期が続いていますが、そろそろ Spoke の情報が Hub に反映されたのでは、ということで Hub のデータを確認すると、先ほどオンプレミスの SQL Server で行ったデータ更新が Hub にも反映されていました。
また、データの同期が完了した後、ヨーロッパのデータセンターにある Spoke データベースを確認すると、データの更新が行われていないことがわかります。
このデータに関しては、次回のスケジュールされた同期、あるいは、手動で同期を行うことで、Hub に反映されているデータ(会社名 “Cory Fowler Inc.”)を元に、更新が行われることになります。
ということで、ノーコーディングで、簡単なウィザード操作のみで同期設定が可能な SQL Azure Data Sync サービスの紹介でした!
最後は恒例の Tip of the Week!
今回は、Cloud Ninja Metering Block の紹介。
この Cloud Ninja(クラウドニンジャ)の Metering Block は CodePlex でホストされているプロジェクトで、Windows Azure におけるマルチテナントな SaaS を行う際に、各テナント(顧客)がどの程度のストレージ、および帯域を使用しているかを記録し、レポートしてくれるアプリケーション ブロックです。
このようなデータを利用することで、使用量の上限確認や、使いすぎている顧客を見つける、あるいは、より上位のサービスへの移行を促す、といったことが可能になります。
マルチテナントでの Windows Azure 利用を検討されている方は、ぜひ確認ください。
以上、クラウドカバー Episode 80、SQL Azure Data Sync プレビューを使ってみる、の紹介でした。