Installing Tableau Server Version 2023.03.04¶
Tableau Server is an enterprise-level platform that enables secure sharing, collaboration and management of Tableau dashboards. It provides data visualizations across an organization and addresses high availability (HA/DR) strategies and security protocols.
For more information, refer to the official Tableau Server operating system requirements section.
Prerequisites¶
The following conditions must be met to install Tableau Server:
Note
- To reinstall Tableau or format the VM, you must first deactivate the license. Failure to do so will render the license unusable.
- Ensure a full backup is performed before proceeding.
Deactivate License¶
Run the following commands to deactivate the license.
su - veservice
LICENSEKEY_INTERACTOR="xxxx"
LICENCEKEY_VIEWER="xxxx"
USERNAME="veservice"
PASSWORD="clcm"
tsm licenses deactivate -k $LICENCEKEY_VIEWER -u $USERNAME -p $PASSWORD
tsm licenses deactivate -k $LICENSEKEY_INTERACTOR -u $USERNAME -p $PASSWORD
tsm restart
Activate License¶
Run the following commands to activate the license.
su - veservice
LICENSEKEY_INTERACTOR="xxxxx"
LICENCEKEY_VIEWER="xxxx"
USERNAME="veservice"
PASSWORD="clcm"
tsm licenses activate -k $LICENCEKEY_VIEWER -u $USERNAME -p $PASSWORD
tsm licenses activate -k $LICENSEKEY_INTERACTOR -u $USERNAME -p $PASSWORD
Common Commands¶
- Check license status:
tsm licenses list
- Check tableau status:
tsm status -v
To configure Tableau Server, follow the steps:
-
Set up Virtual Machines (VMs).
-
Create three virtual machines with the following specifications:
Server CPU Memory (GB) Storage Comments tableau-01 64 128 100GB (SSD) + 500GB (SSD) Primary Node tableau-02 32 128 100GB (SSD) + 500GB (SSD) Worker Node 1 tableau-03 32 128 100GB (SSD) + 500GB (SSD) Worker Node 2 -
Configure the network on each node by running the following commands:
nmcli c reload ens192 nmcli c up ens192 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0 systemctl stop firewalld systemctl disable firewalld
-
Update the host
/etc/hosts
file on each node and configure it according to your environment.vi /etc/hosts
-
-
Upload installation files and configure SSH access.
-
Create a directory for Tableau installation files on
tableau-01
and upload the required installation files to the newly created directory.
Note: Ensure you obtain the Tableau Server ticket provider and RPM from the Siemens OPS team.mkdir /tmp/tableau upload: tableau-server-2023-3-4.x86_64.rpm to /tmp/tableau upload: tableau_ticket_provider-0.7.13.tgz, rename to tableau_ticket_provider.tgz
-
Generate SSH keys and copy them to worker nodes (
worker01
andworker02
).ssh-keygen ssh-copy-id worker01 ssh-copy-id worker02
-
Copy the installation files to the worker nodes using
scp
.scp tableau-server-2023-3-4.x86_64.rpm worker01:/tmp/tableau/ scp tableau-server-2023-3-4.x86_64.rpm worker02:/tmp/tableau/
-
Initialize node on each node and configure disk. Update the values based on your environment's disk.
- Identify the disk to be used, replace
/dev/sdb
with the appropriate disk. - Format the disk as
ext4
(update/dev/sdb
if needed). - Persist the mount by adding the disk entry to
/etc/fstab
. - Create a new user named
veservice
. -
Set the correct ownership for the
veservice
home directory.VIRTUAL_DISK_NAME="/dev/sdb" #Use 'lsblk', update according to the environment echo yes|mkfs.ext4 /dev/sdb #Use 'lsblk', update according to the environment mkdir -p /home/sdb #Adjust the directory path as required mount /dev/sdb /home/sdb echo `blkid /dev/sdb | awk '{print $2}' | sed 's/\"//g'` /home/sdb ext4 defaults 0 0 >> /etc/fstab #Update according to environment useradd veservice echo "clcm" | passwd veservice --stdin chmod -v u+w /etc/sudoers echo "Add super permission to user veservice..." echo "veservice ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers chown veservice:veservice /home/veservice/
- Identify the disk to be used, replace
-
Deploy Tableau Server on
tableau-01
-
Define necessary environment variables based on your specific configuration.
USERNAME="veservice" PASSWORD="clcm" TECHUSER_PWD="clcm" DATAVOLUME="/home/sdb" #update according to environment TSM_ACTIVATED="not_yet" PACKAGE_PATH="/tmp/tableau/" TBL_PGSQL_DRIVER="postgresql-42.7.3.jar" TBLSRV_INSTALLER="2023.3.4" TBLSRV_PACKAGE="tableau-server-${TBLSRV_INSTALLER//./-}.x86_64.rpm" LICENSEKEY_INTERACTOR="<add-licensekey-interactor>" #update according to environment LICENCEKEY_VIEWER="<add-licensekey-viewer>" #update according to environment MINDGATE_IP="<ip-address>" #update according to environment, wait to mindgate install CONTROLLER_IP="<ip-address>" #update according to environment NODE2_IP="<ip-address>" #update according to environment NODE3_IP="<ip-address>" #update according to environment
-
Install required packages and Python 3.12.
sudo yum -y install epel-release sudo yum -y update sudo reboot sudo yum -y groupinstall "Development Tools" sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc --version sudo yum -y install wget wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz tar xvf Python-3.12.0.tgz cd Python-3.12*/ ./configure --enable-optimizations sudo make altinstall
-
Download and install the Tableau Server package.
yum install $PACKAGE_PATH/$TBLSRV_PACKAGE -y VERSION_STRING=$(rpm -qa | grep -i tableau-server- | cut -d "-" -f 3) echo $VERSION_STRING
-
Download and install the PostgreSQL JDBC driver for Tableau.
mkdir -p /opt/tableau/tableau_driver/jdbc/ curl -sS https://jdbc.postgresql.org/download -o /opt/tableau/tableau_driver/jdbc/$TBL_PGSQL_DRIVER ls /opt/tableau/tableau_driver/jdbc
-
Configure Tableau Server with the provided credentials.
echo "${PASSWORD}" > pwd_file sudo /opt/tableau/tableau_server/packages/scripts.$VERSION_STRING/initialize-tsm --accepteula -a $USERNAME --password-file=pwd_file -d $DATAVOLUME/server rm -rf pwd_file source /etc/profile.d/tableau_server.sh echo "success">/tmp/tsm_activated
-
Activate the Tableau licenses.
su - veservice -c "tsm licenses activate -k $LICENSEKEY_INTERACTOR -u $USERNAME -p $PASSWORD" su - veservice -c "tsm licenses activate -k $LICENCEKEY_VIEWER -u $USERNAME -p $PASSWORD" #update according to environment
-
Create and apply registration information for the server.
cat << EOF > /tmp/registration.json { "zip" : "76187", "country" : "Germany", "city" : "Karlsruhe", "last_name" : "lastname", "industry" : "AG", "eula" : "true", "title" : "Mr", "company_employees" : "Employe1,Employe2", "phone" : "1234567890", "company" : "AG", "state" : "BY", "opt_in" : "false", "department" : "DF", "first_name" : "abc", "email" : "abc.lastname@domain.com" } EOF su - veservice -c "tsm register --file /tmp/registration.json --username $USERNAME --password $PASSWORD"
-
Configure trusted IPs and other network settings.
cat << EOF > /tmp/identity.json { "configEntities":{ "identityStore":{ "_type":"identityStoreType", "type":"local" } } } EOF su - veservice -c "tsm settings import -f /tmp/identity.json --username $USERNAME --password $PASSWORD" cat << EOF > /tmp/config.json { "configEntities":{ "gatewaySettings":{ "_type":"gatewaySettingsType", "publicPort":443, "trustedIPs":[ "$MINDGATE_IP", "$NODE2_IP", "$NODE3_IP" ] }, "trustedAuthenticationSettings":{ "_type":"trustedAuthenticationSettingsType", "trustedHosts":["<ip-address>"] } }, "configKeys":{ "gateway.timeout":"900", "ssl.protocols":"all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1", "ssl.ciphersuite":"HIGH:MEDIUM:!aNULL:!MD5:!RC4:!3DES", "wgserver.unrestricted_ticket":true, "wgserver.session.apply_lifetime_limit":true, "wgserver.session.lifetime_limit":"720", "wgserver.session.idle_limit":"30", "gateway.http.hsts":true, "gateway.http.referrer_policy":"same-origin", "subscriptions.enabled": true, "subscriptions.attachments_enabled": true, "subscriptions.max_attachment_size_megabytes": 32, "shareproductusagedata.enabled": false, "features.SelfServiceSchedules": true } } EOF su - veservice -c "tsm settings import -f /tmp/config.json --username $USERNAME --password $PASSWORD"
-
Activate Tableau Server's legacy identity mode and apply any pending changes.
#tsm authentication legacy-identity-mode enable su - veservice -c "tsm pending-changes apply -iw --ignore-prompt --username $USERNAME --password $PASSWORD"
-
Remove old configuration files.
rm -rf config.json rm -rf smtpconfig.json rm -rf registration.json rm -rf identity.json
-
Set up Tableau Server, create the initial user account and retrieve the bootstrap file required for node configuration.
su - veservice -c "tsm initialize --start-server --request-timeout 1800 --username $USERNAME --password $PASSWORD" su - veservice -c "tabcmd initialuser --server "localhost:80" --username "tblsrv_techuser" --password $TECHUSER_PWD" su - veservice -c "tsm topology nodes get-bootstrap-file --file bootstrap.json --username $USERNAME --password $PASSWORD" scp /home/veservice/bootstrap.json $NODE2_IP:/home/veservice scp /home/veservice/bootstrap.json $NODE3_IP:/home/veservice service crond restart # FIREWALL yum install firewalld -y systemctl restart dbus systemctl start firewalld systemctl enable firewalld firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=8060/tcp firewall-cmd --permanent --add-port=8080/tcp firewall-cmd --permanent --add-port=8850/tcp firewall-cmd --permanent --add-port=8000-9000/tcp firewall-cmd --permanent --add-port=27000-27010/tcp firewall-cmd --reload
-
-
Tableau Server installation on
tableau-02
andtableau-03
.USERNAME="veservice" PASSWORD="clcm" TECHUSER_PWD="clcm" DATAVOLUME="/home/sdb" #update according to environment TSM_ACTIVATED="not_yet" PACKAGE_PATH="/tmp/tableau/" TBL_PGSQL_DRIVER="postgresql-42.7.3.jar" TBLSRV_INSTALLER="2023.3.4" TBLSRV_PACKAGE="tableau-server-${TBLSRV_INSTALLER//./-}.x86_64.rpm" LICENSEKEY_INTERACTOR="<add-licensekey-interactor>" #update according to environment LICENCEKEY_VIEWER="<add-licensekey-viewer>" #update according to environment MINDGATE_IP="<ip-address>" CONTROLLER_IP="<ip-address>" #update according to environment NODE2_IP="<ip-address>" #update according to environment NODE3_IP="<ip-address>" #update according to environment echo "$USERNAME:${PASSWORD}" | sudo chpasswd sudo yum -y install epel-release sudo yum -y update sudo reboot sudo yum -y groupinstall "Development Tools" sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc --version sudo yum -y install wget wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz tar xvf Python-3.12.0.tgz cd Python-3.12*/ ./configure --enable-optimizations sudo make altinstall yum install $PACKAGE_PATH/$TBLSRV_PACKAGE -y VERSION_STRING=$(rpm -qa | grep -i tableau-server- | cut -d "-" -f 3) echo $VERSION_STRING mkdir -p /opt/tableau/tableau_driver/jdbc/ curl -sS https://jdbc.postgresql.org/download/$TBL_PGSQL_DRIVER -o /opt/tableau/tableau_driver/jdbc/$TBL_PGSQL_DRIVER ls /opt/tableau/tableau_driver/jdbc /opt/tableau/tableau_server/packages/scripts.${VERSION_STRING}/initialize-tsm --accepteula -a $USERNAME -b /home/veservice/bootstrap.json -d $DATAVOLUME/server # FIREWALL yum install firewalld -y systemctl restart dbus systemctl start firewalld systemctl enable firewalld firewall-cmd --set-default-zone=public firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=8060/tcp firewall-cmd --permanent --add-port=8080/tcp firewall-cmd --permanent --add-port=8850/tcp firewall-cmd --permanent --add-port=8000-9000/tcp firewall-cmd --permanent --add-port=27000-27010/tcp firewall-cmd --reload
-
Tableau Server cluster setup on
tableau-01
USERNAME="veservice" PASSWORD="clcm" TECHUSER_PWD="clcm" DATAVOLUME="/home/sdb" #update according to environment TSM_ACTIVATED="not_yet" PACKAGE_PATH="/tmp/tableau/" TBL_PGSQL_DRIVER="postgresql-42.7.3.jar" TBLSRV_INSTALLER="TableauServer-2023-1-6-SPA-x86_64.rpm" LICENSEKEY_INTERACTOR="<add-licensekey-interactor>" #update according to environment LICENCEKEY_VIEWER="<add-licensekey-viewer>" #update according to environment MINDGATE_IP="<ip-address>" #update according to environment CONTROLLER_IP="<ip-address>" #update according to environment NODE2_IP="<ip-address>" #update according to environment NODE3_IP="<ip-address>" #update according to environment LIST_OF_NODES=($(tsm topology list-nodes --username $USERNAME --password $PASSWORD | tr " " "\n" | sort -n)) STRING_OF_NODES=$(tsm topology list-nodes --username $USERNAME --password $PASSWORD | tr "\n" ",") # Get the number of nodes from the LIST_OF_NODES array NUMBER_OF_NODES=${ LIST_OF_NODES[@]} echo $LIST_OF_NODES echo $STRING_OF_NODES echo $NUMBER_OF_NODES su - veservice -c "tsm stop --username $USERNAME --password $PASSWORD" su - veservice -c "tsm topology set-process -n node$(((NUMBER_OF_NODES+1) / 2)) -pr pgsql -c 1" su - veservice -c "tsm topology set-process -n node$(((NUMBER_OF_NODES+1) / 2)) -pr activemqserver -c 1" for node in ${LIST_OF_NODES[@]}; do tsm topology set-process -n $node -pr gateway -c 1 tsm topology set-process -n $node -pr vizqlserver -c ${NUMBER_OF_INSTANCES:-2} tsm topology set-process -n $node -pr vizportal -c ${NUMBER_OF_INSTANCES:-2} tsm topology set-process -n $node -pr backgrounder -c ${NUMBER_OF_INSTANCES:-2} tsm topology set-process -n $node -pr cacheserver -c ${NUMBER_OF_INSTANCES:-2} tsm topology set-process -n $node -pr searchserver -c 1 tsm topology set-process -n $node -pr indexandsearchserver -c 1 tsm topology set-process -n $node -pr dataserver -c 2 tsm topology set-process -n $node -pr filestore -c 1 tsm topology set-process -n $node -pr metrics -c 1 tsm topology set-process -n $node -pr tdsservice -c 1 tsm topology set-process -n $node -pr contentexploration -c 1 tsm topology set-process -n $node -pr collections -c 1 tsm topology set-process -n $node -pr clustercontroller -c 1 done su - veservice -c "tsm pending-changes apply -iw --ignore-prompt --username $USERNAME --password $PASSWORD" su - veservice -c "tsm stop --username $USERNAME --password $PASSWORD" su - veservice -c "tsm topology deploy-coordination-service --nodes ${STRING_OF_NODES::-1} --username $USERNAME --password $PASSWORD --ignore-prompt" #su - veservice -c "tsm topology cleanup-coordination-service --username $USERNAME --password $PASSWORD --ignore-prompt" su - veservice -c "tsm start --username $USERNAME --password $PASSWORD" su - veservice -c "tsm status -v"
Deploying ticket provider for CentOS¶
Note
Ensure that your system uses Python 3.11 and higher. For RHEL 8.5 or later, Python 3.11 and higher versions are supported.
-
Set public key URL, extract and configure the ticket provider installer.
PUBLIC_KEY_URL="https://core.piam.<Domain>/token_keys" TCKTPRVDR_INSTALLER="tableau_ticket_provider.tgz" mkdir tmp_tcktprvdr tar zxvf ${TCKTPRVDR_INSTALLER} -C ./tmp_tcktprvdr sed -i -e "s~<PUBLIC_KEY_URL>~${PUBLIC_KEY_URL}~g" ./tmp_tcktprvdr/tableau-ticket-provider.service
-
Update the
install.sh
andtableau-ticket-provider.service
files to reflect the Python version (e.g., Python 3.12).python3.12 -m venv ${VENV} pip3.12 install --upgrade pip pip3.12 install *.whl SITE_PACKAGES=${VENV}/lib/python3.12/site-packages ExecStart=/opt/tableau-ticket-provider/tableauenv/bin/python3.12 -m tableau_ticket_provider
-
Install the ticket provider and verify service installation.
cd tmp_tcktprvdr && bash install.sh && cd .. rm -rf ./tmp_tcktprvdr systemctl | grep tableau-ticket-provider.service
Configuring Tableau Server¶
-
Update the secret file
mdsp-secret-infra-credentials
for all namespaces.tableau_server_secret : clcm tbl_pass : clcm tbl_private_ip : http://<ip-address> (as per the env) tbl_public_ip : http://<ip-address> (as per the env) tbl_user: clcm
-
Update the
customer-gldn-values.yaml
file.
Backing up and restoring Tableau Server¶
-
Create a backup of Tableau Server by running the following command.
/opt/tableau/tableau_server/packages/customer-bin.20231.23.0909.1155/tsm maintenance backup --file tblsrv_bckup --username $USERNAME --password $PASSWORD
-
Set the correct permissions for the backup file and restore it.
chown tableau:tableau /tableau/server/data/tabsvc/files/backups/restore_package.tsbak chmod o+rx /tableau/server/data/tabsvc/files/backups/restore_package.tsbak tsm stop --username ${USERNAME} --password ${PASSWORD} /opt/tableau/tableau_server/packages/customer-bin.20233.24.0314.1442/tsm maintenance restore --file tblsrv_bckup.tsbak --username ${USERNAME} --password ${PASSWORD} tsm start --username ${USERNAME} --password ${PASSWORD}
For more information, refer to the Tableau Server Identity Migration Guide.