Skip to content

KingBaseES 集群安装

集群架构概述

KingBaseES 支持多种集群架构,主要包括:

  • 主备复制集群:基于流复制技术,实现数据实时同步
  • 读写分离集群:主库处理写操作,备库处理读操作,提高系统并发能力
  • 分布式集群:基于分片技术,实现数据水平扩展
  • 共享存储集群:使用共享存储设备,实现高可用性

本文主要介绍主备复制集群的安装配置,这是KingBaseES最常用的高可用架构。

集群安装前准备

系统要求

配置项最低要求推荐配置
操作系统CentOS 7.6/RedHat 7.6 或更高版本CentOS 8.2/RedHat 8.2 或更高版本
CPU4核8核及以上
内存8GB16GB及以上
磁盘空间100GB200GB及以上
网络1Gbps10Gbps及以上

节点规划

典型的主备集群包含以下节点:

节点角色数量职责
主节点(Primary)1处理所有写操作,生成WAL日志
备节点(Standby)1-3接收WAL日志,实时回放,提供读服务
仲裁节点(Witness)0-1用于脑裂检测,提高集群可靠性

网络配置

  1. 主机名配置:确保所有节点主机名唯一且可解析
  2. IP地址规划:为每个节点分配固定IP地址
  3. 防火墙配置:开放集群通信端口(默认54321、54322)
  4. SSH免密登录:配置主节点到所有备节点的SSH免密登录

软件依赖

  • 主备节点:KingBaseES 数据库软件
  • 管理节点:KingBaseES Manager(KEM)

集群安装步骤

1. 基础环境准备

1.1 配置主机名和IP映射

在所有节点的/etc/hosts文件中添加节点信息:

192.168.1.101 kdb-primary
192.168.1.102 kdb-standby1
192.168.1.103 kdb-standby2

1.2 配置SSH免密登录

在主节点执行:

bash
# 生成SSH密钥对
ssh-keygen -t rsa -b 4096 -N ""

# 将公钥复制到所有备节点
ssh-copy-id kdb-standby1
ssh-copy-id kdb-standby2

1.3 关闭防火墙和SELINUX

在所有节点执行:

bash
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭SELINUX
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0

2. 安装数据库软件

在所有节点上安装KingBaseES数据库软件,可参考《KingBaseES 在 Linux 上安装》文档。

3. 初始化主节点

在主节点执行初始化命令:

bash
# 创建数据目录
mkdir -p /data/kingbase
chown -R kingbase:kingbase /data/kingbase

# 切换到kingbase用户
su - kingbase

# 初始化数据库
initdb -D /data/kingbase -U system -W -E UTF8 --locale=C

4. 配置主节点

编辑主节点的kingbase.conf文件:

ini
# 启用归档
archive_mode = on
archive_command = 'cp %p /data/kingbase/archive/%f'

# 配置WAL级别
wal_level = replica

# 配置最大连接数
max_connections = 500

# 配置WAL发送进程数
max_wal_senders = 10

# 配置WAL保持时间
wal_keep_size = 1GB

# 启用流复制
hot_standby = on

创建归档目录并设置权限:

bash
mkdir -p /data/kingbase/archive
chown -R kingbase:kingbase /data/kingbase/archive

编辑pg_hba.conf文件,添加复制权限:

# 允许备节点连接进行复制
host    replication     repluser        192.168.1.0/24            md5

重启主节点:

bash
systemctl restart kingbase8d.service

5. 创建复制用户

在主节点创建复制用户:

sql
CREATE ROLE repluser WITH REPLICATION LOGIN PASSWORD 'repluser123';

6. 初始化备节点

在所有备节点执行:

bash
# 创建数据目录
mkdir -p /data/kingbase
chown -R kingbase:kingbase /data/kingbase

# 切换到kingbase用户
su - kingbase

# 使用pg_basebackup初始化备库
pg_basebackup -h kdb-primary -p 54321 -U repluser -D /data/kingbase -Fp -Xs -P

7. 配置备节点

在备节点创建recovery.conf文件(KingBaseES V8 R6)或编辑kingbase.auto.conf文件(KingBaseES V8 R7):

KingBaseES V8 R6

创建/data/kingbase/recovery.conf文件:

ini
standby_mode = 'on'
primary_conninfo = 'host=kdb-primary port=54321 user=repluser password=repluser123'
restore_command = 'cp /data/kingbase/archive/%f %p'
recovery_target_timeline = 'latest'

KingBaseES V8 R7

编辑/data/kingbase/kingbase.auto.conf文件:

ini
primary_conninfo = 'host=kdb-primary port=54321 user=repluser password=repluser123'
standby_mode = 'on'
recovery_target_timeline = 'latest'

8. 启动备节点

在所有备节点启动数据库服务:

bash
systemctl start kingbase8d.service

9. 验证集群状态

在主节点执行以下命令验证集群状态:

sql
-- 查看WAL发送进程
SELECT * FROM pg_stat_replication;

