Tableau Server を 3 ノード HA クラスタでインストールする #tableau

2024.02.12

Tableau Server は、複数のインスタンスにインストール・連携することで、高可用性(HA)な構成をとることが可能です。 3 つのサーバーに Tableau Server をインストールする 3 ノードクラスタでのインストール・構成をやってみましたので手順を記事としました。

前提条件

ここでは、3 つの EC2 インスタンスに Tableau Server をインストールします。
各 Tableau Server をノードと呼びます。
各ノードで、OS や インストールに使用するインストーラーのバージョンは共通である必要があります。
ここでは、以下の通りとしました。

  • OS:Windows Server 2019
  • Tableau Server バージョン:2023.3.1

はじめに Tableau Server をインストールするノードを初期ノードとし、追加となるノードをそれぞれ ノード 2, ノード 3 とします。
各ノードのインスタンス等の設定は以下を用いています。

ノード インスタンスタイプ vCPU RAM C ドライブ D ドライブ
初期ノード m5.4xlarge 16 64GB 50GB 100GB
ノード2 m5.2xlarge 8 32GB 50GB 100GB
ノード3 m5.2xlarge 8 32GB 50GB 100GB

インストールの最小ハードウェア要件 | Tableau Help

手順

HA クラスタで Tableau Server をインストールする際の手順は以下に記載があります。
本記事でも、こちらの手順に沿って進めます。

具体的には、以下の順に作業を行います。

  • 初期ノードのインストールと構成
  • 追加ノード(EC2 インスタンス)の構築と設定
  • プライベートホストゾーンの作成
  • ノードの追加
  • 調整サービス アンサンブルの展開
  • クライアント ファイルサービス (CFS) の構成
  • 追加ノードのプロセス構成
  • ロードバランサーの追加

初期ノードのインストールと構成

はじめに初期ノードとなる Tableau Server をインストールします。
こちらのインストール手順と構成は、以下の記事の通り進めました。

この時点の構成は以下になります。

追加ノードの構築と設定

追加ノードとなるインスタンスを構築します。
本記事では、初期ノードと同一のプライベートサブネット内に追加となる2台のインスタンス(ノード2、ノード3)を構築しました。
追加ノードは、それぞれ以下の通りホスト名を変更しておきました。

  • ノード2:tabsrv-node2
  • ノード3:tabsrv-node3

また、初期ノードと同様に以下の設定を行っておきます。

  • Windows ファイアウォールの無効化
  • 初期ノードと同じバージョン(2023.3.1)のインストーラーを配置

セキュリティグループ

ノード間通信用に、以下の通りセキュリティグループで通信を許可します。
※ALB からの通信用の許可が別途必要です。

Tableau サービス マネージャーのポート

  • 初期ノード
ポート範囲 概要 ソース
80 ゲートウェイ ノード2, 3 のセキュリティグループ
8850 Tableau Services Manager 同上
8000-9000 Tableau プロセスの動的マッピング用に既定で予約されているポートの範囲 同上
27000-27009 Tableau Server がライセンス サービスで使用するポートの範囲 同上
  • ノード 2
ポート範囲 ソース
80 ノード1, 3 のセキュリティグループ
8850 同上
8000-9000 同上
27000-27009 同上
  • ノード 3
ポート範囲 ソース
80 ノード1, 2 のセキュリティグループ
8850 同上
8000-9000 同上
27000-27009 同上

ポート範囲 27000-27009 は、Tableau Server のライセンス サービスで使用されるポートです。このプロセスは、初期ノードでのみ実行されるため、通常であれば初期ノードでのみ、このポートのインバウンド通信を許可すれば問題ありません。
ただし、初期ノードダウン時はこのプロセスを他ノードに移動させる可能性があるため、ここでは各ノードでこのポートを開放しています。

参考:初期ノードの障害からの回復 | Tableau Help

プライベートホストゾーンの作成

クラスタを構成する Tableau Server ノード間は、ホスト名で名前解決できる必要があります。そのため、ここでは Route53 で下図の通り test.local というドメインでプライベートホストゾーンを作成します。

