VB主备搭建笔记:K8s + docker

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

一、主库配置

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

一定要做 700

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 后查看日志。
    • 确认用户名、密码一致。
  • 网络连通问题

    • 检查 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 暴露、同步用户与权限、基线备份方式、主备通道配置以及常见故障排查,便于在实际运维中快速定位和执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值