96SEO 2026-05-03 06:01 5

如果你已经在生产环境里折腾了几年的数据库, 突然发现一次硬盘崩溃就把业务拉进了深渊,那种心情……简直比看完一部烂片还难受。于是 高可用容灾备份便成了每个 DBA 必不可少的“灵魂伴侣”。在 Debian 系统上部署 PostgreSQL 的流复制, 不仅能让你的数据实时同步,还能在主库挂掉的瞬间把读请求无缝切到从库,真正做到“一键恢复”。下面我将用最接地气的语言、配合大量代码示例,带你一步步完成这套“魔法”。准备好咖啡和键盘了吗?让我们开始吧,没耳听。。
| 项目 | 要求 |
|---|---|
| 操作系统 | Debian 10/11/12 |
| PostgreSQL 版本 | 12 以上 |
| 网络连通性 | 主从机器之间 TCP 5432 端口必须畅通 |
| 系统时间同步 | NTP 同步,否则 WAL 时间戳会闹笑话 |
| 磁盘空间 | 至少保留 5GB 的 WAL 日志存档空间 |
公正地讲... 小贴士:如果你是第一次踩踏 Linux 防火墙,别忘了先把 ufw 或 iptables 给关掉——不然连不上也只能怪自己。
# 更新软件源
sudo apt update && sudo apt upgrade -y
# 安装 NTP
sudo apt install -y ntp
sudo systemctl enable --now ntp
# 添加官方仓库
echo "deb http://apt.postgresql.org/pub/repos/apt $-pgdg main" \
| sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc \
| sudo apt-key add -
sudo apt update
sudo apt install -y postgresql-14 postgresql-contrib
安装完毕后用 psql --version 确认两台机器的版本保持一致。
打开位于 /etc/postgresql/14/main/postgresql.conf 的配置文件,将以下关键参数调好:,太刺激了。
# Listen on all interfaces
listen_addresses = '*'
# 开启流复制所需的 WAL 设置
wal_level = replica # 必须是 replica 或 logical
max_wal_senders = 10 # 根据从库数量酌情增减
wal_keep_segments = 64 # 保留足够的 WAL 文件防止落后太多
# 热备模式,让从库可以接受只读查询
hot_standby = on
# 合理设置 checkpoint 参数,防止磁盘突发写入导致卡顿
checkpoint_timeout = 5min
checkpoint_completion_target = 0.9
max_replication_slots = 5 # 若使用逻辑复制,可提前预留槽位
在同目录下的 /etc/postgresql/1 不忍卒读。 4/main/pg_hba.conf 添加一行:
# 主库允许 replicator 从任意 IP 同步数据
host replication replicator 192.168.1.0/24 md5
host all all 127.0.0.1/32 trust # 本地连接保持简单
host all all ::1/128 trust
# 切换到 postgres 系统用户
sudo -i -u postgres
# 创建一个只用于复制的角色,密码自行设定
createuser --replication --login --no-superuser --no-createdb \
--no-createrole replicator
psql -c "ALTER USER replicator WITH ENCRYPTED PASSWORD 'YourStrongPass!';"
\q
exit # 返回普通用户
# 在从库上施行:
sudo systemctl stop postgresql@14-main # 确保服务已彻底停止
sudo rm -rf /var/lib/postgresql/14/main/* # 清空旧数据目录
# 施行一次完整基线备份并压缩归档:
sudo -u postgres pg_basebackup \
-h 主库IP地址 \
-D /var/lib/postgresql/14/main \
-U replicator \
-W \
-P \
--wal-method=stream \
--format=tar \
--gzip
# 解压缩得到的数据目录:
cd /var/lib/postgresql/14/main && tar xzf *.tar.gz && rm *.tar.gz
A) 在 data 目录下创建一个空文件表示该实例是 standby:,捡漏。
# touch /var/lib/postgresql/14/main/standby.signal
B) 再编辑同目录下的 /etc/postgresql/14 至于吗? /main/postgresql.conf , 加入以下内容:
也是没谁了。 # 与主库保持心跳链接的信息: primary_conninfo = 'host=主库IP地址 port=5432 user=replicator password=YourStrongPass!'
我悟了。 triggerfile = '/tmp/promoteto_master.trigger'
hot_standby = on
archivemode = on archivecommand = 'cp %p /var/lib/postgresql/14/walarchive/%f' archivetimeout = 60s,我是深有体会。
PITFALL CURE "could not connect to server: Connection refused"- 检查 listenaddresses 是否为 '*' - 防火墙是否放行端口5432 - 主机名解析是否正确。 "WAL archiving failed"- 确认 archivecommand 路径存在且可写 - 检查磁盘配额。 "replication slot does not exist"- 在主库创建对应 slot: SELECT * FROM pgcreatephysicalreplicationslot; "restartpoint after recovery is required"- 确认 standby.signal 存在;若仍报错,请删除 data 并重新 basebackup。 "duplicate key value violates unique constraint"- 数据冲突通常是主要原因是手动修改了 from‑standby 的表结构,请保持两端 schema 一致,不夸张地说...。
# 主库: sudo systemctl enabl 改进一下。 e --now postgresql@14-main
# 切换到 postgres 用户并进入 psql:
sudo -i -u postgres psql
CREATE DATABASE demo; \c demo
CREATE TABLE notes ( id SERIAL PRIMARY KEY, content TEXT NOT NULL, created_at TIMESTAMP DEFAULT now ); INSERT INTO notes VALUES , ; \q
SELECT * FROM notes;
If you see two rows inserted earlier, 🎉恭喜,你已经成功完成了流复制!若还没有同步,请耐心等几秒钟或查看日志排查延迟原因,来日方长。。
# 在主库运行: SELECT pid, clientaddr, state, syncstate, sentlsn, writelsn, flushlsn, replaylsn, 佛系。 now - backendstart AS uptime, now - pglastxactreplaytimestamp AS lagtime FROM pgstatreplication;
看好你哦! This query gives you a quick glance at latency and wher standby is in sync.
PATONRI:负责监控 primary 状态,一旦检测到宕机,会自动提升某个 standby 为新 primary;一边更新 DNS 或 VIP。 EETCD:分布式 KV 存储,用来保存 leader 锁信息;确保集群只有唯一一个 leader。 Nginx/Haproxy:前端负载均衡层, 薅羊毛。 只向 VIP 提供服务入口,让客户端透明感知故障切换。 SCRIPT 示例:下面是一段简易 Bash 脚本, 用来手动触发 promotion: #!/bin/bash TRIGGER=/tmp/promotetomaster.trigger
if ; n
sudo touch $TRIGGER
echo "Trigger file created – standby will promote on next restart."
else
echo "Trigger already exists."
fi
运行完毕后只需重启 Postgres 即可完成提升:
6️⃣ 小结 & 心得体会 🚦🚦🚦♀️♂️♀️♂️♀️♂️ 本文约 字, 太离谱了。 如需更细致指导,可关注我的博客或直接留言交流~
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback