はじめに

前回はQlik Senseマルチノード構成のセットアップ手順をご説明しましたが、引き続いて今回もQlik Senseのマルチノードに関連して「同期ルール」についてご説明したいと思います。

Qlik Senseではどのような条件でどのアプリをどのノードへの同期の対象とするかなど、柔軟なノード間での同期のルール設定を行うことができます。

例えば、地理的に分散してサーバーを配置したり、セキュリティ等の観点から営業担当と人事担当がそれぞれ参照するサーバーを物理的に分けたいといった場合、以下の様に中央ノードでは全てのアプリを統合的に管理し、営業担当用ノード、人事担当用ノードそれぞれに必要なアプリのみを同期するような設定を行うことができます。

image

QMC上での同期ルールの設定

同期ルールの設定はQMCから(管理コンソール)の以下の場所から設定を行うことが出来ます。

1. Qlik Senseの同期ルールの設定はQMCの「Sync rules」から行います。QMCを開き、左側から「Configure System」>「Sync rules」をクリックします。

  • QMC URL: https://<サーバー名>/qmc

image

2. 設定されているルール一覧が表示されます。新規作成する場合には「Create new」をクリックします。

image

同期ルールの設定例

では、同期ルールの設定例をご説明します。まずその前に、デフォルトで作成されている「ResourceToNoCentralNodes」という名称の同期ルールは全てのアプリとアプリオブジェクトを中央ノードから子ノードに同期する設定となっているため、このルールを無効化する必要があります。

QMCの「Sync rules」のページ上で「ResourceToNoCentralNodes」を選択し、「Disabled」のチェックボックスをONにして「Apply」をクリックすることで無効化が可能です。

image

公開されたアプリのみを中央ノードから子ノードに同期

まず、以下の構成を見てみたいと思います。中央ノードには未公開のアプリ(パブリッシュを行っていないアプリ)を含めた全てのアプリを保持し、公開されたアプリについては中央ノードがデータのリロード処理を行う役割を担います。リロード処理によりデータが更新されたアプリは同期により子ノードにコピーされ、ユーザーは子ノード上のアプリにアクセスを行います。

image

この様な構成を取ることにより、データのリロード処理によるバックエンドの負荷と、ユーザーがデータ分析を行うためのフロントエンドの負荷を別々のノードに分散することができます。(QlikViewでのQlikView ServerとPublisherの役割分担に相当します)

この時、未公開となっているアプリは子ノードに同期せず、公開されているアプリのみを子ノードに同期する設定を行うことができます。そのためのルールは以下となります。

項目 設定
Name PublishedAppToAllRims
Resource filter *
Conditions node.iscentral = “false” and !((resource.resourcetype = “App” and (resource.stream.name=”Administration” or resource.stream.Empty())) or (resource.resourcetype like “App.*” and (resource.app.stream.name=”Administration” or resource.app.stream.Empty())))
Context Both in hub and QMC
Actions Sync

ストリームを特定のノードのみに同期

次に、以下の様な形で営業担当と人事担当がそれぞれ参照するサーバーを分けるケースを見てみたいと思います。

image

中央ノードで全てのアプリを統合的に管理し、営業担当用ノード、人事担当用ノードそれぞれに必要なアプリのみを同期するような設定とします。また、Everyoneストリームのアプリについては両方のノードに同期するものとし、未公開のアプリは子ノードへの同期対象外とします。

この様な場合に必要な同期ルールは以下の2つとなります。

まず、このルールは営業担当用ノード(QMCで「Rim1」という名称を設定)に対してEveryoneとSalesストリームのアプリを同期する設定となります。

項目 設定
Name EveryoneAndSalesStreamToRim1
Resource filter *
Conditions node.name = “Rim1” and (!(resource.resourcetype = “App” or resource.resourcetype like “App.*”) or (resource.resourcetype = “App” and (resource.stream.name = “Everyone” or resource.stream.name = “Sales”)) or (resource.resourcetype like “App.*” and (resource.app.stream.name = “Everyone” or resource.app.stream.name = “Sales”)))
Context Both in hub and QMC
Actions Sync

同様に、以下が人事担当用ノード(QMCで「Rim2」という名称を設定)への同期ルール設定となります。

項目 設定
Name EveryoneAndHRStreamToRim2
Resource filter *
Conditions node.name = “Rim2” and (!(resource.resourcetype = “App” or resource.resourcetype like “App.*”) or (resource.resourcetype = “App” and (resource.stream.name = “Everyone” or resource.stream.name = “HR”)) or (resource.resourcetype like “App.*” and (resource.app.stream.name = “Everyone” or resource.app.stream.name = “HR”)))
Context Both in hub and QMC
Actions Sync

新規アプリ開発用ノードの追加

上記でご紹介した2種類の同期ルール設定は、子ノードのNode Purposeが「Production」に設定されており、子ノード上でユーザーがアプリの新規開発を行わない運用となっていることが前提となっていますのでご注意ください。(Node Purposeの設定についてはQlik Senseマルチノード構成のセットアップ手順をご参照ください。)尚、公開されたアプリに対してシートやストーリーをユーザーが自由に追加することや、中央ノード上でのアプリ新規追加・開発は可能です。

子ノードで新規アプリ追加・開発をユーザーに許可することは機能上可能(Node Purposeを「Development」か「Both」に設定)ですが、ユーザーはデータのリロード処理などを実行できてしまうため、多量データを頻繁にリロードするとこれらのデータが他のノードに同期されてしまい、不要な同期トラフィックが本番環境で増加する要因となります。

基本的な考え方としては開発環境・テスト環境は本番環境と別セットの環境を準備することが望まれますが、マルチノード構成内のノードにおいて新規アプリ開発を許可したい場合には、本番環境への影響を緩和する方法として新規アプリの開発用ノードを設ける方法があります。

image

新規アプリ開発用ノードで新規アプリの追加やリロードなどを実行した場合、更新・追加されたデータは中央ノードへ同期されますが、ユーザーがアクセスする他の子ノードへのパフォーマンス上の影響は排除することができます。

この様な構成とする場合には、新規アプリ開発用ノード(QMCで「Rim3」という名称を設定)への同期を行うための以下の様な同期ルールを追加します。

項目 設定
Name ResourcesToRim3
Resource filter *
Conditions ((node.name=”Rim3″))
Context Both in hub and QMC
Actions Sync

トラブルシューティング

Qlik SenseアプリのバイナリファイルはQlik Sense Serverの「C:\ProgramData\Qlik\Sense\Apps」以下に保存されるため、アプリが同期されたかの確認はこのフォルダを参照することで確認することができます。

また、同期に関連するメッセージは「C:\ProgramData\Qlik\Sense\Log\Repository\”<マシン名>_Synchronization_Repository.txt」のファイルに出力されます。

まとめ

以上、Qlik Senseのマルチノード環境における同期ルールについて幾つかの例を用いて設定方法をご説明しました。