给数据库多一份后路:PostgreSQL主从复制和远程连接实战
很多项目刚开始跑PostgreSQL时往往只部署一台数据库。开发测试阶段这样没什么问题但一旦业务数据开始积累单机数据库的风险就会变得明显机器宕机、磁盘故障、误操作或服务异常都可能让系统直接停摆。主从流复制就是PostgreSQL里非常常见的一种高可用基础方案。它通过WAL日志把主库的数据变化持续同步到从库让数据库不再只有一份运行副本。主库负责写入从库可以承担备份、只读查询和故障切换准备。这篇文章会以PostgreSQL 14为例演示一主一从流复制的完整搭建过程。前面会先准备两台服务器确认系统版本、PostgreSQL版本、网络互通和端口访问再开始调整主库的postgresql.conf和pg_hba.conf。主库部分会配置监听地址、归档、WAL级别、复制连接数和保留日志大小并创建专用复制用户。随后使用pg_basebackup生成主库基础备份并将备份传输到从库用于初始化从库数据目录。后面会继续配置从库的standby.signal和复制连接信息启动服务后通过pg_stat_replication、pg_is_in_recovery()和测试表同步结果验证主从关系。最后再通过 cpolar 映射PostgreSQL的5432端口完成公网TCP连接测试。1.环境准备1.1 基础环境要求节点类型服务器地址系统版本PostgreSQL 版本核心要求主库Master192.168.42.140示例CentOS 7/8/9或Ubuntu 20.0414开启网络端口、关闭防火墙 / 放行5432端口从库Slave/Standby192.168.42.145示例与主库一致与主库完全一致与主库网络互通、磁盘空间不小于主库1.2 安装PostgreSQL还没安装PostgreSQL的小伙伴可以去cpolar官网参考《谁说没公网IP不能远程连数据库PostgreSQLcpolar打通任督二脉》这篇文章哦~2.1 修改PostgreSQL主配置文件主配置文件路径/var/lib/pgsql/14/data/postgresql.confvim/var/lib/pgsql/14/data/postgresql.conf修改以下核心参数取消注释并调整值# 1. 监听地址允许从库连接可指定从库IP或0.0.0.0允许所有listen_addresses*# 2. 开启归档模式主从复制依赖archive_modeon archive_commandcp %p /var/lib/pgsql/14/archive/%f# %p归档文件路径%f归档文件名# 提前创建归档目录mkdir-p/var/lib/pgsql/14/archivechown-Rpostgres:postgres /var/lib/pgsql/14/archive# 3. WAL日志配置保证复制可靠性wal_levelreplica# 复制所需的WAL级别replica/archive/logicalreplica足够wal_buffers16MB# 根据内存调整默认通常足够max_wal_senders10# 最大并发复制连接数大于从库数量即可wal_keep_size1GB# 保留WAL日志的大小防止从库同步滞后导致日志被清理# 4. 同步模式可选按需配置# synchronous_commit on # 默认同步提交保证主从数据一致性追求性能可设为off# synchronous_standby_names slave1 # 指定从库名称需与从库recovery.conf对应# 5. 其他优化可选max_connections1000# 大于从库的max_connections2.2 修改客户端认证配置文件文件路径/var/lib/pgsql/14/data/pg_hba.confvim/var/lib/pgsql/14/data/pg_hba.conf添加从库的连接授权允许从库 IP 通过复制用户连接hostreplication repl_user192.168.42.145/32 md5# 从库IPrepl_user为复制专用用户hostall all192.168.42.0/24 md5# 可选允许内网其他机器连接2.3 创建复制专用用户切换到postgres用户执行 SQL 命令创建用于主从复制的专用用户需授予复制权限su- postgres psql执行SQL-- 创建复制用户密码自定义示例Repl123456 CREATE ROLE repl_user WITH REPLICATION LOGIN ENCRYPTED PASSWORD********;-- 验证用户可选\du repl_user;-- 退出psql\q2.4 重启主库使配置生效systemctl restart postgresql-14 systemctl status postgresql-14sudo-upostgres psql-cSELECT pg_is_in_recovery();# 主库返回f非恢复模式2.5 备份主库数据供从库初始化使用pg_basebackup工具备份主库数据该工具专门用于PostgreSQL复制环境的从库初始化# 切换到postgres用户su- postgres# 执行备份备份到临时目录后续拷贝到从库pg_basebackup-h192.168.42.140-Urepl_user-p5432-D/tmp/pg_master_backup-Fp-Xs-P-R# 参数说明# -h主库地址# -U复制用户# -p主库端口# -D备份目录# -F p输出格式为普通文件与主库数据目录结构一致# -X s备份过程中同步复制WAL日志保证备份一致性# -P显示备份进度# -R自动生成复制所需的standby.signal文件和postgresql.auto.conf配置简化从库配置备份完成后将备份目录打包拷贝到从库的/var/lib/pgsql/14/目录下可通过 scp 传输tar-zcvfpg_master_backup.tar.gz /tmp/pg_master_backup# 主库上打包备份scppg_master_backup.tar.gz root192.168.1.101:/var/lib/pgsql/14# 传输到从库到从库所在地址查看一下是否传送成功到/var/lib/pgsql/143.从库配置3.1 停止从库PostgreSQL服务并清理原有数据目录# 停止从库服务systemctl stop postgresql-14# 清理原有数据目录初始化后的空目录需替换为主库备份mv/var/lib/pgsql/14/data /var/lib/pgsql/14/data_bak# 备份原有目录防止误删mkdir-p/var/lib/pgsql/14/data3.2 解压主库备份到从库数据目录# 切换到postgres用户su- postgres# 解压备份包tar-zxvf/var/lib/pgsql/14/pg_master_backup.tar.gz-C/var/lib/pgsql/14/# 移动备份数据到data目录mv/var/lib/pgsql/14/tmp/pg_master_backup/* /var/lib/pgsql/14/data/# 修改目录权限必须为postgres用户和组chown-Rpostgres:postgres /var/lib/pgsql/14/datachmod700/var/lib/pgsql/14/data3.3 验证 / 修改从库复制配置由于主库备份时使用了-R参数会自动生成standby.signal标识从库身份和postgresql.auto.conf包含复制连接信息无需手动创建# 查看自动生成的复制配置cat/var/lib/pgsql/14/data/postgresql.auto.confls/var/lib/pgsql/14/data/若没有则手动创建standby.signal并修改postgresql.conf# 手动创建standby.signal标识为从库touch/var/lib/pgsql/14/data/standby.signal# 编辑postgresql.conf添加复制配置,添加以下参数vim/var/lib/pgsql/14/data/postgresql.conf# 从库专属配置hot_standbyon# 允许从库处于恢复模式时提供查询服务只读max_connections500# 小于主库的max_connectionsprimary_conninfouserrepl_user passwordRepl123456 host192.168.42.140 port5432# 主库连接信息3.4 启动从库服务# 启动从库systemctl start postgresql-14 systemctlenablepostgresql-14# 验证从库状态systemctl status postgresql-144.验证主从复制是否生效4.1 主库验证复制状态su- postgres psql# 查看复制连接状态可看到从库的连接信息SELECT * FROM pg_stat_replication;# 输出说明# - usenamerepl_user复制用户# - client_addr192.168.1.101从库IP# - statestreaming表示正在流式复制# - sync_stateasync异步复制或 sync同步复制需主库配置synchronous_commiton从提供的pg_stat_replication查询结果来看PostgreSQL主从复制已经成功建立并且处于正常运行状态。这是一个非常关键的监控视图用于查看 主库上的复制连接状态。4.2 从库验证复制状态su- postgres psql# 1. 验证是否处于恢复模式从库返回t主库返回fSELECT pg_is_in_recovery();4.3 验证主从数据一致性# 主库创建测试表并插入数据# 主库执行CREATE DATABASE test_repl;\c test_repl;CREATE TABLE user_info(id int, name varchar(50));INSERT INTO user_info VALUES(1,test_replication);# 从库执行查看是否同步到数据\c test_repl;SELECT * FROM user_info;主库从库从上图我们可以看出主从复制成功啦5.主从复制常用操作5.1 切换主从故障转移简易版当主库故障时可将从库提升为主库# 从库执行停止恢复模式提升为主库su- postgres psql-cSELECT pg_promote();# 验证提升后从库pg_is_in_recovery()返回fpsql-cSELECT pg_is_in_recovery();5.2 监控复制延迟# 从库执行查看复制延迟单位秒SELECT now()- pg_last_xact_replay_timestamp()AS replication_delay;5.3新增从库只需重复 “从库配置” 步骤使用主库或现有从库需开启级联复制的pg_basebackup备份初始化即可。5.4 拓展主从复制已经成功搭建但我们的目标远不止于此。回想一下在开发、测试甚至小型项目交付中你是否也曾陷入这样的困境“我在家搭了个PostgreSQL数据库同事怎么连不上”“客户急着看Demo可服务跑在内网根本没法访问”“没有公网IP难道只能租云服务器或者干脆放弃远程演示”别焦虑——没有公网IP并不意味着你的服务只能困在局域网里。借助一个轻量级但强大的内网穿透工具cpolar你可以轻松将本地运行的PostgreSQL服务“暴露”到公网自动生成一个安全、可分享的HTTPS隧道地址。无论你身处家庭宽带、公司防火墙后还是校园网深处外部用户都能像访问普通网站一样通过标准端口安全连接你的数据库。本文将手把手带你完成这一过程从零配置cpolar到安全地将PostgreSQL服务映射至公网打通内网与外部世界的连接通道。从此“我的数据库在哪服务就在哪”不再是一句空话。准备好了吗让我们开启这场高效、安全、低成本的“内网突围”之旅6.安装cpolar实现随时随地开发6.1 什么是cpolarcpolar是一款安全高效的内网穿透工具无需公网IP或复杂配置只需一条命令即可将本地服务器、Web服务或任意端口映射到公网让你随时随地远程访问内网应用特别适合开发调试、远程运维和应急部署等场景。6.2 部署cpolarcpolar 可以将你本地电脑中的服务如 SSH、Web、数据库映射到公网。即使你在家里或外出时也可以通过公网地址连接回本地运行的开发环境。❤️以下是安装cpolar步骤使用一键脚本安装命令sudocurlhttps://get.cpolar.sh|sh安装完成后执行下方命令查看cpolar服务状态如图所示即为正常启动sudosystemctl status cpolarCpolar安装和成功启动服务后在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问Cpolar管理界面使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可打开浏览器访问本地9200端口使用cpolar账户密码登录即可,登录后即可对隧道进行管理。7.配置公网地址通过配置你可以在本地 WSL 或 Linux 系统上运行 SSH 服务并通过 Cpolar 将其映射到公网从而实现从任意设备远程连接开发环境的目的。隧道名称可自定义本例使用了:postgres注意不要与已有的隧道名称重复协议tcp本地地址192.168.42.140:5432端口类型随机临时TCP端口地区China Vip创建成功后打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址接下来就可以在其他电脑或者移动端设备异地上使用任意一个地址在终端中访问即可。tcp 表示使用的协议类型2.tcp.vip.cpolar.cn是 Cpolar 提供的域名11084是随机分配的公网端口号通过 Cpolar 提供的公网地址和端口使用 SSH 协议从任意一台主机连接到postgres账号啦psql-h2.tcp.vip.cpolar.cn-p11084-Upostgres-dmydb8.保留固定TCP公网地址使用cpolar为其配置TCP地址该地址为固定地址不会随机变化。选择区域和描述有一个下拉菜单当前选择的是“China VIP”。右侧输入框用于填写描述信息。保留按钮在右侧有一个橙色的“保留”按钮点击该按钮可以保留所选的TCP地址。列表中显示了一条已保留的TCP地址记录。地区显示为“China VIP”。地址显示为“8.tcp.vip.cpolar.cn:13299”。登录cpolar web UI管理界面点击左侧仪表盘的隧道管理——隧道列表找到所要配置的隧道postgres点击右侧的编辑。修改隧道信息将保留成功的TCP端口配置到隧道中。端口类型选择固定TCP端口预留的TCP地址填写保留成功的TCP地址点击更新。创建完成后打开在线隧道列表此时可以看到随机的公网地址已经发生变化地址名称也变成了保留和固定的TCP地址。最后测试一下固定的地址是否好用测试命令psql-h8.tcp.vip.cpolar.cn-p13299-Upostgres-dmydb这样我们成功打破了“没有公网 IP 就无法远程访问数据库”的固有认知。总结完成主从流复制后PostgreSQL就不再只是单点运行。主库发生数据变化时从库可以持续接收WAL日志并同步数据为后续备份、只读查询和故障切换提供基础。这套方案的重点不只是把从库启动起来而是把复制链路验证清楚。主库能看到pg_stat_replication中的streaming状态从库能通过pg_is_in_recovery()确认自己处于恢复模式测试表数据也能从主库同步到从库这些才说明复制真正生效。故障转移时可以通过pg_promote()将从库提升为新主库。不过这一步不建议随意操作正式环境中还应配合应用连接切换、备份策略、监控告警和回切方案避免只完成数据库提升却没有处理业务侧连接。配置 cpolar 后本地PostgreSQL服务可以通过公网TCP地址连接。随机TCP端口适合临时测试固定TCP地址更适合长期演示或外部环境接入避免连接信息频繁变化。需要注意的是数据库公网访问必须谨慎。无论是测试还是演示都应使用强密码、最小权限账号、明确的访问范围和必要的防火墙策略避免把核心数据库长期裸露在公网中。PostgreSQL负责数据可靠性主从复制负责降低单点风险cpolar则负责补上远程连接通道。