レコードの追加

プライベートホストゾーンが作成されたら、レコードを作成します。
EC2 インスタンスのホスト名をサブドメインに、下図の通りプライベートIPアドレスをレコード値とする A レコードを作成します。

ドメインサフィックスの指定

ホスト名のみで名前解決できるように、ここでは各ノードの TCP/IP 詳細設定でドメインサフィックスとしてtest.localを指定しておきました。
設定後、ノード間でホスト名による名前解決ができることを確かめておきます。

> nslookup EC2AMAZ-TGQFA6R
サーバー:  ip-10-0-0-2.us-east-2.compute.internal
Address:  10.0.0.2

権限のない回答:
名前:    EC2AMAZ-TGQFA6R.test.local
Address:  10.0.128.79

ここまでで、下図のような構成です。

ノードの追加

ブートストラップファイルの生成

追加ノードには、初期ノードで生成できるブートストラップファイルをインポートします。追加ノードのインストール前に、初期ノードの TSM でブートストラップファイルを生成します。
TSM にログインし、「構成」からブートストラップファイルをダウンロードし、追加ノードに配置しておきます。

ブートストラップファイルの中身は以下のようになっています。

{
    "initialBootstrapSettings":
    {
        "port":8850,
        "nodeId":"node1",
        "clusterId":"tabsvc-clusterid",
        "toksCryptoKeystore":"XXXX",
        "sessionCookieValue":"XXXX",
        "configurationName":"tabsvc",
        "sessionCookieMaxAge":7200,
        "sessionCookieUser":"tsm-bootstrap-user",
        "certificate":"-----BEGIN CERTIFICATE-----XXXX-----END CERTIFICATE-----",
        "machineAddress":"EC2AMAZ-TA1V0QR",
        "cryptoEnabled":true,
        "cryptoKeyStore":"",
        "sessionCookieName":"AUTH_COOKIE"
}
}

machineAddress としてホスト名が指定されるので、ホスト名で名前解決できるようにしておく必要があります。

ノード 2 をインストールして初期化する

追加ノードとなるインスタンスにログインし、同じバージョンのインストーラーを実行します。

インストール先は、初期ノード同じディレクトリを指定します。

インストールタイプには「既存の Tableau Server クラスターにノードを追加します。」を選択します。

アクティブ化方式を選確認し [インストール] を選択します。

しばらく待機すると下図のポップアップが表示されます。

各項目には、それぞれ以下を指定します。

  • ブートストラップファイル
    • 初期ノードで生成したブートストラップファイルを指定します
  • Tableau Services Manager(TSM)ユーザー名
    • 初期ノードの TSM ユーザー名を指定します
  • Tableau Services Manager(TSM)パスワード
    • 初期ノードの TSM ユーザー名に対応するパスワードを指定します

各項目を入力し [次へ] をクリックし、認証情報や接続に問題なければ、初期ノードの TSM へのログイン画面が開くので、再度認証情報を入力しログインします。

ログインすると下図のように、新しいノードが検出されたことを知らせるポップアップが表示されます。

「構成」タブを開くと下図のポップアップが表示され、ノードの追加を確認できます。

[続行] をクリックするとノード 2 追加され、そのトポロジを確認できます。
既定で「クラスタコントローラー」にチェックが入っています。

ノード 3 をインストールして初期化する

このままノード 3 として、さらに追加ノードとなるインスタンスにログインし、ノード 2 と同様の作業を行います。
同じインストーラーを実行し、初期ノード・ノード 2 と同じインストール先を指定し、初期ノードから生成したブートストラップファイルを指定します。TSM の認証情報やノード間の通信に問題が無ければ、TSM へのログイン画面開くので、初期ノードの管理者ユーザーでログインします。

ログイン後、ノードが検知されたポップアップが表示されます。

「構成」に移動するとノード 2 の時と同様に、ノード 3 の追加を確認できます。

この時点で、トポロジの一部は下図のようになっています。

最小トポロジを使用して新しいノードを構成する

