Tableau Server を分散構成でインストールする

Tableau Server を分散構成でインストールする

Clock Icon2024.12.14

はじめに

Tableau Server は単一ノード構成の他に、分散インストールと呼ばれるインストールタイプを使用することで、ノードを追加したり、高可用性向けに Tableau を構成することも可能です。
これにより、冗長性を確保したりさらなるスケールが可能です。ここでは、2 台のマシンに Tableau Server をインストールし分散構成とするまでの手順をまとめてみます。

分散環境の要件

こちらは以下に各種条件が記載されています。

https://help.tableau.com/current/server-linux/ja-jp/distrib_requ.htm

代表的な条件は以下です。

  • ソフトウェア
    • すべてのノードで同じバージョンの Tableau Server を実行する必要がある
    • すべてのノードには、同じタイプの OS とその OS のメジャー バージョンが必要
  • インストール場所
    • Tableau Server をインストールする場所とデータ ディレクトリの場所は、すべてのノードで同じである必要がある
  • ネットワークとポート
    • 使用するマシンは相互に通信できる必要がある
    • 静的 IP アドレス を保持している必要がある
    • 各ノードは同じタイムゾーンに属し、それぞれのシステム クロックが同期されている必要がある
  • 2 ノード クラスターに Tableau Server をインストールする際の注意点
    • 2 ノード クラスターは、フェールオーバーの提供や高可用性のサポートは行わない
    • 2 ノード クラスタの場合、リポジトリは最初のノード上にある必要がある

検証環境

前提条件

上記より、ここでは以下の環境を使用しています。

  • Tableau Server バージョン 2024.2.4
  • 構成図の VPC、サブネットは構築済み
  • EC2 には Session Manager でログイン
  • Route53 にて検証用 DNS ホストゾーンを作成済み
    • Tableau Server と管理者用インターフェースである TSM には CNAME レコードを作成しアクセス
  • ACM で証明書を取得済み
    • SSL オフロードにより HTTPS 要求は ALB で終了し、HTTP 経由で Tableau Server と通信を行う

以下の構成です。

image

サーバー・インストール ディレクトリ

また、使用したサーバー等の条件は以下の通りです。各ノードで同じ条件です。

  • OS:Amazon Linux 2023
  • AMI ID:ami-0453ec754f44f9a4a
  • インスタンスタイプ:m5.4xlarge
    • vCPU:16
    • メモリ:64 GB
  • ボリューム
    • ルートボリューム:8 GB
    • 追加ボリューム:30 GB
      • マウント先:/opt/tableau
  • Tableau Server のインストールディレクトリ
    • 既定のまま:opt/tableau/tableau_server
  • データディレクトリ(バックアップなどの出力先ディレクトリ)
    • opt/tableau/data/
    • ※既定(/var/opt/tableau/tableau_server)から変更

追加ノードのインストールと構成

手順は以下に記載があります。

https://help.tableau.com/current/server-linux/ja-jp/install_additional_nodes.htm

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

はじめに、最初のインスタンス(初期ノード)に Tableau Server をインストールします。これは通常の単一ノードでのインストールです。

上記構成でのインストール手順は以下をご参照ください。

https://dev.classmethod.jp/articles/tableau-server-on-amazon-linux-2023-backup-procedure/

セキュリティグループ設定

クラスタを構成する各ノード間は以下に記載のポート範囲を開いておく必要があります。

https://help.tableau.com/current/server-linux/ja-jp/ports.htm

ここでは以下の通りセキュリティグループを設定しました。

  • 初期ノード
ポート範囲 ソース
80 ノード2 のセキュリティグループ
ALB のセキュリティグループ
8850 同上
8000-9000 ノード2 のセキュリティグループ
27000-27009 同上
8060 同上
8061 同上
  • ノード2
