centos

CentOS上PostgreSQL集群如何搭建

小樊
34
2025-02-19 02:30:08
栏目: 云计算

在CentOS上搭建PostgreSQL集群,通常指的是使用Patroni来管理PostgreSQL的高可用性。Patroni是一个用于管理PostgreSQL、MariaDB和MongoDB高可用性的工具,它可以与Pacemaker和Corosync一起工作,提供故障转移和自动恢复功能。

以下是在CentOS上使用Patroni搭建PostgreSQL集群的基本步骤:

  1. 准备工作

    • 确保你有三台或以上的服务器,每台服务器都将运行一个PostgreSQL实例。
    • 所有服务器都应该安装相同版本的PostgreSQL。
    • 确保服务器之间可以互相通信,并且防火墙设置允许必要的端口(默认是5432)。
  2. 安装依赖: 在所有服务器上安装必要的软件包,例如pacemakercorosyncpatroni

    sudo yum install -y pacemaker corosync patroni
    
  3. 配置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地址。

  4. 启动并启用Corosync服务

    sudo systemctl start corosync
    sudo systemctl enable corosync
    
  5. 配置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版本,请根据实际情况调整路径和版本号。

  6. 配置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
    postgresql:
      listen: 0.0.0.0:5432
      connect_address: 127.0.0.1
      data_dir: /var/lib/postgresql/data
      pg_hba:
      - host replication replicator 0.0.0.0/0 md5
      - host all all 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地址。

  7. 启动Patroni: 在每台服务器上启动Patroni服务。

    sudo systemctl start patroni
    sudo systemctl enable patroni
    
  8. 验证集群状态: 使用crm_mon命令检查集群状态。

    sudo crm_mon -1
    

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

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

0
看了该问题的人还看了