CData Software Blog

クラウド連携のCData Software の技術ブログです。

CData Sync のクラスタリング機能でSalesforceとMarketoのデータを同時にBigQueryに取り込んでみた

こんにちは、テクニカルサポートエンジニアの宮本です。

今回は CData Sync のクラスタリング機能について紹介したいと思います。

CData Sync のクラスタリング機能

f:id:sennanvolar44:20220204232513p:plain CData Sync に去年追加されたこの機能ですが、名前の通り複数インスタンスでCData Sync を起動してジョブをそれぞれに自動的に振り分けて実行する機能になります。
www.cdata.com

これにより、ジョブ実行時の負荷を分散させられるほか、可用性の面でも片方が落ちても継続してジョブを実行し続けることが可能になります。

ちなみに分散される単位はジョブになり、このような1ジョブに設定されている個々のクエリの並列実行はまた別な機能になります。
f:id:sennanvolar44:20220204183349p:plain

並列処理についてはこちらの記事をご参照願います。

www.cdatablog.jp

手順

まず事前に必要なものは下記になります。

  • CData Sync をインストールするインスタンスを2台
  • 各サーバからアクセスできる場所に SQLServer/MySQL/PostgreSQL のいずれかのDBを用意(CDataSyncの設定情報を保持するため)

※CData Sync をまだインストールされていない場合は、下記ハンズオン記事を参考にインストールしてみてください。2台目は設定情報を作成してからインストールします。

www.cdatablog.jp

なお、今回は .NET版 CDataSync で管理DBに MySQL を使用していきます。

設定情報を共通的なDB に保存するよう設定

クラスタリング機能を行うためには、各CDataSync で同じ設定情報を参照しておく必要があります。CData Sync のデフォルト設定では内部の SQLite や Derby に保持するようになっていますので、まずはこの設定を変更していきます。

ではインストールパス配下にある Web.config を開きます。
C:\Program Files\CData\CData Sync\www\Web.Config

connectionStringsというタグがありますのでその部分のコメントを外します。
f:id:sennanvolar44:20220204153107p:plain

ちなみに変更前のの内容は SQLServer への接続情報のサンプルが設定されています。今回は MySQL に接続するので以下内容で書き換えます。

  <connectionStrings>
    <add 
      name="AppDb" 
      connectionString="server=xxxxxx;Port=3306;database=cdata;User=xxxxx;Password=xxxxxxxx;" 
      providerName="System.Data.CData.MySQL"
   />
  </connectionStrings>

この情報はヘルプにも記載されています。

CData Sync - Clustering

データディレクトリを設定

Syncは、すべての構成データとアプリケーションデータをデータディレクトリと呼ばれるディスク上のフォルダに保存するのですが、クラスタリングの場合、各インスタンスで同じデータディレクトリを使用するように構成する必要があります。
今回は1台目のインスタンスに共有フォルダを作成し、そこをデータディレクトリとして登録するようにします。

では先ほど使った Web.config を開き、赤枠部分のコメントアウトを外します。
f:id:sennanvolar44:20220204222333p:plain

共有フォルダのパスを指定します。

  <appSettings>
    <add key="AppDirectory" value="D:\\CmnSyncApp\\data_dir\\" />
  </appSettings>


この内容で保存したら、CData Sync を起動します。

そうすると管理用DBに指定した MySQL に CData Sync の設定情報を保持する各種テーブルが作成されていることが確認できます。
f:id:sennanvolar44:20220204155105p:plain

ジョブ作成

今回は2つのジョブ(Marketo→BigQuery と Salesforce→BigQuery)を同時間帯に実行されるようジョブ作成後にスケジュール設定もします。

まずは Marketo → BigQuery のジョブを作成しましょう。 Marketo の接続設定を作成します。
f:id:sennanvolar44:20220204155915p:plain

BigQuery の接続情報も作成します。
f:id:sennanvolar44:20220204160433p:plain

ジョブの中には2つの同期クエリを実行する内容で作成しました。
f:id:sennanvolar44:20220204161839p:plain

毎日17:30 にこのジョブが実行されるよう設定もしました。
f:id:sennanvolar44:20220321110939p:plain


同じ要領で、Salesforce → BigQuery のジョブも作成します。
f:id:sennanvolar44:20220204164244p:plain
こちらも毎日17時30分にジョブが実行されるように設定。
f:id:sennanvolar44:20220321110832p:plain

クラスターモードの有効化

CData Sync にてクラスターモードを有効化する必要がありますので、設定画面の Advanced タブを開き、クラスターモードを有効化を True に変更して保存します。
f:id:sennanvolar44:20220205002740p:plain

もう1台のSync の準備

ではこのタイミングで別なインスタンスにて CData Sync のインストールを開始します。
インストールが完了したら、既に作成されている設定情報を参照するためにweb.config の内容を先ほどと同じように変更します。(CDataSyncを起動してしまっていたら、停止させてから変更しましょう)

なお、データディレクトリの設定では今回1台目で作成した共有フォルダを指しますので、D:\CmnSyncApp\data_dir ではなく、IPアドレスなどで指定したパスで設定ください。

変更が完了したら起動してライセンスアクティベートを行います。アクティベートしましたら、接続設定画面やジョブ画面に移動して1台目で作成した内容が表示されていることを確認します。

接続情報
f:id:sennanvolar44:20220204171309p:plain

ジョブ
f:id:sennanvolar44:20220321110610p:plain

はい、これで設定が完了しました!
ではどちらのジョブも11時5分に実行されるよう設定されているので、それまで待ってみます。

ジョブ実行

時間になったのでジョブの実行結果をみてみますと、2つのジョブが正常に終了していることがどちらの画面からでも確認することができました。
f:id:sennanvolar44:20220321111050p:plain

BigQuery にもレプリケーションされているようです。
f:id:sennanvolar44:20220205001446p:plain

では最後にジョブ自体が各インスタンスに振り分けれられているかを確認していきますので、設定情報を保持している管理DBの sync_job_history テーブルを開きます。

instanceid を見ると、同時刻で実行された2つのジョブがそれぞれのインスタンスで実行されていることが確認できました。
f:id:sennanvolar44:20220322005424p:plain

おわりに

いかがでしたでしょうか。今回はCData Sync のクラスタリング機能を使って複数ジョブをそれぞれのインスタンスで実行してみました。こちらの機能を有効化することにより、ジョブ実行時の処理が分散されるので全体のパフォーマンスが向上します。大量のジョブを同時時間に実行するような要件の場合には1つの手段としてご検討ください。
CData Sync は30日間のトライアル利用が可能で、トライアル中でもこちらの機能は利用できます。是非お試しくださいませ。