クラスタへの新規ノードの追加プロセスを完了するには、最小限のトポロジでノードを構成する必要があるため、この状態から保留中の変更を適用し、再起動を行います。
この際、各ノードで Index and Search Server の実行と、調整サービス アンサンブルを展開の推奨表示がありましたが、これは後ほど行います。

この時点では、再起動のトポロジの一部は下図のようになっています。

調整サービス アンサンブルの展開

追加ノードを最小限のトポロジーで構成したら、調整サービス アンサンブルの展開を行います。リポジトリのフェールオーバーには、この設定が必要です。 初期ノードにログインし、コマンドプロンプト等からコマンドを実行していきます。

はじめに、Tableau Server が起動している場合、停止します。

tsm stop

以下のコマンドで、他に保留中の変更がないことを確認します。

tsm pending-changes list

保留中の変更がある場合は、変更を破棄するか、変更を適用しておきます。

次に、クラスタ内の各ノードのノード ID を取得します。

tsm topology list-nodes -v

出力例にある、ノードID列の値を使用します。

>tsm topology list-nodes -v
ノード ID               ノード ロール              アドレス                 プロセス
node1                all-jobs             EC2AMAZ-TGQFA6R      API ゲートウェイ : 1
                                                               Activation Service : 1
                                                               Content Exploration Service : 1
                                                               Resource Limits Manager : 1
                                                               Tableau Minerva Service : 1
                                                               Tableau Prep Conductor : 1
                                                               Tableau Prep Flow Authoring : 1
                                                               Tableau Prep Minerva Service : 1
                                                               VizQL Server : 2
                                                               Webhook : 1
                                                               アプリケーション サーバー : 1
                                                               インタラクティブなマイクロサービス コンテナ : 1
                                                               インデックス作成/検索サーバー : 1
                                                               キャッシュ サーバー : 2
                                                               クエリ ゲートウェイ サービス : 1
                                                               クライアント ファイル サービス : 1
                                                               クラスター コントローラー : 1
                                                               ゲートウェイ : 1
                                                               コレクション サービス : 1
                                                               コーディネーション サービス : 1
                                                               サイトのインポート/エクスポート : 1
                                                               サービス マネージャー : 1
                                                               データ エンジン : 1
                                                               データ サーバー : 2
                                                               データ ストーリー サービス : 1
                                                               データ ソース プロパティ サービス : 1
                                                               データ プロファイリング サービス : 1
                                                               データに聞く : 1
                                                               データベースのメンテナンス : 1
                                                               バックアップ/復元 : 1
                                                               バックグラウンダー : 2
                                                               ファイル ストア : 1
                                                               メッセージング サービス : 1
                                                               メトリクス サービス : 1
                                                               ライセンス マネージャー : 1
                                                               リポジトリ : 1
                                                               仮想接続サービス : 1
                                                               内部データ ソース プロパティ サービス : 1
                                                               分析の拡張機能マイクロサービス : 1
                                                               抽出サービス : 1
                                                               管理エージェント : 1
                                                               管理コントローラー : 1
                                                               認証 : 1
                                                               非インタラクティブなマイクロサービス コンテナ : 1
node2                all-jobs             tabsrv-node2         クラスター コントローラー : 1
                                                               サイトのインポート/エクスポート : 1
                                                               サービス マネージャー : 1
                                                               データ ストーリー サービス : 1
                                                               データベースのメンテナンス : 1
                                                               バックアップ/復元 : 1
                                                               管理エージェント : 1
node3                all-jobs             tabsrv-node3         クラスター コントローラー : 1
                                                               サイトのインポート/エクスポート : 1
                                                               サービス マネージャー : 1
                                                               データ ストーリー サービス : 1
                                                               データベースのメンテナンス : 1
                                                               バックアップ/復元 : 1
                                                               管理エージェント : 1

以下のコマンドで、先のノードIDを指定しつつ、調整サービスを指定のノードに追加します。

tsm topology deploy-coordination-service -n node1,node2,node3

コマンド実行後、Tableau Server を起動します。

tsm start

クライアント ファイルサービス (CFS) の構成

