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();"