> For the complete documentation index, see [llms.txt](https://academy.pentaho.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://academy.pentaho.com/solution-architect-path-sandbox/speciality-courses/high-availability.md).

# High Availability — Speciality

Level 2 of the Solution Architect path: High Availability — Speciality. 6 lessons across 2 modules: two Pentaho nodes behind HAProxy and Keepalived, a shared repository, Carte clustering and Tray.io.

{% hint style="warning" %}
**🧪 SANDBOX — draft content, built from `architect-ha-specialty` 0.1.0 in Pentaho Content Manager.** Module and lesson names, the reading-or-workshop kinds and the times come straight from each lab's manifest. Items marked REPLACE-ME need an owner's confirmation.
{% endhint %}

The second deployment speciality of the Solution Architect path. Take the server you installed by hand and make it highly available: two Pentaho nodes behind an HAProxy pair with a Keepalived virtual IP, one shared PostgreSQL repository, the Jackrabbit cluster journal and clustered Quartz, then a Carte cluster for Pentaho Data Integration execution, driven by Tray.io through the Carte REST API. Enterprise Security — Speciality, the last course on the path, then secures what you deployed.

{% columns %}
{% column %}

<p align="center"><i class="fa-file-lines" style="color:green;">:file-lines:</i><br><strong>6 lessons</strong><br><em>across 2 modules</em></p>
{% endcolumn %}

{% column %}

<p align="center"><i class="fa-flask" style="color:orange;">:flask:</i><br><strong>3 workshops</strong><br><em>hands-on labs</em></p>
{% endcolumn %}

{% column %}

<p align="center"><i class="fa-clock" style="color:cyan;">:clock:</i><br><strong>~4h 5m</strong><br><em>a day, or two evenings</em></p>
{% endcolumn %}
{% endcolumns %}

{% hint style="success" icon="network-wired" %}
Every workshop is hands-on and runs on virtual machines, one role per machine: eight Ubuntu 22.04 LTS hosts on one subnet. The guide runs on your desktop and you work on each host over `ssh`.
{% endhint %}

***

<h3 align="center">Before you start</h3>

{% columns %}
{% column %}
{% hint style="success" icon="circle-check" %}
**What you'll need**

The Linux command line — `bash`, `sudo`, `ssh` and a text editor — and a Pentaho Server installed from the archive at least once, as in Installation — Certified. The workshops run on eight Ubuntu 22.04 LTS hosts with the clock kept in step (NTP or chrony), and use the Pentaho Server and Pentaho Data Integration client archives from the Pentaho Support Portal. You also need Spoon on a workstation, and a Tray.io account for the last workshop.
{% endhint %}
{% endcolumn %}

{% column %}
{% hint style="info" icon="tag" %}
**Built against**

The Pentaho 11.0 GA archives (`11.0.0.0-237`) on Ubuntu 22.04 LTS, with PostgreSQL 14, HAProxy and Keepalived. The installation guide bundled with the course was written for Pentaho 10.x; the workshops give the 11.0 values.

REPLACE-ME — confirm where the eight hosts come from for a hosted lab, and note that the workshops have not yet been run end to end on machines since this course was split from Containers.
{% endhint %}
{% endcolumn %}
{% endcolumns %}

***

{% hint style="info" icon="sitemap" %}

#### What you'll build

A production HA topology: two Pentaho Server nodes with the Jackrabbit cluster journal and clustered Quartz against one PostgreSQL repository; two HAProxy balancers with sticky sessions sharing a Keepalived virtual IP; the cluster tests that prove failover; a Carte master with two slaves that register themselves; and a Tray.io workflow that starts a job through the Carte REST API and polls it to completion.
{% endhint %}

```mermaid
%%{init: {"theme":"base","themeVariables":{"fontFamily":"Arial, Helvetica, sans-serif","fontSize":"13px","lineColor":"#64748b","clusterBkg":"#fafaf9","clusterBorder":"#d6d3d1","edgeLabelBackground":"#ffffff"},"flowchart":{"curve":"basis","nodeSpacing":28,"rankSpacing":44,"padding":22,"wrappingWidth":600,"htmlLabels":true}}}%%
flowchart TB
  classDef browser fill:#fef3c7,stroke:#b45309,color:#78350f,text-align:left,rx:6,ry:6
  classDef support fill:#f1f5f9,stroke:#475569,color:#0f172a,text-align:left,rx:6,ry:6
  classDef server fill:#ede9fe,stroke:#6d28d9,color:#3b0764,text-align:left,rx:6,ry:6
  classDef store fill:#dcfce7,stroke:#15803d,color:#14532d,text-align:left,rx:6,ry:6
  classDef input fill:#dbeafe,stroke:#1d4ed8,color:#1e3a8a,text-align:left,rx:6,ry:6
  U["<b>Users and Spoon</b>&nbsp;&nbsp;&nbsp;&nbsp;<br/>the base URL is the virtual IP,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>never a node&nbsp;&nbsp;&nbsp;"]:::browser
  L1["<b>lb-01 · HAProxy primary</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>Keepalived MASTER, holds the VIP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>sticky sessions&nbsp;&nbsp;&nbsp;&nbsp;"]:::support
  L2["<b>lb-02 · HAProxy secondary</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>Keepalived BACKUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>sticky sessions&nbsp;&nbsp;&nbsp;&nbsp;"]:::support
  N1["<b>pentaho-node-01</b>&nbsp;&nbsp;&nbsp;&nbsp;<br/>Pentaho Server 11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>its own Jackrabbit journal id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]:::server
  N2["<b>pentaho-node-02</b>&nbsp;&nbsp;&nbsp;&nbsp;<br/>Pentaho Server 11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>its own Jackrabbit journal id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]:::server
  DB[("<b>db-01 · PostgreSQL 14</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>the three repository databases:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>the cluster journal, the Quartz tables&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;")]:::store
  T["<b>Tray.io</b>&nbsp;&nbsp;&nbsp;<br/>on a schedule or a webhook:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>starts a job, polls it to completion&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]:::input
  S1["<b>carte-slave-01</b>&nbsp;&nbsp;&nbsp;&nbsp;<br/>Carte&nbsp;&nbsp;&nbsp;"]:::server
  S2["<b>carte-slave-02</b>&nbsp;&nbsp;&nbsp;&nbsp;<br/>Carte&nbsp;&nbsp;&nbsp;"]:::server
  CM["<b>carte-master</b>&nbsp;&nbsp;&nbsp;<br/>Carte, port 9001&nbsp;&nbsp;&nbsp;&nbsp;<br/>runs transformations across the slaves&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]:::server
  U -->|"VIP 10.0.1.100&nbsp;&nbsp;&nbsp;&nbsp;"| L1
  U -.->|"the VIP after a failover&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"| L2
  L1 --> N1
  L1 --> N2
  L2 --> N1
  L2 --> N2
  N1 --> DB
  N2 --> DB
  DB ~~~ T
  T -->|"Carte REST API&nbsp;&nbsp;&nbsp;&nbsp;"| CM
  S1 -.->|"registers with&nbsp;&nbsp;&nbsp;&nbsp;"| CM
  S2 -.->|"registers with&nbsp;&nbsp;&nbsp;&nbsp;"| CM
```

<p align="center"><em>The eight hosts: two balancers sharing the virtual IP, two Pentaho nodes on one repository, and a Carte master with two slaves that Tray.io drives over the REST API</em></p>

***

<h3 align="center">What you'll learn</h3>

{% columns %}
{% column %}

* The rules that make a Pentaho cluster work: sticky sessions, a unique journal ID per node, clustered Quartz, the virtual IP as the base URL, and clocks in step
* Set up the shared PostgreSQL repository with the archive's own scripts
* Install and configure two Pentaho Server 11 nodes for the cluster
* Configure HAProxy with sticky sessions and the Keepalived virtual IP
  {% endcolumn %}

{% column %}

* Run the cluster tests: the virtual IP, sticky sessions, node and balancer failover, journal replication and Quartz registration
* Build a Carte master and two slaves, and define a clustering schema in Spoon
* Drive Pentaho Data Integration from Tray.io through the Carte REST API, on a schedule and from a webhook
* See how the same rules map onto K3s
  {% endcolumn %}
  {% endcolumns %}

***

<h3 align="center">Course outline</h3>

<p align="center"><i class="fa-file-lines" style="color:green;">:file-lines:</i> reading · <i class="fa-flask" style="color:orange;">:flask:</i> hands-on workshop</p>

{% hint style="info" icon="circle-info" %}
Full lessons unlock once you're enrolled — this is the outline only. Times are the lab guides' own estimates.
{% endhint %}

<table data-search="false"><thead><tr><th width="382">Module</th><th width="115" align="center">Reading</th><th width="132" align="center">Workshops</th><th width="100" align="right">Time</th></tr></thead><tbody><tr><td>Getting Started</td><td align="center">1</td><td align="center">—</td><td align="right">~5m</td></tr><tr><td>High Availability</td><td align="center">2</td><td align="center">3</td><td align="right">~4h</td></tr><tr><td><strong>Total</strong></td><td align="center"><strong>3</strong></td><td align="center"><strong>3</strong></td><td align="right"><strong>~4h 5m</strong></td></tr></tbody></table>

{% stepper %}
{% step %}

### <i class="fa-rocket" style="color:blue;">:rocket:</i> Getting Started

`1 reading · ~5m`

How to get the most out of this guide, and the hosts the cluster needs: eight Ubuntu machines on one subnet, the Pentaho Server and Pentaho Data Integration archives, and time kept in step on all of them.

<details>

<summary>See the full breakdown</summary>

<table data-search="false"><thead><tr><th width="79"></th><th>Lesson</th><th width="90">Time</th></tr></thead><tbody><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Before You Start</td><td>~5m</td></tr></tbody></table>

</details>
{% endstep %}

{% step %}

### <i class="fa-server" style="color:blue;">:server:</i> High Availability

`2 readings · 3 workshops · ~4h`

Production HA from the installation guide: two Pentaho nodes behind an HAProxy pair with Keepalived VIP failover, a shared PostgreSQL 14 repository, the Jackrabbit cluster journal and Quartz clustering - plus Carte clustering for Pentaho Data Integration execution and Tray.io driving event-based ETL through the Carte REST API.

<details>

<summary>See the full breakdown</summary>

<table data-search="false"><thead><tr><th width="79"></th><th>Lesson</th><th width="90">Time</th></tr></thead><tbody><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Overview of Pentaho HA</td><td>~20m</td></tr><tr><td><i class="fa-file-lines" style="color:green;">:file-lines:</i></td><td>Adaptation: HA on K3s</td><td>~10m</td></tr><tr><td></td><td></td><td></td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Deploy Pentaho in HA</td><td>~2h</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Carte Cluster for Pentaho Data Integration Execution HA</td><td>~45m</td></tr><tr><td><i class="fa-flask" style="color:orange;">:flask:</i></td><td>Tray.io Integration with Pentaho Carte</td><td>~45m</td></tr></tbody></table>

</details>
{% endstep %}
{% endstepper %}

***

<h3 align="center">Exam &#x26; accreditation</h3>

{% columns %}
{% column %}
{% hint style="info" icon="clipboard-check" %}
**The course exam**

REPLACE-ME — this course has no exam yet. Five questions on this material were carried over from the Containers exam as a start; the rest are still to be written.
{% endhint %}
{% endcolumn %}

{% column %}
{% hint style="warning" icon="file-certificate" %}
**Course accreditation**

REPLACE-ME — no course accreditation is issued until the exam exists; confirm its name.

This course is the fourth step on the Certified Solution Architect learning path: DI Developer — Practitioner, then Installation — Certified, the Containers, High Availability and Enterprise Security Speciality courses, leading to the Certified Solution Architect credential.
{% endhint %}
{% endcolumn %}
{% endcolumns %}

***

<p align="center"><a href="https://academy.pentaho.com/solution-architect-path-sandbox/" class="button secondary" data-icon="arrow-left">Back to the Solution Architect path</a></p>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://academy.pentaho.com/solution-architect-path-sandbox/speciality-courses/high-availability.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
