postgresql14 主备库切换后,原主库做为新的备库加入到集群

本文详述了在PostgreSQL14中如何进行主备库切换。当主库故障后,从库晋升为主库,并将原主库设置为新的备库。主要步骤包括:从库执行pg_ctl promote提升为主库,修改主库wal_log_hints配置,备份归档日志,使用scp复制日志到原主库,执行pg_rewind同步,创建standby.signal文件,最后重启原主库作为备库。

postgresql14 主备库切换后,原主库做为新的备库加入到集群中,要点如下:
master: 192.168.56.108
slave: 192.168.56.109
1、主库挂了后,从库提为主库,在从库上执行: pg_ctl promote
2、检查原master上的postgresql.conf文件,确保参数: wal_log_hints = on ,如果之前是off,则需要修改后,重启,再关闭;
3、备份原master上的归档日志目录:
cp -R /home/postgres/archives archives_bak
cp -R $PGDATA/pg_wal pg_wal_bak
4、进入slave后(目前已经是主库),通过scp命令,将当前slave的归档日志复制到原master主机,如下:
su - postgres
scp /home/postgres/archives/14/* postgres@192.168.56.108:/home/postgres/data/14/pg_wal/
将原主机的归档日志也复制到该目录下,在master主机上,
su - postgres
cp /home/postgres/archives/14/* $PGDATA/pg_wal/

5、在master主机上,执行pg_rewind同步时间线:
 pg_rewind -D $PGDATA -R --source-server 'host=192.168.56.109 port=5432 user=postgres dbname=postgres'

如果postgres用户有密码,则需要加上 password=密码


6、同步成功后,如果复制用户不是postgres,则需要修改 postgres.auto.conf文件
 primary_conninfo = 'user=replicator passfile=''/home/postgres/.pgpass'' channel_binding=prefer host=192.168.56.108 port=5432 sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any' 
 
 7、在master主机上,创建standby.signal文件:
 touch $PGDATA/standby.signal
 8、重启master,此时master作为备库
 pg_ctl start
 9、在slave上,执行 select * from pg_stat_replication;

<think>嗯,用户想了解PostgreSQL集群的搭建方法。我先看看用户提供的引用内容有什么相关信息。引用[1]提到配置节点信息,还有创建测试表和插入数据的操作步骤。引用[2]详细描述了从执行数据复制的具体命令,包括使用pg_basebackup工具和权限设置。引用[3]强调了节点间SSH免密互信的重要性,特别是root和postgres用户的配置。引用[4]则展示了PostgreSQL 12的编译安装过程。引用[5]非常有价值,它解释了集群的异步归档和实时两种模式的原理差异。 用户明确表示这些引用仅供参考,不是真实需求,所以我需要整合这些信息形成系统化的搭建指南。用户应该是想建立高可用的数据库架构,从引用[5]看,可能需要根据业务场景选择异步或实时同步模式。 我考虑把搭建流程分成几个关键阶段:首先是基础环境准,包括节点初始化、用户创建和SSH互信配置,这部分引用[3]提供了重要参考;然后是PostgreSQL安装,引用[4]的编译安装方法虽然详细但可能稍显复杂,我会补充更通用的软件包安装方案;接着是配置,要强调pg_hba.conf和postgresql.conf的关键参数修改;最重要的数据同步阶段,引用[2]的pg_basebackup命令需要完整保留;最后是故障切换测试,这个实际运维中容易忽视的环节特别重要。 在描述模式差异时,准引用[5]的内容来说明异步归档和实时的技术特点,特别是事务一致性与高性能模式的区别。这能帮助用户根据业务需求做选择。所有操作命令都会保持与引用中一致的格式,比如权限设置的chown命令和pg_basebackup的参数写法。 可能还需要补充引用中未提及但很重要的细节:比如角色切换的trigger文件机制,这在引用[3]提到但未展开;还有如何验证同步状态的方法。这些在实际搭建时都是关键检查点。 最后生成的问题要覆盖常见运维场景:同步模式选择依据是高可用需求强弱,日常监控可以用pg_isready等工具,故障处理则涉及日志分析和自动切换机制。这样既回答了当前问题,又预判了后续可能的需求。 </think>以下是PostgreSQL集群搭建的核心步骤及技术要点,综合多篇引用内容整理而成: --- ### **一、基础环境准** 1. **节点初始化** - 节点安装相同版本PostgreSQL(参考引用[4]的编译安装方法): ```bash ./configure --prefix=/usr/local/pgsql/12 # 定制安装路径 make && make install chown -R postgres:postgres /usr/local/pgsql # 权限设置 ``` - 创建专用用户(如`postgres`)并配置环境变量。 2. **SSH免密互信**(引用[3]) ```bash # 节点互相执行: ssh-keygen -t rsa ssh-copy-id postgres@<对方IP> # 为postgres用户配置互信 ``` --- ### **二、配置** 1. **启用归档与复制** 修改`postgresql.conf`: ```ini wal_level = replica max_wal_senders = 5 # 最大WAL发送进程数 archive_mode = on # 开启归档 archive_command = 'cp %p /path/to/archive/%f' # 归档命令 ``` 2. **配置访问权限**(`pg_hba.conf`) ```ini host replication replica <IP>/32 md5 # 允许连接 ``` 3. **创建复制账号** ```sql CREATE ROLE replica WITH LOGIN REPLICATION PASSWORD 'your_password'; ``` --- ### **三、配置** 1. **清空数据目录**(引用[2]) ```bash rm -rf /home/postgres/pgdata/* ``` 2. **从同步数据** ```bash pg_basebackup -h <IP> -p 5432 -U replica -D /home/postgres/pgdata \ -Fp -Xs -Pv -R # -R自动生成recovery.conf ``` > 输入`replica`用户密码后开始全量同步(引用[2])。 3. **检查生成的`standby.signal`文件** - 份完成后自动生成此文件标识角色。 --- ### **四、启动与验证** 1. **启动服务** ```bash # 节点分别执行 pg_ctl -D /home/postgres/pgdata start ``` 2. **验证状态** - **查询**: ```sql SELECT client_addr, state FROM pg_stat_replication; ``` 出现IP且`state=streaming`即为成功。 3. **数据同步测试**(引用[1]) - 插入数据: ```sql INSERT INTO t1 VALUES (111); ``` - 查询验证: ```sql SELECT * FROM t1; # 应返回相同数据 ``` --- ### **五、切换(手动)** 1. **提升** ```bash touch /home/postgres/pgdata/trigger_file # 触发切换(引用[3]) ``` 2. **原主切换** 修改原主配置后重启,使其从新同步数据。 --- ### **模式对比**(引用[5]) | **模式** | **数据一致性** | **性能影响** | |----------------|----------------------|--------------------| | **异步归档** | 延迟分钟级 | 低延迟 | | **实时高性能** | 可能丢事务(未确认) | 低延迟 | | **事务一致性** | 强一致(同步复制) | 高延迟(需确认)| > **模式选择建议**:金融场景选事务一致性;读多写少选异步归档;平衡场景选实时高性能。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值