相关新闻

三相整流+三相逆变测量线电压而非相电压

三相整流+三相逆变测量线电压而非相电压

2026/7/18 22:38:56阅读更多 →
3步掌握Montserrat字体:免费开源字体的终极使用指南

3步掌握Montserrat字体:免费开源字体的终极使用指南

3步掌握Montserrat字体:免费开源字体的终极使用指南 【免费下载链接】Montserrat 项目地址: https://gitcode.com/gh_mirrors/mo/Montserrat 你是否正在寻找一款既现代又优雅的免费字体?Montserrat字体正是你需要的完美解决方案。这款开源几何无…

2026/7/18 22:38:56阅读更多 →
vue2项目点击跳转小程序

vue2项目点击跳转小程序

需求&#xff1a;在vue2项目中点击某个按钮跳转到指定小程序第一步&#xff1a;在main.js中暴露点击跳转的标签Vue.config.ignoredElements [wx-open-launch-weapp]第二步&#xff1a;页面写对应的html<wx-open-launch-weapp username"gh_9fafa" path""…

2026/7/18 22:38:56阅读更多 →
极简架构的熔断与降级:用状态机模式实现优雅的服务保护层

极简架构的熔断与降级:用状态机模式实现优雅的服务保护层

极简架构的熔断与降级&#xff1a;用状态机模式实现优雅的服务保护层 一、为什么熔断器是分布式系统的必需品 分布式系统中&#xff0c;服务间的依赖不可避免。当一个下游服务开始变慢或出错&#xff0c;如果不加保护&#xff0c;调用方的线程/goroutine/连接会被耗尽&#xff…