ポート範囲 ソース
80 初期ノードのセキュリティグループ
ALB のセキュリティグループ
8850 初期ノードのセキュリティグループ
8000-9000 同上
27000-27009 同上
8060 同上
8061 同上

追加ノードの構成

追加ノードとなる EC2 インスタンスを立ち上げ初期設定を行います。ホスト名はtabsrv-node2 としました。

#パッケージの更新確認・アップデート
sudo dnf upgrade --releasever=latest
sudo dnf check-upgrade --releasever=latest

# タイムゾーンの変更
sudo timedatectl set-timezone Asia/Tokyo
timedatectl

# ロケールの変更
sudo localectl set-locale LANG=ja_JP.utf8
localectl status

# ホスト名を変更
sudo hostnamectl set-hostname tabsrv-node2
hostnamectl

以下と同様の手順でボリュームのマウントも行っておきます。

https://dev.classmethod.jp/articles/tableau-server-install-on-amazon-linux-2023-try/#%25E3%2583%259C%25E3%2583%25AA%25E3%2583%25A5%25E3%2583%25BC%25E3%2583%25A0%25E3%2581%25AE%25E3%2583%259E%25E3%2582%25A6%25E3%2583%25B3%25E3%2583%2588

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

クラスタを構成する Tableau Server 間はホスト名で名前解決できる必要があります。本記事では各ノードのホスト名を以下の通り設定しています。

  • 初期ノード:tabsrv-node1
  • ノード 2 :tabsrv-node2

ホスト名で名前解決するために、ここでは下図の通りtest.internal をドメイン名とするプライベートホストゾーンを作成しました。

image 1

ホストゾーンを作成後、初期ノードであれば、ホスト名 tabsrv-node1 に対する FQDN tabsrv-node1.test.internal とプライベート IP アドレスを紐付ける A レコードを作成しました。

image 2

レコード作成後、初期ノードで Tableau Server を稼働させた状態でノード 2 から疎通確認を行います。

# nmap-ncat パッケージをインストール
$ sudo dnf install -y nmap-ncat

# tabsrv-node1.test.internal のポート 80 への接続確認
$ nc -zv tabsrv-node1.test.internal 80
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Connected to 10.0.139.68:80.  
Ncat: 0 bytes sent, 0 bytes received in 0.03 seconds. 

# tabsrv-node1.test.internal のポート 8850 への接続確認
$ nc -zv tabsrv-node1.test.internal 8850
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Connected to 10.0.139.68:8850.  
Ncat: 0 bytes sent, 0 bytes received in 0.03 seconds. 

なお、この状態ではホスト名のみでは名前解決できません。

$ nc -zv tabsrv-node1 8850
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Could not resolve hostname "tabsrv-node1": Name or service not known. QUITTING.
$ nc -zv tabsrv-node1 80
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Could not resolve hostname "tabsrv-node1": Name or service not known. QUITTING.

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

ここでは、以下を参考に/etc/systemd/resolved.confの設定変更を行います。

https://dev.classmethod.jp/articles/amazon-linux-2023-static-dns/#toc-etcsystemdresolved-conf-dns

以下の通り、DNS 検索ドメインの設定(search)が test.internal となるように編集しました。

# 設定変更
$ sudo vi /etc/systemd/resolved.conf

# 設定変更後の内容
$ cat /etc/systemd/resolved.conf
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it under the
#  terms of the GNU Lesser General Public License as published by the Free
#  Software Foundation; either version 2.1 of the License, or (at your option)
#  any later version.
#
# Entries in this file show the compile time defaults. Local configuration
# should be created by either modifying this file, or by creating "drop-ins" in
# the resolved.conf.d/ subdirectory. The latter is generally recommended.
# Defaults can be restored by simply deleting this file and all drop-ins.
#
# Use 'systemd-analyze cat-config systemd/resolved.conf' to display the full config.
#
# See resolved.conf(5) for details.

