如何搭建阿里云RDS PostgreSQL数据库的物理备库

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 如何搭建阿里云RDS PostgreSQL数据库的物理备库 用户在阿里云购买了RDS PostgreSQL,如何在自己的机房或者ECS上建立备库?关于如何构建逻辑备库,在我以前的文章有详细的讲解,所谓逻辑备库,是可以跨版本,甚至仅仅同步一部分相同步的表的备库。https://yq.aliyun

如何搭建阿里云RDS PostgreSQL数据库的物理备库

用户在阿里云购买了RDS PostgreSQL,如何在自己的机房或者ECS上建立备库?
关于如何构建逻辑备库,在我以前的文章有详细的讲解,所谓逻辑备库,是可以跨版本,甚至仅仅同步一部分相同步的表的备库。
https://yq.aliyun.com/articles/7240

如果用户需要构建一个和RDS PostgreSQL一模一样的备库,则可以通过流复制或者归档来完成。

步骤如下
.1. 准备备库环境
安装64位Linux
安装与RDS PostgreSQL大版本一致的PostgreSQL软件
空间规划
.2. 申请一个replication角色的用户(目前RDS 的根用户已自带replication权限)
.3. 配置外网地址(可选)
.4. 配置白名单,测试连通性正常
.5. 下载全量备份集,测试归档的下载接口是否正常
.6. 配置postgresql.conf, recovery.conf
.7. 启动备库,检查是否同步

详细步骤
.1. 准备备库环境
安装CentOS 6.x x64,步骤略。
线上RDS PostgreSQL版本为9.4.x,所以备库环境也需要安装9.4的大版本,我们可以安装9.4.6,关注一下release notes,确保兼容性。
PS,目前阿里RDS PostgreSQL软件还没有下载或开源,如果将来开放下载或开源的话,建议安装阿里云提供的PostgreSQL版本,可以保证兼容性,以及出问题可以找到阿里云的PostgreSQL内核团队修复。

确保与线上版本编译参数一致,包括插件版本。
只需要关注如下

select name,setting from pg_settings;  
 block_size                          | 8192  
 wal_block_size                      | 8192  
 rds_available_extensions            | plpgsql,pg_stat_statements,btree_gin,btree_gist,chkpass,citext,cube,dblink,dict_int,earthdistance,hstore,intagg,intarray,isn,ltree,pgcrypto,pgrowlocks,pg_prewarm,pg_trgm,postgres_fdw,sslinfo,tablefu  
nc,tsearch2,unaccent,postgis,postgis_topology,fuzzystrmatch,postgis_tiger_geocoder,plperl,pltcl,plv8,plls,plcoffee,"uuid-ossp",zhparser,pgrouting,rdkit,pg_hint_plan,pgstattuple

安装软件

wget https://ftp.postgresql.org/pub/source/v9.4.6/postgresql-9.4.6.tar.bz2  
tar -jxvf postgresql-9.4.6.tar.bz2  
cd postgresql-9.4.6  
./configure --prefix=/home/postgres/pgsql9.4.6 --with-blocksize=8 --with-wal-blocksize=8   
gmake -j 32 world  
gmake install-world

配置环境变量

vi ~/env_pg.sh  
# add by digoal  
export PS1="$USER@`/bin/hostname -s`-> "  
export PGPORT=1921  
export PGDATA=/data01/pgdata  
export LANG=en_US.utf8  
export PGHOME=/home/postgres/pgsql9.4.6  
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH  
export DATE=`date +"%Y%m%d%H%M"`  
export PATH=$PGHOME/bin:$PATH:.  
export MANPATH=$PGHOME/share/man:$MANPATH  
export PGHOST=$PGDATA  
export PGDATABASE=postgres  
export PGUSER=postgres  
alias rm='rm -i'  
alias ll='ls -lh'  
unalias vi  

postgres@digoal-> . ./env_pg.sh   
-bash: unalias: vi: not found  
postgres@digoal-> psql -V  
psql (PostgreSQL) 9.4.6

以下插件如果没有用到可以不安装,否则需要手动安装,安装方法见相应的插件官网或者搜索我的blog:

postgis, plv8, plls, plcoffee, zhparser, pgrouting, rdkit, pg_hint_plan

规划空间
目录空间至少要大于你所购买的RDS的容量规格,例如我买的是5G的实例,那么我本地的单个目录的空间要大于5GB。
PS,目前RDS PostgreSQL不支持自定义表空间,所以所有的数据都是放在默认表空间的,也即是需要单个目录的空间大于购买规格的空间的原因。将来如果RDS开放了创建表空间的权限,可以重新规划本地的目录。

[root@digoal ~]# df -h  
Filesystem      Size  Used Avail Use% Mounted on  
/dev/sda2        39G   22G   15G  61% /  
tmpfs           3.9G     0  3.9G   0% /dev/shm  
/dev/sdb         20G   44M   19G   1% /data01

.2. 申请一个replication角色的用户(目前RDS 的根用户已自带replication权限)
在阿里云管理控制台的右上方点击 工单服务 -> 提交工单 -> 关系型数据库RDS -> 直接提交工单,让客服创建一个有replication角色的用户。
PS,将来如果开放创建replication角色的API,就不需要提工单来申请账号了。

.3. 如果你需要将RDS复制到阿里云以外的主机,或者RDS和ECS在不同的可用区,则需要通过公网来连接。
那么需要用户配置RDS的公网地址,同样在阿里云管理控制台的RDS实例管理中可以申请公网地址。

.4. 在阿里云管理控制台的RDS 实例管理 -> 数据安全 配置白名单,测试连通性正常
例如备库的出口IP是固定的,则将这个IP添加到白名单,如果不是固定的IP,则需要添加0.0.0.0。

.5. 下载全量备份集
在控制台下载最近的一次全量备份集。

.6. 测试归档的下载接口是否正常
归档文件的下载需要通过调用API完成。

什么情况下需要用到API呢?当备库需要的XLOG文件已经被主库删除时。这种情况通常发生在自建的备库和主库网络异常,或者自建的备库由于某些原因停库后,长时间没有接收来自RDS PostgreSQL的XLOG,这些XLOG在RDS归档后就会从线上数据库的WAL日志中清除。
如果发现自建的备库报需要获取的XLOG不存在的错误,这个时候就需要从OSS下载归档了。
如果连OSS中都无法找到需要的归档,说明归档也清除了,那么就需要重建备库,回到第五步骤。

.7. 测试数据库的流复制连通性
请替换成您自己的RDS实例连接信息进行测试

postgres@digoal-> psql "replication=true" -h xxxx.pg.rds.aliyuncs.com -p 3433 -U digoal  
Password for user digoal:   
psql (9.4.6, server 9.4.1)  
Type "help" for help.  
postgres=> IDENTIFY_SYSTEM;  
      systemid       | timeline |  xlogpos   | dbname   
---------------------+----------+------------+--------  
 6165616856935119759 |        3 | 0/6B3A0180 |   
(1 row)

.8. 配置postgresql.conf, recovery.conf
解压全量备份集到规划好的目录。
/data01/pgdata

配置 postgresql.conf
在文件末尾追加如下:

# add by digoal  
port=1921  
unix_socket_directories='.'  
tcp_keepalives_idle = 70  
tcp_keepalives_interval = 10  
tcp_keepalives_count = 10  
log_destination='csvlog'  
logging_collector=on  
log_truncate_on_rotation=on  
log_line_prefix = ''  
log_checkpoints = on  
log_connections = on  
log_disconnections = on  
log_error_verbosity = verbose  
hot_standby = on  
max_standby_archive_delay = 300s  
max_standby_streaming_delay = 300s  
wal_receiver_status_interval = 1s  
hot_standby_feedback = on  
log_statement='none'  
archive_mode=on  
archive_command = '/bin/date'  
track_io_timing=off  
listen_addresses='0.0.0.0'

配置 recovery.conf
请替换成您自己的RDS实例连接信息

standby_mode = 'on'  
primary_conninfo = 'host=xxxxxx.pg.rds.aliyuncs.com user=digoal password=xxxx port=3433'  
recovery_target_timeline = 'latest'

.9. 启动备库,检查是否同步

pg_ctl start  

RDS
postgres@digoal-> psql -h xxxx.pg.rds.aliyuncs.com -p 3433 -U digoal postgres
Type "help" for help.  
postgres=> create table test(id timestamp);  
postgres=> insert into test values (now());  
postgres=> update test set id=now() returning *;  
postgres=> \watch 1  

