🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
专栏名称 | 专栏介绍 |
本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 | |
本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! | |
全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 | |
本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 | |
本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 | |
本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录
2. 备库 recovery.conf(PG12+改为 postgresql.auto.conf)
一、流复制认证的两种模式
1. 基于 replication
用户的密码认证
- 认证流程:
- 备库通过
pg_hba.conf
中定义的规则连接到主库的复制槽(Replication Slot) - 使用专用用户(如
repl_user
)和密码进行身份验证
- 备库通过
- 配置步骤:
- 主库创建复制用户:
CREATE ROLE repl_user WITH REPLICATION LOGIN PASSWORD 'secure_password';
- 主库配置
pg_hba.conf
:# 允许特定IP的备库通过SSL使用密码认证 hostssl replication repl_user 192.168.1.0/24 scram-sha-256
- 主库配置
postgresql.conf
:wal_level = replica max_wal_senders = 10 # 允许的最大WAL发送进程数
- 主库创建复制用户:
2. 基于客户端证书的SSL认证(更安全)
- 认证流程:
- 备库通过SSL证书验证身份(无需传输密码)
- 依赖OpenSSL生成的CA证书链
- 配置步骤:
- 生成证书(主备库均需):
# 生成CA证书 openssl req -new -x509 -days 3650 -nodes -text -out ca.crt -keyout ca.key # 生成备库证书(CN需匹配备库主机名) openssl req -new -nodes -text -out standby.csr -keyout standby.key -subj "/CN=standby1" openssl x509 -req -in standby.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out standby.crt
- 主库配置
pg_hba.conf
:hostssl replication repl_user 192.168.1.0/24 cert clientcert=verify-ca
- 备库配置
postgresql.conf
:ssl = on ssl_cert_file = '/var/lib/pgsql/15/data/standby.crt' ssl_key_file = '/var/lib/pgsql/15/data/standby.key' ssl_ca_file = '/var/lib/pgsql/15/data/ca.crt'
- 生成证书(主备库均需):
二、关键配置文件解析
1. pg_hba.conf
规则字段说明
字段 | 示例值 | 含义 |
---|---|---|
连接类型 | hostssl | 仅允许SSL加密连接 |
数据库名 | replication | 标识流复制专用通道 |
用户名 | repl_user | 复制角色用户名 |
IP地址范围 | 192.168.1.0/24 | 允许的备库IP段 |
认证方法 | scram-sha-256 | PostgreSQL推荐的密码哈希方式 |
2. 备库 recovery.conf
(PG12+改为 postgresql.auto.conf
)
primary_conninfo = 'host=primary_host port=5432 user=repl_user password=secure_password sslmode=verify-full sslrootcert=/path/to/ca.crt'
三、常见问题排查
1. 认证失败错误码
FATAL: no pg_hba.conf entry for replication connection
原因:主库pg_hba.conf
未配置replication
条目password authentication failed for user "repl_user"
原因:密码错误或用户权限不足
2. 日志检查
- 主库日志路径:
$PGDATA/log/postgresql.log
- 关键过滤命令:
grep -E 'repl_user|SSL|replication' $PGDATA/log/postgresql.log
四、安全增强建议
- IP白名单限制:在
pg_hba.conf
中严格限制备库IP地址 - 证书轮换策略:每90天更新一次客户端证书
- 防火墙规则:仅开放主库5432端口给备库
- 监控工具:使用
pg_stat_replication
视图实时监控复制状态SELECT client_addr, state, sent_lsn, write_lsn FROM pg_stat_replication;
五、版本差异注意事项
- PostgreSQL 13+:默认启用
scram-sha-256
,不再支持md5
- PostgreSQL 15+:新增
pg_identify_system
函数验证复制连接
通过以上机制,PostgreSQL 流复制可在生产环境中实现 低延迟(亚秒级) 和 企业级安全性 的平衡。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