ubuntu

如何在Ubuntu上实现PostgreSQL集群部署

小樊
45
2025-10-06 06:01:31
栏目: 云计算

在Ubuntu上实现PostgreSQL集群部署,可以使用Patroni和Pacemaker来管理高可用性和故障转移。以下是一个基本的步骤指南:

前提条件

  1. Ubuntu Server:确保你有一个运行Ubuntu的服务器。
  2. PostgreSQL:在所有节点上安装PostgreSQL。
  3. 网络配置:确保所有节点之间可以互相通信。

步骤

1. 安装必要的软件包

在所有节点上执行以下命令来安装Patroni和Pacemaker:

sudo apt-get update
sudo apt-get install -y pacemaker patroni postgresql-12-pgpool

2. 配置PostgreSQL

在每个节点上编辑/etc/postgresql/12/main/postgresql.conf文件,确保以下参数设置正确:

listen_addresses = '*'  # 或者指定具体的IP地址
wal_level = replica
max_wal_senders = 10
wal_keep_segments = 64
hot_standby = on

编辑/etc/postgresql/12/main/pg_hba.conf文件,添加以下行以允许从其他节点进行连接:

host    replication     replicator     <其他节点的IP>/32    md5
host    all             all             0.0.0.0/0               md5

重启PostgreSQL服务:

sudo systemctl restart postgresql

3. 配置Patroni

在每个节点上创建一个Patroni配置文件,例如/etc/patroni.yml。以下是一个示例配置:

scope: postgres
name: node1  # 每个节点的名称必须唯一
namespace: /db
restapi:
  listen: 0.0.0.0:8008
  connect_address: <当前节点的IP>
etcd:
  host: <etcd服务器的IP>: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
      synchronous_commit: off
      synchronous_standby_names: 'node2,node3'
      primary_conninfo:
        dbname: 'postgres'
        user: 'replicator'
        password: 'password'
        host: <当前节点的IP>
      standby_conninfo:
        dbname: 'postgres'
        user: 'replicator'
        password: 'password'
        host: <其他节点的IP>

在每个节点上运行Patroni:

sudo patroni /etc/patroni.yml

4. 配置Pacemaker

在其中一个节点上安装并配置Pacemaker:

sudo apt-get install -y pcs
sudo pcs status

创建集群:

sudo pcs cluster auth node1 node2 node3
sudo pcs cluster setup --name pg_cluster node1 node2 node3
sudo pcs cluster start --all

配置资源代理:

sudo pcs resource create pgsql ocf:heartbeat:pgsql \
    op monitor interval=30s \
    params pgctl="/usr/lib/postgresql/12/bin/pg_ctl" \
    op start timeout=60s \
    op stop timeout=60s \
    op promote timeout=60s \
    op demote timeout=60s \
    op monitor timeout=30s

将Patroni资源添加到集群中:

sudo pcs resource create patroni ocf:heartbeat:patroni \
    params config="/etc/patroni.yml" \
    op monitor interval=30s

将Patroni资源克隆到其他节点:

sudo pcs resource clone patroni node2
sudo pcs resource clone patroni node3

5. 验证集群状态

检查集群状态:

sudo pcs status

你应该看到所有节点都在线,并且PostgreSQL资源正在运行。

总结

通过以上步骤,你可以在Ubuntu上实现一个基本的PostgreSQL集群部署。Patroni和Pacemaker将帮助你管理高可用性和故障转移。根据你的具体需求,可能需要进一步调整配置。

0
看了该问题的人还看了