w3resource

Comprehensive Guide to Setting Up PostgreSQL Patroni


PostgreSQL Patroni: High Availability Cluster Setup Guide

Patroni is an open-source tool designed for managing PostgreSQL clusters and enabling high availability (HA). Learn how to set up and use Patroni effectively.

What is PostgreSQL Patroni?

Patroni is a cluster management solution for PostgreSQL designed to ensure high availability and automatic failover. It leverages distributed consensus algorithms (like etcd or Consul) to maintain cluster state and manage leader election.

Key Features of Patroni:

  • High Availability: Automatic failover for uninterrupted database services.
  • Scalability: Easily scale PostgreSQL clusters.
  • Leader Election: Uses distributed consensus for leader management.
  • Customizable: Highly configurable for different environments.
  • Integration: Compatible with tools like Kubernetes, etcd, and Consul.

Prerequisites for Patroni Setup

  • PostgreSQL Installed: Ensure PostgreSQL is installed and running.
  • Distributed Consensus Tool: etcd, Consul, or Zookeeper installed.
  • Python: Patroni is a Python-based tool; install Python 3.

Setting up Patroni for PostgreSQL

Step 1: Install Patroni

# Install Patroni using pip
pip install patroni[etcd]

Step 2: Configure etcd or Consul

Patroni relies on distributed consensus tools like etcd or Consul. Here’s how to set up etcd:

# Install etcd (on Ubuntu)
sudo apt-get install etcd  

# Start etcd service
sudo systemctl start etcd

Step 3: Create Patroni Configuration File

Create a configuration file, patroni.yml:

scope: postgres_cluster
namespace: /service/
name: node1

etcd:
  host: 127.0.0.1:2379

postgresql:
  listen: 127.0.0.1:5432
  connect_address: 127.0.0.1:5432
  data_dir: /var/lib/postgresql/data
  authentication:
    replication:
      username: replicator
      password: replicate
    superuser:
      username: postgres
      password: postgres_password
  parameters:
    max_connections: 100
    shared_buffers: 256MB

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
  initdb:
  - encoding: UTF8
  - data-checksums

restapi:
  listen: 127.0.0.1:8008
  connect_address: 127.0.0.1:8008

Step 4: Start Patroni

# Run Patroni with the configuration
patroni patroni.yml

Step 5: Verify the Cluster

  • Cluster State: Use the REST API (http://127.0.0.1:8008) to check the cluster state.
  • Failover Testing: Simulate a node failure and confirm automatic failover.

Patroni on Kubernetes

Patroni integrates seamlessly with Kubernetes for containerized PostgreSQL environments. Tools like Helm can simplify deployment.

Deploying with Helm

  • helm repo add bitnami https://charts.bitnami.com/bitnami
  • helm install postgres bitnami/postgresql-ha

Advantages of using Patroni

  • Reliability: Ensures database uptime with automatic failover.
  • Performance: Provides minimal downtime during leader election.
  • Ease of Use: Simplifies cluster management with YAML configuration.

Limitations

  • Requires additional tools like etcd, Consul, or Zookeeper.
  • Configuration complexity for beginners.
  • Relies heavily on distributed consensus tools for state management.

All PostgreSQL Questions, Answers, and Code Snippets Collection.



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://w3resource.com/PostgreSQL/snippets/postgresql-patroni-setup.php