2026/7/19 0:23:08阅读更多 →
Go 微服务的性能调优案例:从 P99 延迟 2s 到 200ms 的全链路排查复盘

Go 微服务的性能调优案例:从 P99 延迟 2s 到 200ms 的全链路排查复盘

Go 微服务的性能调优案例&#xff1a;从 P99 延迟 2s 到 200ms 的全链路排查复盘 一、问题症状与初步排查 线上监控告警&#xff1a;某核心查询服务的 P99 延迟从正常的 150ms 飙升至 2s&#xff0c;P50 稳定在 50ms。这是典型的"长尾延迟"问题——大部分请求正常&am…

2026/7/19 0:23:08阅读更多 →
一个文件夹 + 一个Markdown文件 = 你的第一个Skill

一个文件夹 + 一个Markdown文件 = 你的第一个Skill

上个月&#xff0c;我被临时抽调去支援一个“代码抢救”项目——一个迭代了四年的支付模块&#xff0c;文档约等于零&#xff0c;单元测试覆盖率不到 20%&#xff0c;原班人马跑得就剩一个刚转正的哥们儿。leader 让我带着他把核心接口的单元测试补齐&#xff0c;我一打开那个 …

2026/7/19 0:21:08阅读更多 →
黄仁勋最新对话:未来企业的核心资产,不是大模型,而是自己的 Agent Harness

