centos7安装安装pgsql15 3节点主从版本并且安装repmgr Pgpool-II 做到故障自动切换三个ip分别为10.255.32.218 10.255.32.219 10.255.32.220给出每个节点需要执行的命令 首先三台节点做个免密操作
时间: 2025-06-23 15:23:12 浏览: 14
<think>嗯,用户想在三个CentOS7节点上安装PostgreSQL 15的主从集群,还要用repmgr和Pgpool-II实现自动故障切换。首先,我需要理清楚整个流程步骤,确保每一步都正确无误。用户还特别提到了三个IP地址:10.255.32.218、219、220,需要为每个节点配置相应的命令,特别是免密登录的部分。
首先,免密操作是基础,三台机器之间需要互相SSH免密登录,这样后续的自动化脚本和复制管理会更方便。这部分可能需要生成SSH密钥,并将公钥分发到其他节点,包括自己,因为有时候脚本会需要本地登录。需要注意的是,每个节点都要执行相同的操作,把各自的公钥添加到authorized_keys中,所以可能需要一个循环或者逐一处理的步骤。
接下来是安装PostgreSQL 15。CentOS7默认的仓库可能没有PostgreSQL 15,所以需要添加PGDG的仓库。安装完成后,初始化数据库,调整配置文件,比如listen_addresses、pg_hba.conf,这些都需要正确设置,允许其他节点的复制连接和应用程序的连接。创建复制专用的用户也是必须的,这部分要注意权限和密码的安全性。
然后是配置repmgr,用于管理复制和故障转移。每个节点需要安装repmgr的包,创建repmgr的数据库和用户,修改repmgr的配置文件,指定节点ID、名称、连接信息等。主节点需要注册,备节点则需要克隆主节点的数据,并注册为备节点。这里要特别注意pg_basebackup命令的参数是否正确,比如目标目录、主机地址、用户名等。
接下来是Pgpool-II的安装和配置。Pgpool-II负责负载均衡和故障切换,需要安装并配置pcp.conf、pool_hba.conf、pool_passwd等文件,确保能够连接到PostgreSQL的后端。配置文件中需要定义后端节点,指定主库和备库的地址,以及设置failover相关的命令,这里可能需要指定repmgr的触发脚本。此外,健康检查的配置也很重要,确保Pgpool能及时检测到节点故障。
故障自动切换方面,需要确保repmgr和Pgpool-II的集成。当主节点故障时,repmgr会提升一个备节点为新的主节点,Pgpool-II需要感知到这个变化,可能需要执行failover脚本来更新后端配置。这部分可能需要编写自定义脚本,或者利用repmgr提供的通知功能。
在验证阶段,需要检查主从复制是否正常,repmgr的集群状态是否显示所有节点正常,Pgpool-II是否能正确路由请求,以及模拟故障时是否能自动切换。这些测试步骤是确保整个集群可靠性的关键。
可能遇到的坑点包括:防火墙或SELinux导致连接问题,需要确保端口5432(PostgreSQL)和9999(Pgpool-II)开放,以及SSH端口畅通。另外,配置文件中的IP地址和主机名是否正确,复制用户的密码是否一致,pg_hba.conf中的条目是否允许来自其他节点的连接。还有,时间同步问题,三个节点的时间必须同步,否则可能导致复制和集群管理的问题。
需要提醒用户,生产环境中要考虑数据备份、监控、日志管理等,这里只是基础的高可用配置。另外,文档中的命令可能需要根据实际环境调整,比如目录路径、版本号等。特别是当用户的环境有特殊的安全策略时,可能需要额外的步骤。</think>以下是CentOS 7系统部署3节点PostgreSQL 15主从集群 + repmgr + Pgpool-II的详细步骤:
---
### 一、三节点互信配置(所有节点执行)
```bash
# 生成SSH密钥(所有节点执行)
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
# 将公钥复制到其他节点(每个节点分别执行)
for ip in 10.255.32.218 10.255.32.219 10.255.32.220; do
ssh-copy-id -i ~/.ssh/id_rsa.pub root@$ip
done
# 验证免密登录
ssh 10.255.32.219 date && ssh 10.255.32.220 date
```
---
### 二、安装PostgreSQL 15(所有节点执行)
```bash
# 添加PostgreSQL官方仓库
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 安装PostgreSQL 15
sudo yum install -y postgresql15-server postgresql15-contrib postgresql15-devel
# 初始化数据库(仅在主节点执行,后续节点通过复制同步)
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
sudo systemctl enable postgresql-15
```
---
### 三、配置主节点(10.255.32.218)
1. 修改`/var/lib/pgsql/15/data/postgresql.conf`:
```ini
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
hot_standby = on
```
2. 修改`/var/lib/pgsql/15/data/pg_hba.conf`:
```conf
host replication repuser 10.255.32.0/24 md5
host all all 10.255.32.0/24 md5
```
3. 创建复制用户:
```bash
sudo -u postgres psql -c "CREATE USER repuser REPLICATION LOGIN CONNECTION LIMIT 3 ENCRYPTED PASSWORD 'your_password';"
```
4. 启动服务:
```bash
sudo systemctl restart postgresql-15
```
---
### 四、配置备节点(219/220执行)
```bash
# 停止服务
sudo systemctl stop postgresql-15
# 清空数据目录
sudo rm -rf /var/lib/pgsql/15/data/*
# 克隆主节点数据
sudo -u postgres pg_basebackup -h 10.255.32.218 -U repuser -D /var/lib/pgsql/15/data -P -R
# 启动服务
sudo systemctl start postgresql-15
```
---
### 五、安装配置repmgr(所有节点执行)
1. 安装repmgr:
```bash
sudo yum install repmgr15
```
2. 创建repmgr数据库:
```sql
sudo -u postgres psql -c "CREATE DATABASE repmgr;"
sudo -u postgres psql -c "ALTER USER repuser SUPERUSER;"
```
3. 配置`/etc/repmgr/15/repmgr.conf`:
```conf
node_id=1 # 218节点设为1,219设为2,220设为3
node_name='node1' # 对应节点名称
conninfo='host=10.255.32.218 user=repuser dbname=repmgr password=your_password'
data_directory='/var/lib/pgsql/15/data'
failover=automatic
```
4. 注册节点:
```bash
# 主节点执行
sudo -u postgres repmgr primary register
# 备节点执行
sudo -u postgres repmgr standby clone -h 10.255.32.218
sudo -u postgres repmgr standby register
```
---
### 六、安装配置Pgpool-II(所有节点执行)
1. 安装Pgpool-II:
```bash
sudo yum install -y pgpool-II-pg15
```
2. 配置`/etc/pgpool-II/pcp.conf`:
```conf
pgpool:your_password
```
3. 配置`/etc/pgpool-II/pool_hba.conf`:
```conf
host all all 10.255.32.0/24 md5
```
4. 主配置文件`/etc/pgpool-II/pgpool.conf`:
```conf
backend_hostname0 = '10.255.32.218'
backend_port0 = 5432
backend_weight0 = 1
backend_hostname1 = '10.255.32.219'
backend_port1 = 5432
backend_weight1 = 1
backend_hostname2 = '10.255.32.220'
backend_port2 = 5432
backend_weight2 = 1
failover_command = '/etc/pgpool-II/failover.sh %h %p %D'
health_check_period = 10
```
5. 启动服务:
```bash
sudo systemctl enable pgpool-II
sudo systemctl start pgpool-II
```
---
### 七、验证集群状态
```bash
# 检查复制状态
sudo -u postgres repmgr cluster show
# 测试Pgpool连接
psql -h 10.255.32.218 -p 9999 -U postgres -c "show pool_nodes;"
```
---
**注意事项**:
1. 需关闭防火墙或开放端口5432, 9999
2. 所有节点时间必须同步(建议安装chrony)
3. 实际密码需替换`your_password`
4. 故障切换脚本需要根据实际环境编写
5. 生产环境建议配置VIP和watchdog
阅读全文
相关推荐

















