こんにちは、テクニカルサポートエンジニアの宮本です。
今回は CData Sync のクラスタリング機能について紹介したいと思います。
CData Sync のクラスタリング機能
CData Sync に去年追加されたこの機能ですが、名前の通り複数インスタンスでCData Sync を起動してジョブをそれぞれに自動的に振り分けて実行する機能になります。
www.cdata.com
これにより、ジョブ実行時の負荷を分散させられるほか、可用性の面でも片方が落ちても継続してジョブを実行し続けることが可能になります。
ちなみに分散される単位はジョブになり、このような1ジョブに設定されている個々のクエリの並列実行はまた別な機能になります。
並列処理についてはこちらの記事をご参照願います。
手順
まず事前に必要なものは下記になります。
- CData Sync をインストールするインスタンスを2台
- 各サーバからアクセスできる場所に SQLServer/MySQL/PostgreSQL のいずれかのDBを用意(CDataSyncの設定情報を保持するため)
※CData Sync をまだインストールされていない場合は、下記ハンズオン記事を参考にインストールしてみてください。2台目は設定情報を作成してからインストールします。
なお、今回は .NET版 CDataSync で管理DBに MySQL を使用していきます。
設定情報を共通的なDB に保存するよう設定
クラスタリング機能を行うためには、各CDataSync で同じ設定情報を参照しておく必要があります。CData Sync のデフォルト設定では内部の SQLite や Derby に保持するようになっていますので、まずはこの設定を変更していきます。
ではインストールパス配下にある Web.config を開きます。
C:\Program Files\CData\CData Sync\www\Web.Config
connectionStringsというタグがありますのでその部分のコメントを外します。
ちなみに変更前の
<connectionStrings> <add name="AppDb" connectionString="server=xxxxxx;Port=3306;database=cdata;User=xxxxx;Password=xxxxxxxx;" providerName="System.Data.CData.MySQL" /> </connectionStrings>
この情報はヘルプにも記載されています。
データディレクトリを設定
Syncは、すべての構成データとアプリケーションデータをデータディレクトリと呼ばれるディスク上のフォルダに保存するのですが、クラスタリングの場合、各インスタンスで同じデータディレクトリを使用するように構成する必要があります。
今回は1台目のインスタンスに共有フォルダを作成し、そこをデータディレクトリとして登録するようにします。
では先ほど使った Web.config を開き、赤枠部分のコメントアウトを外します。
共有フォルダのパスを指定します。
<appSettings> <add key="AppDirectory" value="D:\\CmnSyncApp\\data_dir\\" /> </appSettings>
この内容で保存したら、CData Sync を起動します。
そうすると管理用DBに指定した MySQL に CData Sync の設定情報を保持する各種テーブルが作成されていることが確認できます。
ジョブ作成
今回は2つのジョブ(Marketo→BigQuery と Salesforce→BigQuery)を同時間帯に実行されるようジョブ作成後にスケジュール設定もします。
まずは Marketo → BigQuery のジョブを作成しましょう。
Marketo の接続設定を作成します。
BigQuery の接続情報も作成します。
ジョブの中には2つの同期クエリを実行する内容で作成しました。
毎日17:30 にこのジョブが実行されるよう設定もしました。
同じ要領で、Salesforce → BigQuery のジョブも作成します。
こちらも毎日17時30分にジョブが実行されるように設定。
クラスターモードの有効化
CData Sync にてクラスターモードを有効化する必要がありますので、設定画面の Advanced タブを開き、クラスターモードを有効化を True に変更して保存します。
もう1台のSync の準備
ではこのタイミングで別なインスタンスにて CData Sync のインストールを開始します。
インストールが完了したら、既に作成されている設定情報を参照するためにweb.config の内容を先ほどと同じように変更します。(CDataSyncを起動してしまっていたら、停止させてから変更しましょう)
なお、データディレクトリの設定では今回1台目で作成した共有フォルダを指しますので、D:\CmnSyncApp\data_dir ではなく、IPアドレスなどで指定したパスで設定ください。
変更が完了したら起動してライセンスアクティベートを行います。アクティベートしましたら、接続設定画面やジョブ画面に移動して1台目で作成した内容が表示されていることを確認します。
接続情報
ジョブ
はい、これで設定が完了しました!
ではどちらのジョブも11時5分に実行されるよう設定されているので、それまで待ってみます。
ジョブ実行
時間になったのでジョブの実行結果をみてみますと、2つのジョブが正常に終了していることがどちらの画面からでも確認することができました。
BigQuery にもレプリケーションされているようです。
では最後にジョブ自体が各インスタンスに振り分けれられているかを確認していきますので、設定情報を保持している管理DBの sync_job_history
テーブルを開きます。
instanceid
を見ると、同時刻で実行された2つのジョブがそれぞれのインスタンスで実行されていることが確認できました。
おわりに
いかがでしたでしょうか。今回はCData Sync のクラスタリング機能を使って複数ジョブをそれぞれのインスタンスで実行してみました。こちらの機能を有効化することにより、ジョブ実行時の処理が分散されるので全体のパフォーマンスが向上します。大量のジョブを同時時間に実行するような要件の場合には1つの手段としてご検討ください。
CData Sync は30日間のトライアル利用が可能で、トライアル中でもこちらの機能は利用できます。是非お試しくださいませ。