黄仁勋最新对话:未来企业的核心资产,不是大模型,而是自己的 Agent Harness

英伟达工程师正在从“写 Python”转向“造 Agent”&#xff0c;企业 AI 的竞争也将从模型能力转向系统能力。 过去几年&#xff0c;企业讨论人工智能&#xff0c;最常问的问题是&#xff1a; 应该选择哪一个大模型&#xff1f; 但在 NVIDIA CEO 黄仁勋与 LangChain CEO、联合创…

2026/7/19 0:21:08阅读更多 →
银行数字化转型催生测试新需求:金融科技岗,秋招值得All in吗?

银行数字化转型催生测试新需求:金融科技岗,秋招值得All in吗?

很多人已经开始纠结了。 2026年秋招刚启动&#xff0c;室友拿到了招银网络科技测试开发工程师的Offer&#xff0c;月薪15-25K&#xff0c;14薪。另一个去了中国农业银行研发中心做测试开发&#xff0c;总包算下来一年接近30万。 而隔壁实验室的师兄&#xff0c;投了三个月互联网…

2026/7/19 0:21:08阅读更多 →
V1-S1-E2 · 大荒东经 · 合虚山 — 辐射备份接收端口(日出主通道B)

V1-S1-E2 · 大荒东经 · 合虚山 — 辐射备份接收端口(日出主通道B)

