ubuntu

Ubuntu上PostgreSQL如何实现集群部署

小樊
43
2025-11-21 03:47:54
栏目: 云计算

在Ubuntu上部署PostgreSQL集群,通常指的是使用Patroni或Repmgr等工具来实现高可用性和故障转移。以下是使用Patroni进行PostgreSQL集群部署的基本步骤:

前提条件

  1. 操作系统:Ubuntu 18.04 LTS或更高版本。
  2. PostgreSQL:安装PostgreSQL 9.6或更高版本。
  3. 网络:确保所有节点之间可以互相通信。

安装依赖

sudo apt-get update
sudo apt-get install -y python3-pip git
pip3 install patroni[etcd]

配置etcd

Patroni使用etcd作为分布式配置存储和协调服务。

  1. 安装etcd

    sudo apt-get install -y etcd
    
  2. 启动并启用etcd服务

    sudo systemctl start etcd
    sudo systemctl enable etcd
    
  3. 验证etcd状态

    sudo etcdctl endpoint status
    

配置Patroni

在每个节点上创建Patroni配置文件/etc/patroni.yml

节点1(主节点)

scope: postgres
name: master
namespace: /db/
restapi:
  listen: 0.0.0.0:8008
  connect_address: 192.168.1.101  # 替换为你的IP地址
etcd:
  host: 192.168.1.101  # 替换为你的IP地址
  port: 2379
  ttl: 30
  loop_wait: 10
  retry_timeout: 10
  maximum_lag_on_failover: 1048576
  postgresql:
    use_pg_rewind: true
    use_slots: true
    parameters:
      wal_level: replica
      max_connections: 100
      hot_standby: on
      archive_mode: on
      archive_command: 'test ! -f /var/lib/postgresql/9.6/main/archive/%f && cp %p /var/lib/postgresql/9.6/main/archive/%f'
      restore_command: 'cp /var/lib/postgresql/9.6/main/archive/%f %p'
      wal_keep_segments: 8
      max_wal_senders: 4
      wal_sender_timeout: 60
      synchronous_commit: off
      synchronous_standby_names: '*'
  authentication:
    listen: 0.0.0.0:8009
    connection_string: 'user=replicator password=replicator dbname=postgres sslmode=disable'

节点2(备节点)

scope: postgres
name: standby
namespace: /db/
restapi:
  listen: 0.0.0.0:8008
  connect_address: 192.168.1.102  # 替换为你的IP地址
etcd:
  host: 192.168.1.101  # 替换为你的IP地址
  port: 2379
  ttl: 30
  loop_wait: 10
  retry_timeout: 10
  maximum_lag_on_failover: 1048576
  postgresql:
    use_pg_rewind: true
    use_slots: true
    parameters:
      wal_level: replica
      max_connections: 100
      hot_standby: on
      archive_mode: on
      archive_command: 'test ! -f /var/lib/postgresql/9.6/main/archive/%f && cp %p /var/lib/postgresql/9.6/main/archive/%f'
      restore_command: 'cp /var/lib/postgresql/9.6/main/archive/%f %p'
      wal_keep_segments: 8
      max_wal_senders: 4
      wal_sender_timeout: 60
      synchronous_commit: off
      synchronous_standby_names: 'master'
  authentication:
    listen: 0.0.0.0:8009
    connection_string: 'user=replicator password=replicator dbname=postgres sslmode=disable'

节点3(备节点)

scope: postgres
name: standby2
namespace: /db/
restapi:
  listen: 0.0.0.0:8008
  connect_address: 192.168.1.103  # 替换为你的IP地址
etcd:
  host: 192.168.1.101  # 替换为你的IP地址
  port: 2379
  ttl: 30
  loop_wait: 10
  retry_timeout: 10
  maximum_lag_on_failover: 1048576
  postgresql:
    use_pg_rewind: true
    use_slots: true
    parameters:
      wal_level: replica
      max_connections: 100
      hot_standby: on
      archive_mode: on
      archive_command: 'test ! -f /var/lib/postgresql/9.6/main/archive/%f && cp %p /var/lib/postgresql/9.6/main/archive/%f'
      restore_command: 'cp /var/lib/postgresql/9.6/main/archive/%f %p'
      wal_keep_segments: 8
      max_wal_senders: 4
      wal_sender_timeout: 60
      synchronous_commit: off
      synchronous_standby_names: 'master'
  authentication:
    listen: 0.0.0.0:8009
    connection_string: 'user=replicator password=replicator dbname=postgres sslmode=disable'

初始化数据库

在主节点上初始化数据库:

sudo systemctl stop postgresql
sudo patroni /etc/patroni.yml --initdb
sudo systemctl start postgresql

启动Patroni

在每个节点上启动Patroni服务:

sudo systemctl start patroni
sudo systemctl enable patroni

验证集群状态

使用patronictl命令检查集群状态:

sudo patronictl status

通过以上步骤,你可以在Ubuntu上部署一个基本的PostgreSQL集群。根据实际需求,你可能需要进一步调整配置,例如增加更多的备节点、优化性能参数等。

0
看了该问题的人还看了