[Resolve]
# Some examples of DNS servers which may be used for DNS= and FallbackDNS=:
# Cloudflare: 1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com 2606:4700:4700::1111#cloudflare-dns.com 2606:4700:4700::1001#cloudflare-dns.com
# Google:     8.8.8.8#dns.google 8.8.4.4#dns.google 2001:4860:4860::8888#dns.google 2001:4860:4860::8844#dns.google
# Quad9:      9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net 2620:fe::fe#dns.quad9.net 2620:fe::9#dns.quad9.net
#DNS=
#FallbackDNS=
Domains=test.internal
#DNSSEC=no
#DNSOverTLS=no
#MulticastDNS=no
#LLMNR=no
#Cache=yes
#CacheFromLocalhost=no
#DNSStubListener=yes
#DNSStubListenerExtra=
#ReadEtcHosts=yes
#ResolveUnicastSingleLabel=no

設定後、以下で反映します。

sudo systemctl restart systemd-resolved.service

/etc/resolv.confを確認するとドメインサフィックスのリストにtest.internalが追加されています。

$ tail /etc/resolv.conf
#
# Third party programs should typically not access this file directly, but only
# through the symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a
# different way, replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

nameserver 10.0.0.2
search test.internal ec2.internal

これにより、ホスト名での名前解決が可能となります。

$ nc -zv tabsrv-node1 80
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Connected to 10.0.139.68:80.
Ncat: 0 bytes sent, 0 bytes received in 0.03 seconds.

$ nc -zv tabsrv-node1 8850
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Connected to 10.0.139.68:8850.
Ncat: 0 bytes sent, 0 bytes received in 0.03 seconds.

ブートストラップ ファイルを作成

追加ノードの構成には、TSM から取得できるブートストラップ ファイルが必要です。TSM にログインし、下図の通りファイルをダウンロードします。

image 3

ダウンロードしたファイルを、ここでは S3 に配置しノード 2 からも取得できるようにしました。

aws s3 cp s3://<バケット名>/bootstraps/bootstrap.json .

インストーラーをダウンロード

ノード 2 で、Tableau Server の RPM パッケージをダウンロードします。初期ノードのインストールと構成に使用したものと同じバージョンを指定します。

wget https://downloads.tableau.com/esdalt/2024.2.4/tableau-server-2024-2-4.x86_64.rpm

Tableau Server セットアップ プログラムを実行

ノード 2 でも、パッケージ マネージャーを使用して Tableau Server パッケージをインストールします。注意点として、インストール先は初期ノードと同じとなるようにします。

ここでは、デフォルトから変更していないため、以下の通り実行しました。

sudo dnf install tableau-server-2024-2-4.x86_64.rpm

インストール後、以下の構成となります。

$ tree /opt/tableau -L 2 -d
/opt/tableau
└── tableau_server
    ├── manifests
    └── packages

新しいノードと初期ノードの間の通信を初期化

先程取得したブートストラップ ファイルを指定し、ノード間通信を初期化します。ポイントは以下です。

  • -b:ブートストラップ ファイルを指定
  • -d:データディレクトリのインストール先を指定
  • --accepteula:指定が必要

本記事では、初期ノード構成時に、データディレクトリの場所を変更したので、以下でも同じ場所を指定しています。ここは各ノードで同じである必要があります。

$ sudo /opt/tableau/tableau_server/packages/scripts.20242.24.1011.1414/initialize-tsm -b bootstrap.json --accepteula --activation-service -d /opt/tableau/data/
Creating environment file...
Creating directories and setting permissions...
Using '/opt/tableau/data' as the data directory.
Adding user 'ec2-user' to group 'tableau'...
Adding user 'ec2-user' to group 'tsmadmin'...
Added. Note: These group membership changes do not take effect in shells already open. For these to take effect, log out of the shell and log back in.
Tableau Server runs best with at least 50 GB of free disk space,
but found only 23 GB for the data directory '/opt/tableau/data'. Continuing.
mount found at : /opt/tableau
Calling node installer...
Node installed successfully
Use the 'tsm' command on the controller node to configure services.
Done.

