目录标题
VB主备搭建笔记,分为环境概览、主库配置、备库配置、主备通道配置四大部分,便于后续查阅和运维。
环境概览
-
主库(Primary)
- 部署方式:Kubernetes + Metallb + Cilium + Patroni 管理
- 数据库镜像:
vastbase-2.2.15:v1.4.2-202503190606
- Service 暴露:ClusterIP + LoadBalancer
-
备库(Standby)
- 部署方式:Docker 容器
- 运行命令:
docker run … k8smaster.qfusion.irds/irds/vastbase-2.2.15:v1.4.2-202503190606
- 数据目录:挂载宿主机
/opt/qfusion/master/data
到容器内/pgdata
-
网络
- Kubernetes 侧使用 Metallb 分配 VIP(如
245.0.0.116 为vip所在主机的cilium_host
) - Cilium HostIP 与 VIP、各节点互通
- 主库流复制端口:
5433
(Pod 内),LoadBalancer 暴露21800
- 备库流复制端口:
5433
(容器内),宿主机映射25433
- Kubernetes 侧使用 Metallb 分配 VIP(如
一、主库配置
1. Service & LoadBalancer
# ClusterIP Service:将 Pod 5433 端口暴露给集群内
ports:
- name: stream
port: 5433
targetPort: 5433
protocol: TCP
# LoadBalancer:对外暴露端口 21800,指向上面 Service
ports:
- port: 21800 # 数据库端口 +1
targetPort: stream
protocol: TCP
2. 创建同步用户
-- 在主库执行
CREATE USER repl_user REPLICATION ENCRYPTED PASSWORD 'StrongP@ssw0rd';
3. 配置 pg_hba.conf
编辑位于 $PATRONI_POSTGRESQL_DATA_DIR/pg_hba.conf
的文件,添加:
# 允许 repl_user 从任意地址 MD5 认证
host all repl_user 0.0.0.0/0 md5
host replication repl_user 0.0.0.0/0 md5
# 或者更精准地只允许特定网段
host replication repl_user 10.10.180.0/24 md5
之后重载:
vsql -r -c "SELECT pg_reload_conf();"
vb_ctl reload -D $PATRONI_POSTGRESQL_DATA_DIR
可以不做
vb_ctl restart -D $PATRONI_POSTGRESQL_DATA_DIR
二、备库配置
1. 启动容器
mkdir -p /opt/qfusion/master/data
docker run -d \
--name vb2215 \
--restart=always \
--entrypoint=/bin/bash \
--user=vastbase \
-e PGDATA=/pgdata/ \
-p 25433:5433 \
-p 25432:5432 \
-v /opt/qfusion/master/data:/pgdata \
k8smaster.qfusion.irds/irds/vastbase-2.2.15:v1.4.2-202503190606
进入容器并赋权:
chown -R vastbase:vastbase /pgdata
chmod -R 700 /pgdata
su - vastbase
2. 获取基线数据
方式一:vb_basebackup
vb_basebackup \
-D /pgdata \
-h 10.10.180.215 \
-p 21798 \
-U repl_user \
-w \
-x \
-K
流复制会默认加+1
方式二:vb_ctl build
vb_ctl build \
-M standby \
-U repl_user \
-P 'StrongP@ssw0rd' \
-D /pgdata
FATAL: Forbid remote connection via internal maintenance tools.
3. 启动 standby 模式
修改备库配置文件 vi /pgdata/postgresql.conf
注释 include '/pgconf/postgres.base.conf'
application_name
archive_command
license_path
log_directory
replconninfo1
hba_file
ident_file
vb_ctl start -M standby
vb_ctl query -D /pgdata/
三、主备通道配置
主备之间需要互相配置连接信息,使用 replconninfo
参数。
1. 主库上配置
-- 如果通过 VIP 访问备库(VIP 在 Cilium Host 上)
ALTER SYSTEM SET replconninfo2 TO
'localhost=0.0.0.0 localport=5433 localheartbeatport=26002 localservice=26003
remotehost=245.0.0.116 remoteport=25433 remoteheartbeatport=26002 remoteservice=26003';
SELECT pg_reload_conf();
2. 备库上配置
ALTER SYSTEM SET replconninfo3 TO
'localhost=0.0.0.0 localport=5433 localheartbeatport=26002 localservice=26003
remotehost=10.10.180.215 remoteport=21800 remoteheartbeatport=26002 remoteservice=26003';
SELECT pg_reload_conf();
也可将以上参数直接写入相应的 Postgres 配置文件:
# 主库 postgresql.conf
replconninfo2 = 'localhost=0.0.0.0 localport=5433 localheartbeatport=26002 localservice=26003 remotehost=245.0.0.116 remoteport=25433 remoteheartbeatport=26002 remoteservice=26003'
# 备库 postgresql.conf
replconninfo3 = 'localhost=0.0.0.0 localport=5433 localheartbeatport=26002 localservice=26003 remotehost=10.10.180.215 remoteport=21800 remoteheartbeatport=26002 remoteservice=26003'
主库通道一定要写remotehost=245.0.0.116,否则会主库会报错 the ha connection is not in the channel list 备库报错 FATAL: Forbid remote connection with trust method!
备库去连接主库
主库里面看到的地址
四、常见故障排查
-
主库认证失败
- 检查 pg_hba.conf 条目是否已生效,
vb_ctl reload
后查看日志。 - 确认用户名、密码一致。
- 检查 pg_hba.conf 条目是否已生效,
-
网络连通问题
- 检查 Metallb VIP 与 Cilium Host 的路由和防火墙策略。
- 使用
telnet <IP> <Port>
验证端口开放。 - 使用 curl : 验证端口开放。
-
基线备份卡顿
- 查看 I/O 性能,是否磁盘或网络存在瓶颈。
- vb_basebackup 增加
-K
开关以加速。
-
主备切换
- 使用 Patroni 官方文档流程进行主备切换测试,确保自动/手动切换正常。
五、主备状态检查
主库
备库
主库
\c stream_db
create table a (a int);
insert into a(a) values (1);
备库
\c stream_db
select * from a;
以上为主备搭建的全面整理笔记,包含 Service 暴露、同步用户与权限、基线备份方式、主备通道配置以及常见故障排查,便于在实际运维中快速定位和执行。