追加のノードで CFS を構成します。
Tableau Server クライアント ファイル サービス

これにより、TSM で使用される SAML 証明書などが保存、配布されます。調整サービスを実行しているすべてのノードに CFS を追加することが推奨されています。
既定では、CFS は初期ノードにのみインストールされているので、追加ノードに対する構成を行います。tsm topology list-nodes -v でノードIDを確認し、以下のコマンドで指定のノードに CFS を追加します。

tsm topology set-process -n node2 -pr clientfileservice -c 1

上記の場合、node2 に追加しています。ここではもう一つノードがあるので、さらに以下のコマンドでノード3 にも追加します。

tsm topology set-process -n node3 -pr clientfileservice -c 1

変更の反映は、tsm pending-changes apply で行います。変更内容をtsm pending-changes list で確認しておきます。

>tsm pending-changes list
構成
保留中の構成の変更はありません。
トポロジ
node2:
           クライアント ファイル サービス
                               新しいインスタンスの個数:1
                               古いインスタンスの個数:0
node3:
           クライアント ファイル サービス
                               新しいインスタンスの個数:1
                               古いインスタンスの個数:0
これらの変更を適用するにはサーバーを再起動する必要があります。

ここで、変更を適用すると以下の警告が出ました。

>tsm pending-changes apply

保留中の変更が適用されませんでした。
1 個のトポロジ検証エラーおよび警告があります。

警告: Tableau Server クラスターの少なくとも 3 つの異なるノードで Index and Search Server
を構成することをお勧めします。
サービス: インデックス作成/検索サーバー

インデックス作成/検索サーバー プロセスを先に構成するようなメッセージだったので、ここではあわせて TSM のトポロジーから、追加ノードに、インデックス作成/検索サーバー プロセスを追加し、変更を適用しました。

変更の適用

>tsm pending-changes apply
この操作を行うとサーバーが再起動されます。続行しますか?
(y/n): y
非同期ジョブの展開を開始しています。
ジョブ ID '2'、タイムアウトは 58 分です。
5% - 導入するトポロジを取得中。
11% - 導入する構成を取得中。
17% - 新しいトポロジを検証しています。
23% - サーバーを起動する必要があるかどうかを判別しています。
29% - すべてのサービスを無効化しています。
35% - サービスの停止を待機しています。。
41% - ノードを新しいトポロジに更新しています。
47% - トポロジーが適用されるのを待機しています。。
52% - ノードを新しい設定に更新中。。
58% - サービスを再構成しています。
64% - サービスの再構成を待機しています。。
70% - インデックス作成/検索サーバーを初期化するために必要なサービスを開始しています。。
76% - バックアップ/復元サービスに接続しています。。
82% - インデックス作成/検索サーバーを初期化しています。。
88% - インデックス作成/検索サーバーを初期化するために使用するサービスを無効にしています。。
94% - すべてのサービスを有効化しています。
100% - サービスの開始を待機しています。                 ービスが開始されました。
更新された構成とトポロジー バージョンでノードが正常に展開されました。

インデックス作成/検索サーバー プロセスを追加したので、変更を適用後、トポロジーでもこのプロセスが追加ノードで有効化されています。

追加ノードのプロセス構成

ここまでの手順で、追加ノードを最低限のプロセスで構築したので、ここから、各ノードで実際に使用するプロセスを構成します。どのようなプロセスを構成するかは、Tableau Server の状況や要件により異なります。
また、各プロセスの理解も必要です。プロセスについては、以下に内容がまとまっていますので、あわせてご覧ください。

ノード 2 のプロセスを構成

ここでは、検証用のためノード 2 については、以下の構成としました。

  • ゲートウェイ を選択
  • アプリケーション サーバー (vizportal) カウントを 1 に設定
  • VizQL Serverカウントを 1 に設定
  • キャッシュサーバーカウントを 1 に設定
  • バックグラウンダー のカウントを 1 に設定
    • バックグラウンダーをノードに追加すると、まだノードにない場合、データエンジンのインスタンスも追加される
  • Data Server のカウントを 1 に設定
  • ファイル ストア を選択
  • リポジトリ (pgsql)を選択
  • Index and Search Server を選択
    • ※こちらは上記の手順で先に追加済み

