夜雨聆风学习资料网

ARTICLE · 1301933

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

(文档)第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技术大讲堂系列课程

    PostgreSQL从入门到精通,

    系列课程始于23年初,

    在周日19:30与大家分享PG技术,

    从基础的PG介绍与安装,

    到后续的调优、流复制等企业应用,

    涉及90多个知识点的介绍与演示,

    截至25年8月9日,

    系列课程已讲100期,

    欢迎继续关注PostgreSQL技术大讲堂,

    如果你也有意学习PostgreSQL,

    可以联系客服,领取相关资料。

相关阅读:

CUUG学员心得分享:从自考 OCP 到成为一名 DBA

一年半考下PGCM,我靠的是"踏实努力"

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

喜报 | 恭喜CUUG两位同学收获腾讯云 TDSQL (MySQL版) 认证证书

AI 说得有板有眼, 为什么一咨询就不一样?

双 11 特惠来袭,考证计划立即启动!

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料