-- 查看数据库状态
SELECT pg_is_in_recovery();

在备节点执行:

sql
-- 查看是否处于恢复模式
SELECT pg_is_in_recovery();

-- 查看复制延迟
SELECT pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) AS replay_delay FROM pg_stat_replication;

集群管理

1. 使用KingBaseES Manager(KEM)管理集群

KingBaseES Manager提供图形化界面管理集群:

  1. 安装KEM软件
  2. 配置集群信息
  3. 监控集群状态
  4. 执行主备切换
  5. 管理节点扩容/缩容

2. 命令行管理

手动主备切换

  1. 将主节点切换为备节点
bash
# 切换到kingbase用户
su - kingbase

# 执行切换命令
pg_ctl promote -D /data/kingbase
  1. 将备节点提升为主节点
bash
# 切换到kingbase用户
su - kingbase

# 执行提升命令
pg_ctl promote -D /data/kingbase

集群扩容

  1. 按照备节点初始化步骤添加新节点
  2. 更新集群配置
  3. 验证新节点状态

集群缩容

  1. 停止要移除的节点
  2. 从集群配置中移除节点
  3. 清理相关资源

集群监控

1. 核心监控指标

指标类型关键指标监控方法
复制状态复制延迟、WAL积压量pg_stat_replication视图
数据库状态连接数、锁等待pg_stat_activity视图
资源使用CPU使用率、内存使用率、磁盘I/O系统监控工具
日志状态WAL生成速率、归档状态日志文件分析

2. 监控工具

  • KingBaseES Manager:图形化集群监控
  • Prometheus + Grafana:开源监控解决方案
  • Zabbix:企业级监控平台

集群故障处理

1. 主节点故障

处理步骤

  1. 确认主节点故障
  2. 选择一个备节点提升为主节点
  3. 更新应用连接配置
  4. 修复原主节点
  5. 将原主节点重新加入集群作为备节点

2. 备节点故障

处理步骤

  1. 确认备节点故障
  2. 修复备节点
  3. 重新初始化备节点
  4. 验证复制状态

3. 脑裂问题

预防措施

  1. 配置仲裁节点
  2. 设置合理的网络超时参数
  3. 使用共享存储实现脑裂检测

处理步骤

  1. 立即停止所有节点
  2. 确认数据一致性
  3. 选择最新的节点作为主节点
  4. 重新初始化其他节点
  5. 启动集群

版本差异注意事项

V8 R6 与 V8 R7 集群差异

特性V8 R6V8 R7
复制类型仅物理复制支持物理复制和逻辑复制
配置文件recovery.confkingbase.auto.conf
集群管理基础命令行增强的KEM管理界面
自动故障切换不支持支持(通过KEM)
读写分离手动配置内置支持

集群安装常见问题

Q1: pg_basebackup 初始化备库失败

解决方案

  • 检查主节点是否已启动
  • 确认复制用户权限正确
  • 验证防火墙是否开放相关端口
  • 检查主节点pg_hba.conf是否允许复制连接

Q2: 备节点无法连接到主节点

解决方案

  • 检查网络连接是否正常
  • 确认复制用户密码正确
  • 验证主节点pg_hba.conf配置
  • 查看主节点日志获取详细错误信息

Q3: 复制延迟持续增加

解决方案

  • 检查备节点资源使用情况
  • 增加主节点wal_keep_size参数
  • 优化备节点IO性能
  • 考虑使用多线程回放(如果支持)

Q4: 主备切换后应用无法连接

解决方案

  • 检查应用连接字符串是否正确
  • 验证新主节点状态
  • 检查防火墙配置

最佳实践

  1. 节点数量:建议至少配置1主2备,提高集群可靠性
  2. 硬件配置:主备节点硬件配置应保持一致
  3. 网络配置:使用专用网络进行复制通信
  4. 存储配置:主备节点使用相同的存储类型和配置
  5. 监控告警:配置完善的监控和告警机制
  6. 定期演练:定期进行主备切换演练,确保故障处理流程有效
  7. 版本升级:遵循官方升级指南,先升级备节点,再升级主节点

故障排查

集群日志位置

  • 主节点日志:/data/kingbase/kingbase.log
  • 备节点日志:/data/kingbase/kingbase.log
  • 集群管理日志:/opt/Kingbase/ES/V8/KEM/logs

常用诊断命令

bash
# 查看集群状态
ksql -h kdb-primary -p 54321 -U system -d kingbase -c "SELECT * FROM pg_stat_replication;"

# 查看备库状态
ksql -h kdb-standby1 -p 54321 -U system -d kingbase -c "SELECT pg_is_in_recovery();"

# 查看WAL生成情况
ksql -h kdb-primary -p 54321 -U system -d kingbase -c "SELECT pg_current_wal_lsn();"

# 查看WAL回放情况
ksql -h kdb-standby1 -p 54321 -U system -d kingbase -c "SELECT pg_last_wal_replay_lsn();"