外观
KingBaseES 集群安装
集群架构概述
KingBaseES 支持多种集群架构,主要包括:
- 主备复制集群:基于流复制技术,实现数据实时同步
- 读写分离集群:主库处理写操作,备库处理读操作,提高系统并发能力
- 分布式集群:基于分片技术,实现数据水平扩展
- 共享存储集群:使用共享存储设备,实现高可用性
本文主要介绍主备复制集群的安装配置,这是KingBaseES最常用的高可用架构。
集群安装前准备
系统要求
| 配置项 | 最低要求 | 推荐配置 |
|---|---|---|
| 操作系统 | CentOS 7.6/RedHat 7.6 或更高版本 | CentOS 8.2/RedHat 8.2 或更高版本 |
| CPU | 4核 | 8核及以上 |
| 内存 | 8GB | 16GB及以上 |
| 磁盘空间 | 100GB | 200GB及以上 |
| 网络 | 1Gbps | 10Gbps及以上 |
节点规划
典型的主备集群包含以下节点:
| 节点角色 | 数量 | 职责 |
|---|---|---|
| 主节点(Primary) | 1 | 处理所有写操作,生成WAL日志 |
| 备节点(Standby) | 1-3 | 接收WAL日志,实时回放,提供读服务 |
| 仲裁节点(Witness) | 0-1 | 用于脑裂检测,提高集群可靠性 |
网络配置
- 主机名配置:确保所有节点主机名唯一且可解析
- IP地址规划:为每个节点分配固定IP地址
- 防火墙配置:开放集群通信端口(默认54321、54322)
- 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-standby21.2 配置SSH免密登录
在主节点执行:
bash
# 生成SSH密钥对
ssh-keygen -t rsa -b 4096 -N ""
# 将公钥复制到所有备节点
ssh-copy-id kdb-standby1
ssh-copy-id kdb-standby21.3 关闭防火墙和SELINUX
在所有节点执行:
bash
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭SELINUX
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 02. 安装数据库软件
在所有节点上安装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=C4. 配置主节点
编辑主节点的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.service5. 创建复制用户
在主节点创建复制用户:
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 -P7. 配置备节点
在备节点创建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.service9. 验证集群状态
在主节点执行以下命令验证集群状态:
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提供图形化界面管理集群:
- 安装KEM软件
- 配置集群信息
- 监控集群状态
- 执行主备切换
- 管理节点扩容/缩容
2. 命令行管理
手动主备切换
- 将主节点切换为备节点:
bash
# 切换到kingbase用户
su - kingbase
# 执行切换命令
pg_ctl promote -D /data/kingbase- 将备节点提升为主节点:
bash
# 切换到kingbase用户
su - kingbase
# 执行提升命令
pg_ctl promote -D /data/kingbase集群扩容
- 按照备节点初始化步骤添加新节点
- 更新集群配置
- 验证新节点状态
集群缩容
- 停止要移除的节点
- 从集群配置中移除节点
- 清理相关资源
集群监控
1. 核心监控指标
| 指标类型 | 关键指标 | 监控方法 |
|---|---|---|
| 复制状态 | 复制延迟、WAL积压量 | pg_stat_replication视图 |
| 数据库状态 | 连接数、锁等待 | pg_stat_activity视图 |
| 资源使用 | CPU使用率、内存使用率、磁盘I/O | 系统监控工具 |
| 日志状态 | WAL生成速率、归档状态 | 日志文件分析 |
2. 监控工具
- KingBaseES Manager:图形化集群监控
- Prometheus + Grafana:开源监控解决方案
- Zabbix:企业级监控平台
集群故障处理
1. 主节点故障
处理步骤:
- 确认主节点故障
- 选择一个备节点提升为主节点
- 更新应用连接配置
- 修复原主节点
- 将原主节点重新加入集群作为备节点
2. 备节点故障
处理步骤:
- 确认备节点故障
- 修复备节点
- 重新初始化备节点
- 验证复制状态
3. 脑裂问题
预防措施:
- 配置仲裁节点
- 设置合理的网络超时参数
- 使用共享存储实现脑裂检测
处理步骤:
- 立即停止所有节点
- 确认数据一致性
- 选择最新的节点作为主节点
- 重新初始化其他节点
- 启动集群
版本差异注意事项
V8 R6 与 V8 R7 集群差异
| 特性 | V8 R6 | V8 R7 |
|---|---|---|
| 复制类型 | 仅物理复制 | 支持物理复制和逻辑复制 |
| 配置文件 | recovery.conf | kingbase.auto.conf |
| 集群管理 | 基础命令行 | 增强的KEM管理界面 |
| 自动故障切换 | 不支持 | 支持(通过KEM) |
| 读写分离 | 手动配置 | 内置支持 |
集群安装常见问题
Q1: pg_basebackup 初始化备库失败
解决方案:
- 检查主节点是否已启动
- 确认复制用户权限正确
- 验证防火墙是否开放相关端口
- 检查主节点
pg_hba.conf是否允许复制连接
Q2: 备节点无法连接到主节点
解决方案:
- 检查网络连接是否正常
- 确认复制用户密码正确
- 验证主节点
pg_hba.conf配置 - 查看主节点日志获取详细错误信息
Q3: 复制延迟持续增加
解决方案:
- 检查备节点资源使用情况
- 增加主节点
wal_keep_size参数 - 优化备节点IO性能
- 考虑使用多线程回放(如果支持)
Q4: 主备切换后应用无法连接
解决方案:
- 检查应用连接字符串是否正确
- 验证新主节点状态
- 检查防火墙配置
最佳实践
- 节点数量:建议至少配置1主2备,提高集群可靠性
- 硬件配置:主备节点硬件配置应保持一致
- 网络配置:使用专用网络进行复制通信
- 存储配置:主备节点使用相同的存储类型和配置
- 监控告警:配置完善的监控和告警机制
- 定期演练:定期进行主备切换演练,确保故障处理流程有效
- 版本升级:遵循官方升级指南,先升级备节点,再升级主节点
故障排查
集群日志位置
- 主节点日志:
/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();"