ARTICLE · 1301933
(文档)第142讲:数据库双机热备--KingBase应用部署


双机热备概述
双机热备(High Availability)是数据库高可用的核心形态:部署两台数据库服务器,一台对外提供读写服务(主库),另一台实时同步数据(备库)。主库故障时由备库接管业务,从而屏蔽单点故障。
一句话概括:双机热备用「数据副本」换取「可用性」——主库故障时备库顶上,应用层几乎无感知。
双机热备的四个关键指标
lRPO(恢复点目标):故障时允许丢失的数据量,同步模式下可做到零丢失
lRTO(恢复时间目标):从故障到业务恢复的时间,守护进程可在秒级完成切换
l业务无感知:应用统一连接 VIP,切换过程无需改动连接串
l数据可靠:基于 WAL 流复制,备库持续接收主库事务日志并重放
l误区一:把「有备库」等同于「高可用」——备库若不参与仲裁、VIP 不漂移,切换仍需人工介入
l误区二:只关注 RTO 不看 RPO——异步复制下 RTO 再短也可能丢数据
l误区三:两节点部署不加仲裁节点,故障时可能出现双主写入造成数据分裂
双机热备技术演进
数据库高可用没有一步到位:从「依赖存储」的共享存储双机,到「依赖备份」的人工切换,再到「依赖日志」的流复制主备,切换时间从分钟级压缩到秒级。
演进阶段 | 技术形态 | 关键特征 |
早期 | 共享存储双机 | 两台机器挂载同一存储,备机接管快,但存储本身成为新的单点 |
过渡 | 物理备份 + 人工切换 | 依赖定期全量/增量备份,切换靠人工操作,RTO 分钟级以上 |
当前 | 基于 WAL 流复制的主备 | 主备各自独立存储,实时同步日志,故障自动转移,RTO 秒级 |
进阶 | 读写分离 / 两地三中心 | 读多写少场景分流读流量,同城 + 异地多副本容灾 |
判断依据:RTO 要求分钟级以上选共享存储或人工备份;要求秒级切换且可接受独立存储成本,选流复制主备。
KingBase 双机热备整体架构
集群由主库、备库和守护进程组成:主库提供读写服务,备库通过流复制同步数据作为备份,守护进程检查各节点状态并在主库故障时完成故障转移。
WAL 流复制
主库 primary
192.168.40.112
处理全部写事务并生成 WAL 日志
备库 standby
192.168.40.113
重放 WAL 保持与主库一致
虚拟 IP VIP 192.168.40.115
始终绑定在当前主库上:切换时先从旧主卸载、再挂载到新主,应用连接 VIP 即可无感知访问
集群守护进程与仲裁节点
每个集群节点运行两个守护进程,共同保证集群在主库故障时能自动接管。
lrepmgrd:主节点只监视本地数据库;备节点同时监视本地与主库。每 2 秒(monitor_interval_secs)检查一次,失败后按 reconnect_attempts 次数重连
lkbha:守护 repmgrd 进程,并检查磁盘状态与信任网关状态;repmgrd 意外退出时由 kbha 接管 VIP 检查逻辑
l节点状态表:所有节点状态存放在 repmgr.nodes 表中,并通过流复制同步到所有备节点
仲裁节点 witness(可选):仅参与故障切换投票,不承载业务访问;两节点部署时用于避免脑裂。
数据同步原理:WAL 流复制
KingbaseES 集群主备之间的数据同步基于 WAL(预写日志)的物理流复制,传输颗粒度是日志记录的最小单位 record。
l主库侧:walwriter 进程把 WAL 日志写入磁盘,walsender 进程读取后以数据流方式发给备库
l备库侧:walreceiver 进程接收 WAL 并写入本地 WAL 段文件,startup 进程读取重放完成同步
l传输代价:只传日志增量而非整页数据,主备延迟通常在毫秒级
l复制模式:由 repmgr.conf 中的 synchronous 参数控制(async / sync / quorum / all)
同步模式取值:async / sync / quorum / all
lasync:全异步,备库不等待确认,极端情况下可能丢失少量已提交事务
lsync:同步,需至少一个备库确认后主库才返回提交结果,RPO = 0
lquorum:优选同步,集群中过半备库确认即可,读写分离集群的默认模式
lall:动态全同步,所有在线备库都确认才提交,两地三中心集群的默认模式
lcustom:自定义模式,需在 all_ip 中为每个节点分别指定同步类型
注意:当所有备库故障或主备网络中断时,同步会退化为异步;恢复连接后自动重新协商同步策略。
部署软件包与文件说明
一键式部署所需的脚本与配置都在安装目录的 ClientTools/guitools/DeployTools/zip 下,且与安装脚本、配置脚本必须位于同一台设备的同一目录。
文件 | 来源 | 作用 |
db.zip | DeployTools/zip | 数据库服务器压缩包,部署时解压到 install_dir 指定路径 |
cluster_install.sh | DeployTools/zip | 一键部署脚本,自动完成主备初始化与流复制配置 |
install.conf | DeployTools/zip | 部署配置文件,定义节点 IP、VIP、网卡、同步模式等 |
trust_cluster.sh | DeployTools/zip | 批量配置节点间 SSH 免密登录(读取 install.conf) |
securecmdd.zip | DeployTools/zip | 免密通信工具包,用于部署并启动 sys_securecmdd |
license.dat | 用户单独准备 | 正式版授权文件;多节点不可复用时需分别命名并逐一列出 |
部署文件获取与打包要求
l文件获取:安装数据库后,在安装目录的 ClientTools/guitools/DeployTools/zip 下获取
l目录约束:install.conf、cluster_install.sh、trust_cluster.sh 须在同一设备的同一目录
l属主权限:上传后的文件属主与执行权限必须能被集群部署用户读写执行
l打包替换:db.zip 可换成自行压缩的包(bin、lib、share 三目录),但解压后目录结构须与 db.zip 一致,支持 zip/tar/tar.gz
l部署路径:cluster_install 路径不能是 cluster_path 或其子目录
部署拓扑与环境规划
规划项 | 节点 A | 节点 B |
主机 IP | 192.168.40.112 | 192.168.40.113 |
网卡名 | ens192 | ens192 |
虚拟 IP(VIP) | 192.168.40.115(两节点共用) | 同上 |
数据库端口 | 54321 | 54321 |
sys_securecmdd 端口 | 8890 | 8890 |
部署用户 | kingbase | kingbase |
网络与路径约束
l防火墙:放行数据库端口 54321、sys_securecmdd 端口 8890、HA-LOG 分析端口 65432
lVIP 约束:子网掩码长度须与 net_device 的网卡掩码一致,且网卡上必须已配置 IP
l路径约束:install.conf 中所有路径参数必须是绝对路径,且 install_dir 必须是不存在的目录
ldata 目录:可自定义路径,但须是部署用户有权限读写、且上一级目录不为空的目录
lssh 端口:如使用非 22 端口,需同步修改 install.conf 与 sshd_config 并重启 sshd
步骤 1:准备客户端软件与授权文件
集群安装需先在节点上安装 KingbaseES 客户端软件,再把正式版 license 复制到部署工具目录并统一命名为 license.dat。
# 1、进入部署工具目录
cd /KingbaseES/V9/ClientTools/guitools/DeployTools/zip
# 2、复制授权文件并统一命名为 license.dat
cp /install/license_34148/license_34148_0.dat license.dat
license 授权文件配置规则
l命名规则:license_file 只写文件名,不写路径
l多节点复用:license 可复用时只写一次即可
l多节点不复用:须按 all_ip 顺序写入多个文件名,如 license_file=(license.dat-1 license.dat-2)
l未配置时:使用安装包自带的试用版 license
常见坑:license 不可复用却只写了一次,部署中途会因校验失败而无法启动数据库。
步骤 2:启用 sys_securecmdd 免密工具
sys_securecmdd 是集群跨节点通信的免密工具,用于替代 ssh 免密完成节点间的密钥协商;工具包解压后自带 systemd 服务脚本,两个节点都要执行。
l两种部署通道:其一由 sshd 服务自动分发文件并部署;其二手动分发文件,启动 sys_securecmdd 完成密钥协商
l密钥协商:在工具的初始化、启动过程中自动完成,无需手工分发密钥
l依赖关系:install.conf 的 use_scmd=1 表示集群依赖该工具
sys_securecmdd 部署命令
# 1、解压工具包并切换 root 身份
cd /KingbaseES/V9/ClientTools/guitools/DeployTools/zip
unzip securecmdd.zip
cd securecmdd
su root
# 2、初始化并启动服务(两个节点都要执行)
./sys_HAscmdd.sh init
./sys_HAscmdd.sh start
sys_securecmdd 服务管理要点
l服务管理:systemctl status / start / stop securecmdd.service
l端口:默认 8890,修改需同时改 share/sys_HAscmdd.conf 与 install.conf 的 scmd_port
l角色:use_scmd=1 表示依赖该工具(默认),置 0 则改用 sshd 服务
l密钥协商:在初始化、启动过程中自动完成,无需手工分发密钥
重要:步骤 5 执行 cluster_install.sh 前需先 systemctl stop securecmdd.service,部署期间由脚本自行管理该服务。
步骤 3:配置 install.conf
install.conf 是集群部署的唯一配置入口,位于部署工具目录。必须先完成配置,trust_cluster.sh 也要读取它。
l配置顺序:先 all_ip 与节点角色,再 virtual_ip 与 net_device,最后同步模式与恢复策略
l节点类型一致:all_ip 中所有节点的 IP 写法必须统一,不可混用 IPv4 与主机名
l首节点为主:all_ip 的第一个节点默认作为主库,部署后可用 repmgr 调整
l授权文件:license_file 只写文件名,多文件用空格分隔并按 all_ip 顺序排列
解读:all_ip 首节点为主库;trusted_servers 与 virtual_ip 指向 VIP 网关;net_device 与 net_device_ip 须一一对应。
install.conf 配置样例
all_ip=(192.168.40.112 192.168.40.113)
install_dir="/home/kingbase/cluster/install"
zip_package="/KingbaseES/V9/ClientTools/guitools/DeployTools/zip/db.zip"
license_file=(license.dat)
db_password="kingbase"
trusted_servers="192.168.40.115" # 网关
virtual_ip="192.168.40.115"
net_device=(ens192 ens192)
net_device_ip=(192.168.40.112 192.168.40.113)
use_scmd=1 # 默认值
install.conf 关键参数(一):基础部署
参数 | 必填 | 说明 |
on_bmj | 是 | 是否为专用机:1 表示专用机,0 表示通用机,默认 0 |
all_ip | 是 | 集群所有节点 IP 列表,第一个为主库;配置后不能再配两地三中心相关参数 |
witness_ip | 否 | 观察器(仲裁)节点 IP,只能配置一个,默认不部署 |
install_dir | 是 | 集群部署路径,须是不存在的目录,字符串不能以 / 结尾 |
zip_package | 是 | db.zip 压缩包的绝对路径 |
license_file | 否 | 授权文件名,多个用空格分隔;不配置则用自带试用版 |
db_user / db_password | 是/否 | 数据库初始用户(默认 system)与密码(默认 12345678ab) |
db_port | 是 | 数据库端口,默认 54321 |
通用机与专用机的差别只在脚本执行身份与文件分发方式,install.conf 的核心参数完全一致。
install.conf 关键参数(二):高可用与网络
参数 | 必填 | 说明 |
virtual_ip | 否 | 虚拟 IP,切换时随主库漂移;子网掩码须与网卡一致 |
net_device / net_device_ip | 否 | 网卡名与网卡上已配置的 IP,与 all_ip 一一对应 |
trusted_servers | 否 | 信任网关地址,即承载 VIP 的设备 |
use_scmd | 否 | 是否依赖 sys_securecmdd:1 依赖(默认),0 依赖 sshd 服务 |
synchronous | 否 | 同步模式:async / sync / quorum / all / custom;读写分离默认 quorum |
recovery | 否 | 故障恢复策略:manual / standby / automatic,默认 standby |
use_ssl | 否 | 集群间通信是否启用 SSL,默认 0(关闭) |
提示:非 22 端口的 ssh 还需同步修改 /etc/ssh/sshd_config 的 Port 项并重启 sshd 服务。
步骤 4:配置节点间 SSH 免密信任
部署脚本通过免密通道向各节点分发文件并执行命令,因此必须先打通节点之间的免密登录。
l免密范围:root ↔ root、root ↔普通用户、普通用户↔普通用户,同一主机内部同样需要
l前提条件:所有节点均须存在部署用户(默认 kingbase)与超级用户(默认 root)
l前置顺序:务必先配置好 install.conf 的 all_ip、execute_user、super_user 再执行
trust_cluster.sh 执行方式
trust_cluster.sh 会读取 install.conf,因此必须先完成配置再执行;脚本为交互式,执行过程中需输入各节点 root 密码。
# 在任意一台节点上,以 root 用户执行(脚本会读取 install.conf)
./trust_cluster.sh
# 执行过程中按提示输入各节点 root 密码
免密验证与替代部署方案
l验证方式:脚本执行完成后,逐台验证 ssh 免密是否真正生效,再进入下一步
l脚本特征:trust_cluster.sh 是交互式的,执行过程中需按提示输入各节点 root 密码
替代方案:若环境不允许 root 免密登录,可改用手动分发文件 + sys_securecmdd 密钥协商的方式部署,此时需在每个节点单独解压 db.zip 并初始化 sys_securecmdd。
l手动分发:在各节点创建 $install_dir/kingbase 目录,将 db.zip 与 license.dat 拷入并解压
l配置位置:解压后把 license.dat 拷入 $install_dir/kingbase/bin 目录
l执行身份:两种方式均须由集群部署用户执行,专用机除外
步骤 5:执行集群安装脚本
# 1、先停止 sys_securecmdd 服务(部署期间由脚本接管)
systemctl stop securecmdd.service
# 2、执行一键部署
./cluster_install.sh
。。。。。。。。。。。
受篇幅所限,如需了解更多内容,请访问官网咨询!

PostgreSQL认证中心
与工信部人才交流中心合作,推出 PostgreSQL 初/中/高级证书,证书中明确指定适用于信息技术应用创新人才岗位能力评定要求。

PostgreSQL从入门到精通,
系列课程始于23年初,
在周日19:30与大家分享PG技术,
从基础的PG介绍与安装,
到后续的调优、流复制等企业应用,
涉及90多个知识点的介绍与演示,
截至25年8月9日,
系列课程已讲100期,
欢迎继续关注PostgreSQL技术大讲堂,
如果你也有意学习PostgreSQL,
可以联系客服,领取相关资料。

喜报 | 恭喜CUUG郭同学收获人大金仓KingBase-KCM 大师认证证书















































































