centos

centos postgresql集群搭建步骤

小樊
49
2025-05-15 06:53:19
栏目: 云计算

在CentOS上搭建PostgreSQL集群通常指的是使用Patroni来管理PostgreSQL的高可用性。以下是使用Patroni搭建PostgreSQL集群的基本步骤:

准备工作

安装依赖

在所有服务器上安装必要的软件包,例如pacemaker、corosync和patroni。

sudo yum install -y pacemaker corosync patroni

配置Corosync

编辑 /etc/corosync/corosync.conf 文件,配置集群成员和网络设置。

totem {
    version: 2
    cluster_name: pg_cluster
    transport: udpu
}

nodelist {
    node {
        ring0_addr: server1_ip
        nodeid: 1
    }
    node {
        ring0_addr: server2_ip
        NodeId: 2
    }
    node {
        ring0_addr: server3_ip
        NodeId: 3
    }
}

quorum {
    provider: corosync_votequorum
}

logging {
    to_logfile: yes
    logfile: /var/log/corosync/corosync.log
    to_syslog: yes
}

替换 server1_ipserver2_ipserver3_ip 为实际的服务器IP地址。

启动并启用Corosync服务

sudo systemctl start corosync
sudo systemctl enable corosync

配置Pacemaker

使用 crm 命令行工具配置Pacemaker资源。

sudo crm configure primitive pgsql ocf:heartbeat:pgsql \
    params pgctl "/usr/pgsql-12/bin/pg_ctl" \
    op monitor interval="30s"

这里假设你安装的是PostgreSQL 12版本,请根据实际情况调整路径和版本号。

配置Patroni

在每台服务器上创建Patroni配置文件 /etc/patroni.yml

scope: postgresql
name: postgresql@server1_ip
namespace: /db
restapi:
    listen: 0.0.0.0:8008
    connect_address: server1_ip
etcd:
    host: etcd_ip
    port: 2379
bootstrap:
    dcs:
        ttl: 30
        loop_wait: 10
        retry_timeout: 10
        maximum_lag_on_failover: 1048576
postgresql:
    use_pg_rewind: true
    use_slots: true
    parameters:
        wal_level: hot_standby
        listen_addresses: '0.0.0.0'
        connect_address: 127.0.0.1
        data_dir: /var/lib/postgresql/data
        pg_hba:
            - host replication replicator 0.0.0.0/0
            md5
        authentication:
            replication:
                username: replicator
                password: replicator_password
resources:
    - name: postgresql
      type: PostgreSQL
      roles:
        - standby
        - master
        - monitor
        - clone
        - manage
        - notify

替换 server1_ipetcd_ip 和密码为实际的值。每个服务器的 name 应该是唯一的,并且 listen 地址应该是该服务器的IP地址。

启动Patroni

在每台服务器上启动Patroni服务。

sudo systemctl start patroni
sudo systemctl enable patroni

验证集群状态

使用 crm_mon 命令检查集群状态。

sudo crm_mon -1

你应该能看到所有的资源(包括PostgreSQL实例)都在运行,并且集群状态是健康的。

请注意,这些步骤提供了一个基本的指南,实际部署时可能需要根据你的具体需求和环境进行调整。在生产环境中部署之前,建议进行充分的测试。

0
看了该问题的人还看了