クラスタ コントローラーを使用した追加ノードの構成

通信の初期化後、TSM の構成画面を更新すると下図のように追加のノードが検出されます。

image 4

デフォルトでは以下のプロセスが構成されています。

  • クラスターコントローラー
  • データストーリー
    • Tableau Server インストールのすべてのノードに自動的に追加され、手動で構成することはできない

image 5

各プロセスについては以下をご参照ください。

https://help.tableau.com/current/server-linux/ja-jp/processes.htm

ここでは、以下の通りプロセスを構成しました。

  • ゲートウェイ を選択
  • アプリケーション サーバー (vizportal) カウントを 1 に設定
    • インタラクティブなマイクロコンテナ、Content Exploration Service、データエンジン も自動で追加される
  • VizQL Serverカウントを 1 に設定
  • キャッシュサーバーカウントを 1 に設定
  • バックグラウンダー のカウントを 2 に設定
    • バックグラウンダーをノードに追加すると、非インタラクティブなマイクロコンテナ、Prep Conductor、クエリゲートウェイ サービス、データプロファイリングサービス、仮想接続サービスが追加される
    • まだノードにない場合、データエンジンのインスタンスも追加される
  • Data Server のカウントを 1 に設定

その後、変更を適用します。

以上で、追加ノードの構成は終了です。

ドライバのインストール

Tableau Server の管理ビューを使用する場合、以下のプロセスのいずれかを実行しているすべてのノードに PostgreSQL ドライバーもインストールする必要があります。

  • VizQL Server (vizqlserver)
  • アプリケーション サーバー (vizportal)
  • データ サーバー (dataserver)
  • バックグラウンダー (backgrounder)

https://help.tableau.com/current/server-linux/ja-jp/install_additional_nodes.htm#install-drivers

初期ノードと同様に以下の手順で、ノード 2 にもドライバをインストールします。

# jarファイルをダウンロード
wget https://github.com/pgjdbc/pgjdbc/releases/download/REL42.7.4/postgresql-42.7.4.jar
# 指定のディレクトリに配置
sudo mkdir /opt/tableau/tableau_driver/jdbc -p
sudo cp postgresql-42.7.4.jar /opt/tableau/tableau_driver/jdbc
# 権限を構成
## jdbcディレクトリのグループを tableau に変更
sudo chown root:tableau /opt/tableau/tableau_driver/jdbc
## jdbcフォルダに対して、グループに読み取りおよび実行権限を付与
sudo chmod g+rx /opt/tableau/tableau_driver/jdbc
## ファイルのグループをtableauに変更
sudo chgrp tableau /opt/tableau/tableau_driver/jdbc/postgresql-42.7.4.jar
## ファイルのグループに実行権限を付与
sudo chmod 754 /opt/tableau/tableau_driver/jdbc/postgresql-42.7.4.jar

上記実行後、ここでは以下のようになっています。

$ ls /opt/tableau/tableau_driver/ -l
合計 0
drwxr-xr-x. 2 root tableau 35 1213 14:49 jdbc

$ ls /opt/tableau/tableau_driver/jdbc -l
合計 1064
-rwxr-xr--. 1 root tableau 1086687 1213 14:49 postgresql-42.7.4.jar

Tableau Server を起動すると、これまで通り管理ビューを表示できます。ディスク容量はノード毎に確認できるようになっていました。

image 6

ロードバランサーの追加

ここではすでにロードバランサーを構成済みなので、ターゲットグループにノード 2 を追加します。

image 7

さいごに

Tableau Server の分散構成の手順を試してみました。特に、ノード間はホスト名で名前解決できる必要がある点、インストール ディレクトリを変更している場合は、すべてのノードで同じように構成する必要がある点にご注意ください。
こちらの内容が何かの参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.