备库
postgres@digoal-> psql -h 127.0.0.1 -p 1921 -U digoal postgres
Type "help" for help.  
postgres=> select * from test;  
postgres=> \watch 1  

查看是否能同步

风险点评估
.1. 建议不要使用replication slot, 因为slot会导致主节点不删除XLOG, 从而可能因为网络堵塞,备库异常等无法实时接收XLOG的情况下导致主节点因为保留pg_xlog而把空间用满。

用户可以通过这种方法搭建自己的备库,在RDS没有提供异地容灾服务前,进行异地容灾。

目录
相关文章
|
3月前
|
安全 OLAP 数据库
拒绝等待!阿里云瑶池数据库 x Qwen3,构建增强式RAG
阿里云瑶池 Dify on DMS + AnalyticDB 现已支持通义千问 Qwen3 全系列模型的私域部署,并提供独占模型服务,实现高效安全的 GraphRAG 业务应用及大模型应用开发解决方案。
|
2月前
|
Cloud Native 关系型数据库 分布式数据库
阿里云PolarDB与沃趣科技携手打造一体化数据库解决方案,助推国产数据库生态发展
阿里云瑶池数据库与沃趣科技将继续深化合作,共同推动国产数据库技术的持续创新与广泛应用,为行业生态的繁荣注入更强劲的技术动力。
阿里云PolarDB与沃趣科技携手打造一体化数据库解决方案,助推国产数据库生态发展
|
1月前
|
Cloud Native 关系型数据库 分布式数据库
客户说|知乎基于阿里云PolarDB,实现最大数据库集群云原生升级
近日,知乎最大的风控业务数据库集群,基于阿里云瑶池数据库完成了云原生技术架构的升级。此次升级不仅显著提升了系统的高可用性和性能上限,还大幅降低了底层资源成本。
|
2月前
|
人工智能 关系型数据库 分布式数据库
媒体声音|从亚太到欧美,阿里云瑶池数据库凭何成为中企出海的技术底气?
在中企出海的时代浪潮中,瑶池数据库正凭借其技术创新、场景化解决方案、智能化能力、全球化布局,成为企业跨越挑战、构建全球竞争力的关键伙伴;同时也以硬核的技术实力证明了中国数据库的国际竞争力。
|
2月前
|
安全 Apache 数据库
【倒计时3天】NineData x Apache Doris x 阿里云联合举办数据库技术Meetup,5月24日深圳见!
5月24日,NineData联合Apache Doris与阿里云在深圳举办数据库技术Meetup。活动聚焦「数据实时分析」与「数据同步迁移」两大领域,邀请行业专家分享技术趋势、产品实践及解决方案,助力企业构建高效安全的数据管理体系。时间:14:00-17:30;地点:深圳新一代产业园2栋20楼会议室。线下名额有限(80人),速报名参与深度交流!
70 1
|
2月前
|
SQL 关系型数据库 MySQL
阿里云《快速连接云数据库RDS》训练营,火热开营中!
快速连接云数据库 RDS 训练营开营啦!从 0 到 1 学习实战技能,涵盖 RDS MySQL 快速连接、DMS 数据管理及 SQL 实战案例。完成任务赢取专业飞盘、积木等好礼(限量 100 份)
|
24天前
|
存储 关系型数据库 测试技术
拯救海量数据:PostgreSQL分区表性能优化实战手册(附压测对比)
本文深入解析PostgreSQL分区表的核心原理与优化策略,涵盖性能痛点、实战案例及压测对比。首先阐述分区表作为继承表+路由规则的逻辑封装,分析分区裁剪失效、全局索引膨胀和VACUUM堆积三大性能杀手,并通过电商订单表崩溃事件说明旧分区维护的重要性。接着提出四维设计法优化分区策略,包括时间范围分区黄金法则与自动化维护体系。同时对比局部索引与全局索引性能,展示后者在特定场景下的优势。进一步探讨并行查询优化、冷热数据分层存储及故障复盘,解决分区锁竞争问题。
105 2
|
关系型数据库 分布式数据库 PolarDB
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
478 0
|
存储 缓存 关系型数据库

相关产品

  • 云数据库 RDS
  • 云数据库 RDS PostgreSQL 版
  • 云数据库 RDS MySQL 版
  • 推荐镜像

    更多