SQL Data Syncでオンプレミスとクラウドを同期する方法・・・だけど。。
SQL Azure Data Sync改めSQL Data Syncは、クラウドとオンプレミスのデータ同期にも対応しています。
データ同期をするために、オンプレミス環境にSQL Data Sync Agentをインストールする必要があります。
SQL Data Syncは、Agentを介してAzure SQL Detabaseに配置されたハブデータベースと
同期をとります。
Question
オンプレとWindows Azure SQL DatabaseをData Syncで同期する場合、
その通信ってどうなってるのでしょう?
知りたいことは、ポート何番を開ければいいのか?Proxyなどがあっても平気か?
その他、気にしなきゃいけないことは?
検証
その答えを探し求めるのに最適な環境が、Win2008R2+SQL2012 on Azureな環境です。
多少時間はかかりますが、数クリックと簡単な入力をして放置しておけば、
クラウド上に素敵な評価環境ができあがります。
// 懸念点は、Azure内なので通信がすかすかじゃないか・・・という事ですが(^^;
// きっと大丈夫!きっと。
そんなこんなでできたSQL2012 on Azureな環境のエンドポイントは、次のような定義がされています。
リモートデスクトップ以外は空いていないことが確認できます。
そこにSQL Data Sync Agentをインストールします。
インストール時に次のようなメッセージが表示されています。
This account must have network access to reach Microsoft SQL Data Sync Service through your network’s proxy.
ネットワークプロキシを通過してSQL Data Syncサービスにネットワーク越しにアクセスできるアカウントを設定してね!と書いてます。
つまり、ネットワークプロキシの認証を気にする必要があるってことですね。
残念ながら環境が無いので、未検証。
インストールが完了すると、Microsoft SQL Data Syncというサービスが起動します。サービスの実行ユーザは、インストール時に指定したユーザになっています。
インストール時に、FireWallの設定を変更するのかな?っと思い、FireWallのルールを確認してみました。
特にSQL Data Sync専用と思えるポートは空いてないですね。
TCPViewでポートの使用状況を確認してみましょう。
PIDから上の2つがSQL Data Syncサービスが使用しているものと分かります。
ネットワークキャプチャーを見てみると、SSL通信をしていることがわかります。
ためしに443通信をWindows Firewallでブロックしてみます。
ブロックすると、TCPViewでもNetwork MonitorでもSQL Data Syncの通信を確認できなくなりました。
その状態で、ポータルで確認すると・・・。
まとめ
- Agentの実行ユーザは、ネットワークプロキシのユーザー認証を通過できるアカウントであること
- ユーザーアカウントなどを使用してしまうと
定期パスワード変更などを実施すると、SQL Data Syncの設定も変更しないと同期できなくなる - 通信として、サーバーから外への443通信は必須
それ以外は・・・・うーん、今のところ気づかない。 - Preview版で、未だマイクロソフトはサポートの提供を開始していないので、
本番運用での利用はお勧めできない。何かあった時に自力解決することが必要。
SLAも提供されて・・・ないはずなので。 - データ同期の為に複数のテーブルが追加される。
また差分をトレースするために同期対象テーブルにトリガーが生成されたりする。
なので、設計書な世界で生きている人は大変かも?
本番DBのスキーマが微妙に変わるので覚悟して臨むと良い。
ディスカッション
コメント一覧
Sync Frameworkなので、テーブルの追加、トリガーの追加、ストアードプロシージャの追加は致し方ありませんね。あと、Table をTruncateしてしまったりBulk Insertした場合動機用テーブルが更新されず、同期できないんで注意がいります。また、DBミラーみたいにスキーマー変更にまでは対応してないと言うより、ユーザーテーブルのスキーマーを変更すると動かなくなるので、動機元のテーブルを変更するときは最初からやり直しになります。