ノード 3 のプロセスを構成

あわせてノード 3 についても構成を行います。ここでは、以下の設定としました。

  • ゲートウェイ を選択
  • アプリケーション サーバー (vizportal) カウントを 1 に設定
  • VizQL Serverカウントを 1 に設定
  • キャッシュサーバーカウントを 1 に設定
  • バックグラウンダー のカウントを 1 に設定
    • バックグラウンダーをノードに追加すると、まだノードにない場合、データエンジンのインスタンスも追加される
  • Data Serverカウントを 1 に設定
  • ファイル ストアを選択
  • Index and Search Server を選択
    • ※こちらは上記の手順で先に追加済み

追加ノード(ノード 2, ノード 3)の構成を指定後、変更を適用し再起動します。
再起動後、プロセスを確認すると、下図のように指定のプロセスが稼働していることを確認できます。

プロセスの稼働はコマンドからも確認できます。
調整サービス アンサンブルの展開を実施したので、コーディネーション サービスがノード 2 でも起動していることが確認できます。
※初期ノード、ノード2 のみ抜粋

>tsm status -v
node1: EC2AMAZ-TGQFA6R
        Status: RUNNING
        'Tableau Server ゲートウェイ 0' は実行中です。
        'Tableau Server アプリケーション サーバー 0' は実行中です。
        'Tableau Server インタラクティブなマイクロサービス コンテナ 0' は実行中です。
                'MessageBus マイクロサービス 0' は実行中です。
                '関係クエリ マイクロサービス 0' は実行中です。
                '認証資格情報サービス 0' は実行中です。
                '推奨 Microservice 0' は実行中です。
        'Tableau Server VizQL Server 0' は実行中です。
        'Tableau Server VizQL Server 1' は実行中です。
        'Tableau Server キャッシュ サーバー 0' は実行中です。
        'Tableau Server キャッシュ サーバー 1' は実行中です。
        'Tableau Server コーディネーション サービス 1' は実行中です。
        'Tableau Server クラスター コントローラー 0' は実行中です。
        'Tableau Server バックグラウンダー 0' は実行中です。
        'Tableau Server バックグラウンダー 1' は実行中です。
        'Tableau Server 非インタラクティブなマイクロサービス コンテナ 0' は実行中です。
        'Tableau Server データ サーバー 0' は実行中です。
        'Tableau Server データ サーバー 1' は実行中です。
        'Tableau Server データ エンジン 0' は実行中です。
        'Tableau Server ファイル ストア 0' は実行中です。
        'Tableau Server リポジトリ 0' は実行中です (アクティブ リポジトリ)。
        'Tableau Server Tableau Prep Conductor 0' は実行中です。
        'Tableau Server Tableau Prep Flow Authoring 0' は実行中です。
        'Tableau Server Tableau Prep Minerva Service 0' は実行中です。
        'Tableau Server インデックス作成/検索サーバー 0' は実行中です。
        'Tableau Server データに聞く 0' は実行中です。
        'Tableau Server 管理エージェント 0' は実行中です。
        'Tableau Server 管理コントローラー 0' は実行中です。
        'Tableau Server サービス マネージャー 0' は実行中です。
        'Tableau Server ライセンス マネージャー 0' は実行中です。
        'Tableau Server Activation Service 0' は実行中です。
        'Tableau Server クライアント ファイル サービス 0' は実行中です。
        'Tableau Server データベースのメンテナンス 0' は停止しています。
        'Tableau Server バックアップ/復元 0' は停止しています。
        'Tableau Server サイトのインポート/エクスポート 0' は停止しています。
        'Tableau Server コレクション サービス 0' は実行中です。
        'Tableau Server Content Exploration Service 0' は実行中です。
        'Tableau Server Webhook 0' は実行中です。
        'Tableau Server 認証 0' は実行中です。
        'Tableau Server API ゲートウェイ 0' は実行中です。
        'Tableau Server 分析の拡張機能マイクロサービス 0' は実行中です。
        'Tableau Server メッセージング サービス 0' は実行中です。
        'Tableau Server データ ソース プロパティ サービス 0' は実行中です。
        'Tableau Server 内部データ ソース プロパティ サービス 0' は実行中です。
        'Tableau Server 仮想接続サービス 0' は実行中です。
        'Tableau Server メトリクス サービス 0' は実行中です。
        'Tableau Server クエリ ゲートウェイ サービス 0' は実行中です。
        'Tableau Server Tableau Minerva Service 0' は実行中です。
        'Tableau Server 抽出サービス 0' は実行中です。
        'Tableau Server データ プロファイリング サービス 0' は実行中です。
        'Tableau Server Resource Limits Manager 0' は実行中です。
        'Tableau Server データ ストーリー サービス 0' は実行中です。