【归元摘要】《山海经》原型系统源自超维文明架构&#xff0c;其底层逻辑远超碳基生物认知阈值。以下解析是在人类语言边界内&#xff0c;对该系统工程功能的逼近描述。该结构逻辑层级高于碳基工业体系&#xff0c;以下为降维投影。它不可归约至任何现代工业制品。仅保留可实证…

2026/7/19 0:21:08阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中&#xff0c;我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源&#xff0c;还是配置文件、证书等&#xff0c;都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下&#xff0c;但这…

2026/7/19 0:01:04阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP&#xff08;轻量级目录访问协议&#xff09;作为企业级身份认证的黄金标准&#xff0c;已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时&#xff0c;发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:01:04阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”&#xff0c;而是以可解释、可审计、可迭代的方式&#xff0c;赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:01:04阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中&#xff0c;我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源&#xff0c;还是配置文件、证书等&#xff0c;都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下&#xff0c;但这…

2026/7/19 0:01:04阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP&#xff08;轻量级目录访问协议&#xff09;作为企业级身份认证的黄金标准&#xff0c;已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时&#xff0c;发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:01:04阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”&#xff0c;而是以可解释、可审计、可迭代的方式&#xff0c;赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:01:04阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时&#xff0c;发现推理速度只有可怜的 1-2 FPS&#xff0c;而别人的演示视频却能跑到 30 FPS 以上&#xff0c;那么问题很可能不在模型本身&#xff0c;而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后&#xff0c;会直接使用官方示例…

2026/7/18 22:49:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一&#xff1a;为什么你需要了解 Coze 和 Dify&#xff1f;如果你对 AI 应用开发感兴趣&#xff0c;但一看到“大模型”、“智能体”、“工作流”这些词就头疼&#xff0c;觉得门槛太高&#xff0c;那这篇文章就是为你准备的。很多开发者&#xff0c;包括我自己&#…

2026/7/18 14:49:24阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会&#xff1a;配图一直是个让人头疼的问题。2026年&#xff0c;AI生图工具已经非常成熟了&#xff0c;但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1&#xff1a;速度之王2026年6月11日&#xff0c…

2026/7/18 18:49:35阅读更多 →