KingbaseES读写分离高可用集群扩容、备库重建与故障切换实战

文章目录

  • 一、安装包下载及环境部署
  • [二、KingbaseES V9R3C18 读写分离集群环境信息](#二、KingbaseES V9R3C18 读写分离集群环境信息)
    • [2.1 环境规划](#2.1 环境规划)
    • [2.2 系统环境](#2.2 系统环境)
    • [2.3 安装介质](#2.3 安装介质)
  • 三、读写分离集群扩容
    • [3.1 新节点准备](#3.1 新节点准备)
    • [3.2 新节点配置](#3.2 新节点配置)
      • [3.2.1 配置主机名](#3.2.1 配置主机名)
      • [3.2.2 配置 sysctl 参数](#3.2.2 配置 sysctl 参数)
      • [3.2.3 配置 SSH 服务参数](#3.2.3 配置 SSH 服务参数)
      • [3.2.4 生成 SSH key](#3.2.4 生成 SSH key)
      • [3.2.5 配置 known_hosts](#3.2.5 配置 known_hosts)
      • [3.2.6 配置三节点 SSH 互信](#3.2.6 配置三节点 SSH 互信)
    • [3.3 新节点扩容前准备](#3.3 新节点扩容前准备)
      • [3.3.1 检查主节点位置](#3.3.1 检查主节点位置)
      • [3.3.2 准备 node3 临时扩容目录](#3.3.2 准备 node3 临时扩容目录)
      • [3.3.3 准备扩容节点临时扩容目录](#3.3.3 准备扩容节点临时扩容目录)
      • [3.3.4 扩容前检查](#3.3.4 扩容前检查)
    • [3.4 开始扩容](#3.4 开始扩容)
  • 四、重建备库的克隆同步速率控制
    • [4.1 重建前状态确认](#4.1 重建前状态确认)
      • [4.1.1 集群查看状态](#4.1.1 集群查看状态)
      • [4.1.2 在主节点写入测试数据](#4.1.2 在主节点写入测试数据)
      • [4.1.3 配置环境变量](#4.1.3 配置环境变量)
    • [4.2 停止待重建备库](#4.2 停止待重建备库)
    • [4.3 清理旧备库环境](#4.3 清理旧备库环境)
      • [4.3.1 检查复制槽](#4.3.1 检查复制槽)
      • [4.3.2 移动旧数据目录](#4.3.2 移动旧数据目录)
    • [4.4 开始重建](#4.4 开始重建)
      • [4.4.1 执行限速 clone(32mb/s)](#4.4.1 执行限速 clone(32mb/s))
      • [4.4.2 启动备库](#4.4.2 启动备库)
    • [4.5 验证备库](#4.5 验证备库)
    • 小结
  • 五、主库故障下并行检测
    • [5.1 环境准备](#5.1 环境准备)
      • [5.1.1 确认当前集群状态](#5.1.1 确认当前集群状态)
      • [5.1.2 打开HA日志观察窗口](#5.1.2 打开HA日志观察窗口)
    • [5.2 故障模拟](#5.2 故障模拟)
    • [5.3 故障恢复](#5.3 故障恢复)
      • [5.3.1 恢复启动ha组件](#5.3.1 恢复启动ha组件)
      • [5.3.2 最终验证](#5.3.2 最终验证)
    • 小结
  • 六、选举与升主流程优化
    • [6.1 选举策略优化目标](#6.1 选举策略优化目标)
    • [6.2 检查状态](#6.2 检查状态)
    • [6.3 策略配置](#6.3 策略配置)
      • [6.3.1 在 node1 上降低候选优先级](#6.3.1 在 node1 上降低候选优先级)
      • [6.3.2 重新注册 node1 的优先级](#6.3.2 重新注册 node1 的优先级)
      • [6.3.3 在 node3 上提高候选优先级](#6.3.3 在 node3 上提高候选优先级)
      • [6.3.4 重新注册 node3 的优先级](#6.3.4 重新注册 node3 的优先级)
      • [6.3.5 在node2验证优先级是否生效](#6.3.5 在node2验证优先级是否生效)
    • [6.4 模拟故障测试](#6.4 模拟故障测试)
      • [6.4.1 在 node3 打开日志观察窗口](#6.4.1 在 node3 打开日志观察窗口)
      • [6.4.2 模拟 node2 主库故障](#6.4.2 模拟 node2 主库故障)
      • [6.4.3 观察选举与升主日志](#6.4.3 观察选举与升主日志)
      • [6.4.4 验证 node3 是否成为新主库](#6.4.4 验证 node3 是否成为新主库)
    • 小结
  • 总结

一、安装包下载及环境部署

https://www.kingbase.com.cn/download.html

下载测试安装包并且进行部署

详细部署流程见:https://blog.csdn.net/qq_46302361/article/details/162045963

二、KingbaseES V9R3C18 读写分离集群环境信息

2.1 环境规划

角色 主机名 IP 地址 网卡 说明
主库 node1 192.168.40.112 ens192 当前 primary,持有 VIP
备库 node2 192.168.40.113 ens192 standby,从 node1 流复制
VIP - 192.168.40.115/24 ens192 对外访问入口
网关/仲裁检测地址 - 192.168.40.2 ens192 trusted_servers

2.2 系统环境

项目 node1 node2
操作系统 UOS Server 20 UOS Server 20
内核版本 4.19.90-2305.1.0.0199.56.uel20.x86_64 4.19.90-2305.1.0.0199.56.uel20.x86_64
CPU AMD Ryzen 7 5825U with Radeon Graphics AMD Ryzen 7 5825U with Radeon Graphics
CPU 核数 2 2
内存 3.3Gi 3.3Gi
Swap 15Gi 15Gi
时区 Asia/Shanghai Asia/Shanghai
SELinux Disabled Disabled
firewalld inactive inactive
securecmdd active active

磁盘空间:

节点 根分区 /home 分区
node1 70G,总用 15G,可用 56G 50G,总用 1.7G,可用 49G
node2 70G,总用 14G,可用 57G 50G,总用 1.6G,可用 49G

关键系统参数:

参数
open files 65536
max user processes 65536
memlock 50000000 KB
kernel.sem 5010 64128000 50100 1280
net.ipv4.ip_local_reserved_ports 8890,54321

2.3 安装介质

文件 节点路径 大小 SHA256
KingbaseES_V009R003C018B0003_Lin64_install.iso /install/KingbaseES_V009R003C018B0003_Lin64_install.iso 1.3G e4c04cbb1c4a1277fc5e0fdecca8e3d57d6d10e2ad247fde4fac53c670f6bcd2
license.dat /install/license.dat 4.9K 3cf5a2109695e59a847f012cf11849b616b631d212c192aefb76194ab2a594fe

三、读写分离集群扩容

3.1 新节点准备

项目
主机名 node3
IP 192.168.40.114/24
网卡 ens192
网关 192.168.40.2
root 密码 kingbase.123
kingbase 用户 已存在
数据库端口 54321 未监听
securecmdd 端口 8890 未监听
firewalld inactive
SELinux Disabled

node3 当前网络:

bash 复制代码
ens192 UP 192.168.40.114/24
default via 192.168.40.2 dev ens192

3.2 新节点配置

3.2.1 配置主机名

bash 复制代码
hostnamectl set-hostname node3

配置hosts文件(node1与node2同时配置)

bash 复制代码
192.168.40.112 node1
192.168.40.113 node2
192.168.40.114 node3

关闭 firewalld

bash 复制代码
systemctl stop firewalld
systemctl disable firewalld

关闭 SELinux

bash 复制代码
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

准备扩容目录

bash 复制代码
mkdir -p /home/kingbase/cluster/install
chown -R kingbase:kingbase /home/kingbase/cluster
chmod -R 755 /home/kingbase/cluster

配置 limits 参数,写入资源限制

bash 复制代码
cat > /etc/security/limits.d/99-kingbase.conf <<'EOF'
kingbase soft nofile 65536
kingbase hard nofile 65536
kingbase soft nproc 65536
kingbase hard nproc 65536
kingbase soft core unlimited
kingbase hard core unlimited
kingbase soft memlock 50000000
kingbase hard memlock 50000000
EOF

3.2.2 配置 sysctl 参数

写入 /etc/sysctl.d/99-kingbase-ha.conf:

bash 复制代码
cat > /etc/sysctl.d/99-kingbase-ha.conf <<'EOF'
kernel.sem = 5010 64128000 50100 1280
net.ipv4.ip_local_reserved_ports = 8890,54321
EOF

同时写入 /etc/sysctl.conf,避免被原配置覆盖:

bash 复制代码
sed -i '/^kernel.sem/d' /etc/sysctl.conf
sed -i '/^net.ipv4.ip_local_reserved_ports/d' /etc/sysctl.conf

cat >> /etc/sysctl.conf <<'EOF'
kernel.sem = 5010 64128000 50100 1280
net.ipv4.ip_local_reserved_ports = 8890,54321
EOF

立即生效:

bash 复制代码
sysctl -w kernel.sem='5010 64128000 50100 1280'
sysctl -w net.ipv4.ip_local_reserved_ports='8890,54321'

3.2.3 配置 SSH 服务参数

优化 SSH 连接,关闭 DNS 反查和 GSSAPI:

bash 复制代码
sed -i 's/^#\?UseDNS.*/UseDNS no/' /etc/ssh/sshd_config
sed -i 's/^#\?GSSAPIAuthentication.*/GSSAPIAuthentication no/' /etc/ssh/sshd_config

systemctl reload sshd

3.2.4 生成 SSH key

root 用户:

bash 复制代码
mkdir -p /root/.ssh
chmod 700 /root/.ssh

ssh-keygen -q -t rsa -b 3072 -N '' -f /root/.ssh/id_rsa
chmod 600 /root/.ssh/id_rsa
chmod 644 /root/.ssh/id_rsa.pub

kingbase 用户:

bash 复制代码
su - kingbase -c "mkdir -p ~/.ssh && chmod 700 ~/.ssh"
su - kingbase -c "ssh-keygen -q -t rsa -b 3072 -N '' -f ~/.ssh/id_rsa"
chmod 600 /home/kingbase/.ssh/id_rsa
chmod 644 /home/kingbase/.ssh/id_rsa.pub
chown -R kingbase:kingbase /home/kingbase/.ssh

3.2.5 配置 known_hosts

写入三台节点的 SSH 指纹:

bash 复制代码
for u in root kingbase; do
  home=$([ "$u" = root ] && echo /root || echo /home/kingbase)

  touch "$home/.ssh/known_hosts"

  for target in 192.168.40.112 192.168.40.113 192.168.40.114 node1 node2 node3; do
    ssh-keygen -R "$target" -f "$home/.ssh/known_hosts" >/dev/null 2>&1 || true
  done

  ssh-keyscan -H 192.168.40.112 192.168.40.113 192.168.40.114 node1 node2 node3 >> "$home/.ssh/known_hosts" 2>/dev/null || true

  chown -R "$u:$u" "$home/.ssh"
  chmod 644 "$home/.ssh/known_hosts"
done

3.2.6 配置三节点 SSH 互信

将 node1、node2、node3 上 root 和 kingbase 用户的公钥统一追加到各节点:

bash 复制代码
/root/.ssh/authorized_keys
/home/kingbase/.ssh/authorized_keys

node3 上最终授权文件权限:

bash 复制代码
chmod 700 /root/.ssh /home/kingbase/.ssh
chmod 600 /root/.ssh/authorized_keys /home/kingbase/.ssh/authorized_keys
chown -R root:root /root/.ssh
chown -R kingbase:kingbase /home/kingbase/.ssh

验证 node3 到 node1:

bash 复制代码
ssh root@node1 hostname
su - kingbase -c "ssh root@node1 hostname"
su - kingbase -c "ssh kingbase@node1 hostname"

3.3 新节点扩容前准备

3.3.1 检查主节点位置

我这里主节点是node2

bash 复制代码
su - kingbase -c "/home/kingbase/cluster/install/kingbase/bin/repmgr -f /home/kingbase/cluster/install/kingbase/etc/repmgr.conf cluster show"

3.3.2 准备 node3 临时扩容目录

先在node2主节点

bash 复制代码
scp -r /home/kingbase/cluster/install/kingbase/bin \
       /home/kingbase/cluster/install/kingbase/lib \
       /home/kingbase/cluster/install/kingbase/share \
       root@192.168.40.114:/home/kingbase/kes_expand_stage/kingbase

3.3.3 准备扩容节点临时扩容目录

我的扩容节点是node3

bash 复制代码
export KB_STAGE=/home/kingbase/kes_expand_stage/kingbase
export KB_BIN=$KB_STAGE/bin
export CONF=$KB_BIN/install.conf

export PRIMARY_IP=192.168.40.113
export EXPAND_IP=192.168.40.114
export EXPAND_NODE_ID=3
export EXPAND_INSTALL_DIR=/home/kingbase/cluster/install
export MAX_RATE=64M
##重建备库clone同步速率控制(MB/s),不限制的话设为0

集群配置

bash 复制代码
awk -v primary_ip="$PRIMARY_IP" \
    -v expand_ip="$EXPAND_IP" \
    -v node_id="$EXPAND_NODE_ID" \
    -v install_dir="$EXPAND_INSTALL_DIR" \
    -v max_rate="$MAX_RATE" '
BEGIN { in_expand=0 }
{
  if ($0 == "[expand]") {
    print "[expand]"
    print "expand_type=\"0\""
    print "primary_ip=\"" primary_ip "\""
    print "expand_ip=\"" expand_ip "\""
    print "node_id=\"" node_id "\""
    print "sync_type=\"\""
    print "install_dir=\"" install_dir "\""
    print "zip_package=\"\""
    print "net_device=(ens192)"
    print "net_device_ip=(" expand_ip ")"
    print "license_file=(license.dat)"
    print "db_password=\"12345678ab\""
    print "deploy_by_sshd=\"1\""
    print "ssh_port=\"22\""
    print "scmd_port=\"8890\""
    print "max_rate=\"" max_rate "\""
    in_expand=1
    next
  }

  if (in_expand == 1 && $0 ~ /^\[/) {
    in_expand=0
    print
    next
  }

  if (in_expand == 0) {
    print
  }
}
' "$CONF" > "$CONF.tmp" && mv -f "$CONF.tmp" "$CONF"

chown kingbase:kingbase "$CONF"

sed -n '/^\[expand\]/,/^\[/p' "$CONF"

3.3.4 扩容前检查

bash 复制代码
hostname
test ! -e /home/kingbase/cluster/install/kingbase && echo "node3 正式安装目录干净"
ss -lntp | egrep '54321|8890' || echo "node3 未监听 54321 和 8890"

3.4 开始扩容

bash 复制代码
cd /tmp/kes_expand_stage/kingbase/bin
./cluster_install.sh expand | tee /tmp/kes_expand_node3_$(date +%Y%m%d%H%M%S).log

集群节点扩容完毕

四、重建备库的克隆同步速率控制

4.1 重建前状态确认

4.1.1 集群查看状态

bash 复制代码
su - kingbase -c "/home/kingbase/cluster/install/kingbase/bin/repmgr -f /home/kingbase/cluster/install/kingbase/etc/repmgr.conf cluster show"

4.1.2 在主节点写入测试数据

先在node3设置个密码变量

bash 复制代码
export KINGBASE_PASSWORD='12345678ab'

连接node2主库

bash 复制代码
/home/kingbase/cluster/install/kingbase/bin/ksql -h 192.168.40.113 -p 54321 -U system -d template1

创建测试数据

bash 复制代码
create table if not exists ha_rebuild_rate_demo(
    id int primary key,
    note text,
    created_at timestamp default now()
);

insert into ha_rebuild_rate_demo(id,note)
values (1,'before rebuild node3 with clone rate limit');

select * from ha_rebuild_rate_demo;

4.1.3 配置环境变量

设置变量:

使用32M限速重新clone

bash 复制代码
export KB_HOME=/home/kingbase/cluster/install/kingbase
export KB_BIN=$KB_HOME/bin
export REPMGR_CONF=$KB_HOME/etc/repmgr.conf
export DATA_DIR=$KB_HOME/data
export PRIMARY_IP=192.168.40.113
export CLONE_RATE=32M

4.2 停止待重建备库

停止node3本地HA和数据库

停止node3本地服务:

bash 复制代码
##停止securecmd
/home/kingbase/cluster/install/kingbase/bin/sys_HAscmdd.sh stop

su - kingbase
##停止本地HA
/home/kingbase/cluster/install/kingbase/bin/sys_monitor.sh stoplocal
##停止数据库
/home/kingbase/cluster/install/kingbase/bin/sys_ctl -D /home/kingbase/cluster/install/kingbase/data -m fast -w stop

确认54321已经停止

bash 复制代码
ss -lntp | grep 54321 || echo "node3 数据库已停止"

4.3 清理旧备库环境

4.3.1 检查复制槽

在node2上先配置一下变量

bash 复制代码
export KINGBASE_PASSWORD='12345678ab'

连接主库:

bash 复制代码
/home/kingbase/cluster/install/kingbase/bin/ksql -h 192.168.40.113 -p 54321 -U system -d template1

删除复制槽

bash 复制代码
select slot_name, active from pg_replication_slots where slot_name='repmgr_slot_3';

select pg_drop_replication_slot('repmgr_slot_3');

4.3.2 移动旧数据目录

在node3中移动旧数据目录

bash 复制代码
cd /home/kingbase/cluster/install/kingbase

mv data data.bak.rebuild.$(date +%Y%m%d%H%M%S)

ls -ld data*

4.4 开始重建

设置环境变量

bash 复制代码
export KB_HOME=/home/kingbase/cluster/install/kingbase
export KB_BIN=$KB_HOME/bin
export REPMGR_CONF=$KB_HOME/etc/repmgr.conf
export DATA_DIR=$KB_HOME/data
export PRIMARY_IP=192.168.40.113
export CLONE_RATE=32M

4.4.1 执行限速 clone(32mb/s)

bash 复制代码
$KB_BIN/repmgr -f $REPMGR_CONF -h $PRIMARY_IP -U esrep -d esrep -p 54321 --fast-checkpoint -D $DATA_DIR standby clone -r $CLONE_RATE

4.4.2 启动备库

启动node3数据库

bash 复制代码
$KB_BIN/sys_ctl -w -t 60 -D $DATA_DIR -l $KB_HOME/logfile start

重新注册 node3 备库

bash 复制代码
$KB_BIN/repmgr -f $REPMGR_CONF standby register -F --upstream-node-id=2

启动 repmgrd 守护进程

bash 复制代码
$KB_BIN/repmgrd -f $REPMGR_CONF --daemonize

启动本地 HA

bash 复制代码
$KB_BIN/sys_monitor.sh startlocal ha

查看集群状态

bash 复制代码
$KB_BIN/repmgr -f $REPMGR_CONF cluster show

4.5 验证备库

进库验证

bash 复制代码
select sys_is_in_recovery();

小结

本次重建 node3 备库时,通过 repmgr standby clone -r 32M 对 clone 同步速率进行了限制。实际执行日志中可以看到底层调用:

sys_basebackup ... -S repmgr_slot_3 -r 32M

其中 -r 32M 表示基础备份/克隆过程中最大传输速率限制为 32MB/s。重建完成后,重新启动 node3 数据库并执行 repmgr standby register -F --upstream-node-id=2 注册备库,最终 repmgr cluster show 显示 node3 恢复为 standby,跟随 node2,LSN_Lag 为 0 bytes。

五、主库故障下并行检测

5.1 环境准备

5.1.1 确认当前集群状态

bash 复制代码
su - kingbase -c "/home/kingbase/cluster/install/kingbase/bin/repmgr -f /home/kingbase/cluster/install/kingbase/etc/repmgr.conf cluster show"

5.1.2 打开HA日志观察窗口

node2 打开 HA 日志观察窗口

bash 复制代码
tail -n 0 -f $KB_HOME/log/hamgr.log $KB_HOME/log/kbha.log

node3 打开 HA 日志观察窗口

bash 复制代码
tail -n 0 -f $KB_HOME/log/hamgr.log $KB_HOME/log/kbha.log

5.2 故障模拟

node1 模拟主库故障

先停止 node1 本地 HA:

bash 复制代码
$KB_BIN/sys_monitor.sh stoplocal ha

然后停止 node1 主库数据库:

bash 复制代码
$KB_BIN/sys_ctl -D $DATA_DIR -m immediate stop

观察node2与node3的日志窗口

node2:

node3:

5.3 故障恢复

5.3.1 恢复启动ha组件

bash 复制代码
$KB_BIN/sys_monitor.sh startlocal ha

进程验证

bash 复制代码
ps -ef | egrep 'repmgrd|kbha|kingbase -D' | grep -v grep

5.3.2 最终验证

bash 复制代码
$KB_BIN/repmgr -f $REPMGR_CONF cluster show

ip addr show ens192 | grep 192.168.40.115

小结

演练前,集群状态为 node1 主库,node2、node3 为备库,并且两个备库均正常跟随 node1。随后在 node2 和 node3 分别打开 hamgr.log、kbha.log 日志窗口,用于观察主库故障后的检测过程。

在 node1 上停止本地 HA 组件并关闭数据库后,node2 和 node3 都检测到了原主库 node1 的数据库端口不可连接,日志中出现了 connection to database failed、unable to connect to node "node1" 等信息。同时,两个备库都对可信服务器 192.168.40.2 进行连通性检测,确认故障不是由自身网络异常引起的。

随后集群进入故障确认和升主流程。最终 node2 被提升为新的主库,虚拟 IP 192.168.40.115从 node1 漂移到 node2。node1 自动恢复为 node2 的备库,node3 也重新跟随 node2。

本次验证说明,在主库故障场景下,多个备库节点会并行检测主库状态,并结合可信服务器、复制状态和 HA 日志判断故障范围。确认主库不可用后,集群能够自动完成候选节点升主、VIP 漂移和其他节点重新跟随,保证读写分离集群具备较好的高可用切换能力。整个切换流程的时长大概在45秒左右

六、选举与升主流程优化

6.1 选举策略优化目标

当前 node2 是主库,本节目标是:当 node2 故障时,让 node3 优先升主,node1 作为次选候选节点。

也就是把优先级调整为:

bash 复制代码
node3 priority=200   优先升主
node1 priority=50    次选
node2 priority=100   当前主库,保持默认

6.2 检查状态

bash 复制代码
$KB_BIN/repmgr -f $REPMGR_CONF cluster show

6.3 策略配置

6.3.1 在 node1 上降低候选优先级

把 node1 的升主优先级改成 50

bash 复制代码
export KB_HOME=/home/kingbase/cluster/install/kingbase
export REPMGR_CONF=$KB_HOME/etc/repmgr.conf

if grep -q "^priority=" $REPMGR_CONF; then
  sed -i 's/^priority=.*/priority=50/' $REPMGR_CONF
else
  sed -i "/^conninfo=/a priority=50" $REPMGR_CONF
fi

chown kingbase:kingbase $REPMGR_CONF

grep -n "^priority" $REPMGR_CONF

6.3.2 重新注册 node1 的优先级

把 node1 配置文件里的新优先级同步到 repmgr 集群元数据中

bash 复制代码
$KB_BIN/repmgr -f $REPMGR_CONF standby register -F --upstream-node-id=2

6.3.3 在 node3 上提高候选优先级

把 node3 的升主优先级改成 200,这样当主库 node2 故障时,node3 会比 node1 更优先成为升主候选节点。

bash 复制代码
export KB_HOME=/home/kingbase/cluster/install/kingbase
export REPMGR_CONF=$KB_HOME/etc/repmgr.conf

if grep -q "^priority=" $REPMGR_CONF; then
  sed -i 's/^priority=.*/priority=200/' $REPMGR_CONF
else
  sed -i "/^conninfo=/a priority=200" $REPMGR_CONF
fi

chown kingbase:kingbase $REPMGR_CONF

grep -n "^priority" $REPMGR_CONF

6.3.4 重新注册 node3 的优先级

把 node3 的 priority=200 写入集群元数据

bash 复制代码
$KB_BIN/repmgr -f $REPMGR_CONF standby register -F --upstream-node-id=2

6.3.5 在node2验证优先级是否生效

bash 复制代码
$KB_BIN/repmgr -f $REPMGR_CONF cluster show

6.4 模拟故障测试

6.4.1 在 node3 打开日志观察窗口

bash 复制代码
tail -n 0 -f $KB_HOME/log/hamgr.log $KB_HOME/log/kbha.log

6.4.2 模拟 node2 主库故障

先停止 node2 本地 HA 组件:

bash 复制代码
$KB_BIN/sys_monitor.sh stoplocal ha

然后停止 node2 主库数据库:

bash 复制代码
$KB_BIN/sys_ctl -D $DATA_DIR -m immediate stop

6.4.3 观察选举与升主日志

6.4.4 验证 node3 是否成为新主库

bash 复制代码
$KB_BIN/repmgr -f $REPMGR_CONF cluster show

再确认 VIP 是否漂移到 node3:

bash 复制代码
ip addr show ens192 | grep 192.168.40.115

优化成功

小结

在优化前,node1、node2、node3 的 Priority 均为 100,多个备库在主库故障时都具备升主条件,升主结果不够直观。为了让选举结果更符合预期,本次将 node1 的优先级调整为 50,将 node3 的优先级调整为 200,使 node3 成为更优先的升主候选节点。

随后模拟当前主库 node2 故障,node1 和 node3 同时检测到 node2 的数据库连接失败,并通过可信服务器确认自身网络正常。故障确认后,集群根据调整后的优先级完成候选节点选择,最终 node3 被提升为新的主库,并成功接管虚拟 IP 192.168.40.115。

最终集群状态显示,node3 为 primary,node1 和 node2 均作为备库跟随 node3,且 LSN_Lag 为 0 bytes。这说明通过调整 priority 参数,可以影响自动故障切换时的升主候选顺序,使选举和升主流程更加可控。

总结

这次模拟了 KingbaseES 读写分离高可用集群的运维场景,完成了从集群扩容、备库重建到主库故障切换的完整实践验证。花了一周时间做测试,每天下班写一点终于肝完了~

整体来看,KingbaseES 读写分离高可用集群提供了比较完整的运维能力。从扩容到重建,从故障检测到自动切换,再到升主策略优化,都可以通过工具和参数进行管理。通过这次实践,也加深了对数据库高可用架构的理解:高可用的目标不是完全避免故障,而是在故障发生时尽快发现、准确判断、自动切换,并在切换后保持集群状态清晰可控。

相关推荐
IvorySQL1 小时前
IvorySQL HTAP 实时湖仓接入引擎
数据库·postgresql·开源·htap·ivorysql
忧郁的紫菜2 小时前
WCF+JSON+实体对象与WebService+DataSet效率大比拼
数据库·oracle·json
IvorySQL2 小时前
PostgreSQL 技术日报|2026-07-05
数据库·postgresql
考虑考虑3 小时前
nginx配置ssl
运维·后端·nginx
我会尽全力 乐观而坚强3 小时前
MySQL库与表的操作
linux·数据库·mysql
着迷不白3 小时前
Linux 磁盘管理完全指南:分区、文件系统、挂载与 LVM 实战
linux·运维·服务器
lilihuigz3 小时前
产品附加选项插件WooCommerce Product Add-Ons:9种字段类型与3种定价模式提升销售 - 易服客工作室
数据库·mysql·wordpress插件·woocommerce扩展·定制选项
山川而川-R4 小时前
LangChain
linux·运维·服务器
QH_ShareHub4 小时前
Linux 根目录结构详解
linux·运维·服务器