node2: tabsrv-node2
        Status: RUNNING
        'Tableau Server ゲートウェイ 0' は実行中です。
        'Tableau Server アプリケーション サーバー 0' は実行中です。
        'Tableau Server インタラクティブなマイクロサービス コンテナ 0' は実行中です。
                'MessageBus マイクロサービス 0' は実行中です。
                '関係クエリ マイクロサービス 0' は実行中です。
                '認証資格情報サービス 0' は実行中です。
                '推奨 Microservice 0' は実行中です。
        'Tableau Server VizQL Server 0' は実行中です。
        'Tableau Server キャッシュ サーバー 0' は実行中です。
        'Tableau Server コーディネーション サービス 1' は実行中です。
        'Tableau Server クラスター コントローラー 0' は実行中です。
        'Tableau Server バックグラウンダー 0' は実行中です。
        'Tableau Server 非インタラクティブなマイクロサービス コンテナ 0' は実行中です。
        'Tableau Server データ サーバー 0' は実行中です。
        'Tableau Server データ エンジン 0' は実行中です。
        'Tableau Server ファイル ストア 0' は実行中です。
        'Tableau Server リポジトリ 0' は実行中です (パッシブ リポジトリ)。
        'Tableau Server Tableau Prep Conductor 0' は実行中です。
        'Tableau Server インデックス作成/検索サーバー 0' は実行中です。
        'Tableau Server データに聞く 0' は実行中です。
        'Tableau Server 管理エージェント 0' は実行中です。
        'Tableau Server サービス マネージャー 0' は実行中です。
        'Tableau Server クライアント ファイル サービス 0' は実行中です。
        'Tableau Server データベースのメンテナンス 0' は停止しています。
        'Tableau Server バックアップ/復元 0' は停止しています。
        'Tableau Server サイトのインポート/エクスポート 0' は停止しています。
        'Tableau Server Webhook 0' は実行中です。
        'Tableau Server 認証 0' は実行中です。
        'Tableau Server API ゲートウェイ 0' は実行中です。
        'Tableau Server 分析の拡張機能マイクロサービス 0' は実行中です。
        'Tableau Server 仮想接続サービス 0' は実行中です。
        'Tableau Server クエリ ゲートウェイ サービス 0' は実行中です。
        'Tableau Server Tableau Minerva Service 0' は実行中です。
        'Tableau Server 抽出サービス 0' は実行中です。
        'Tableau Server データ プロファイリング サービス 0' は実行中です。
        'Tableau Server データ ストーリー サービス 0' は実行中です。

ここまでの手順が 3ノード HA クラスタのインストールと構成になります。

ロードバランサーの追加

この構成では 3 つすべてのノードにはゲートウェイ プロセスがあるため、ゲートウェイから、利用可能なサーバー プロセスに要求が送られます。
クラスタ内のダウンタイムをさらに削減するには、ロードバランサーを使用します。
本記事の構成の場合、前段に ALB があるので、ターゲットグループに追加ノードを追加します。

さいごに

3ノード HA クラスタでの Tableau Server のインストールと構成をやってみました。初期ノードの障害やリポジトリのフェールオーバーについても、別の記事で試してみたいと思います。
こちらの内容が何かの参考になれば幸いです。