金仓数据守护集群和读写分离集群使用手册.pdf
金仓数据守护集群和读写分离集群使用手册 金仓数据库管理系统 KingbaseES 文档版本:V9(V009R001C001B0024) 发布日期:2023 年 10 月 12 日 北京人大金仓信息技术股份有限公司 目 目 录 录 第 1 章 前言 1 1.1 适用读者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 相关文档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3 术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.4 手册约定 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 第 2 章 概述 4 2.1 主要特征 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2 基本概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2.1 数据库模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2.2 数据库状态 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2.3 WAL(REDO 日志) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2.4 LSN 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2.5 归档介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2.6 脑裂 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2.7 数据节点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2.8 witness 节点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2.9 命令行工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2.10 守护进程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2.11 远程通信工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 金仓数据守护集群 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3.1 主要功能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3.2 主备的同步流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 金仓读写分离集群 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.4.1 实现原理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.4.2 事务一致性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3 2.4 第 3 章 集群组件与功能介绍 3.1 12 组件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 命令行工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.1.1.1 13 3.1.1 repmgr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . I 3.1.1.2 目 录 3.1.1.1.1 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.1.1.1.2 包含的对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.1.1.1.3 repmgr 命令参考 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.1.1.1.3.1 repmgr primary register . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.1.1.1.3.2 repmgr primary unregister . . . . . . . . . . . . . . . . . . . . . . . . 14 3.1.1.1.3.3 repmgr standby clone . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.1.1.1.3.4 repmgr standby register . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.1.1.1.3.5 repmgr standby unregister . . . . . . . . . . . . . . . . . . . . . . . . 15 3.1.1.1.3.6 repmgr standby promote . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.1.1.1.3.7 repmgr standby follow . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.1.1.1.3.8 repmgr standby switchover . . . . . . . . . . . . . . . . . . . . . . . . 17 3.1.1.1.3.9 repmgr witness register . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.1.1.1.3.10 repmgr witness unregister . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.1.1.1.3.11 repmgr node status . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.1.1.1.3.12 repmgr node check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.1.1.1.3.13 repmgr node rejoin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.1.1.1.3.14 repmgr node service . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.1.1.1.3.15 repmgr cluster show . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.1.1.1.3.16 repmgr cluster matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.1.1.1.3.17 repmgr cluster crosscheck . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.1.1.1.3.18 repmgr cluster event . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.1.1.1.3.19 repmgr cluster cleanup . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.1.1.1.3.20 repmgr service status . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.1.1.1.3.21 repmgr service pause . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.1.1.1.3.22 repmgr service unpause . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.1.1.1.3.23 repmgr daemon start . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.1.1.1.3.24 repmgr daemon stop . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 kbha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.1.1.2.1 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.1.1.2.2 kbha 命令参考 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.1.1.2.2.1 3.2 kbha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.1.2 守护进程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.1.3 远程通信工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 功能介绍 3.2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 自探测、自修复的集群故障恢复技术 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.2.1.1 进程保护 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.2.1.2 故障自动转移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.2.1.3 故障自动恢复 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.2.1.4 网络断开 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.2.1.5 全局故障恢复(集群多级别自动恢复) . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.2.1.6 外部存储故障 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.2.1.7 同异步转换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 II 3.2.2 目 录 3.2.1.8 Virtual IP 的管理与支持 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.2.1.9 在线自动块修复 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.2.1.10 witness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 轻量级、易扩展、易维护的集群管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.2.2.1 一键部署集群 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.2.2.2 一键在线扩容/缩容集群节点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.2.2.3 一键启停集群 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.2.2.4 一键检查数据库状态 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 第 4 章 运行环境 43 4.1 硬件要求 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.2 系统参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 第 5 章 部署操作说明 48 5.1 图形界面部署 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.2 一键式集群部署 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 一键部署约束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.2.1.1 通用机约束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.2.1.2 专用机约束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 5.2.2 相关文件配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 5.2.3 免密工具配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.2.4 部署操作示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 通用机部署 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.2.4.1.1 操作步骤--通过 SSHD 服务自动分发文件并部署 . . . . . . . . . . . . . . . . 55 5.2.4.1.2 部署示例--通过 SSHD 服务自动分发文件并部署 . . . . . . . . . . . . . . . . 56 5.2.4.1.3 操作步骤--手动分发文件并部署 . . . . . . . . . . . . . . . . . . . . . . . . . . 58 5.2.4.1.4 部署示例--手动分发文件并部署 . . . . . . . . . . . . . . . . . . . . . . . . . . 59 专用机部署 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.2.4.2.1 操作步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.2.4.2.2 部署示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.2.1 5.2.4.1 5.2.4.2 第 6 章 配置文件说明 63 第 7 章 日常运维管理 72 7.1 集群启停 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 7.1.1 一键启停方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 7.1.2 手动启停方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 集群项检查 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 7.2.1 启动状态 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 7.2.2 集群双主 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 7.3 集群主备切换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 7.4 故障库恢复至集群 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 7.5 在线扩缩容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 7.2 III 目 录 7.5.1 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 7.5.2 集群扩缩容约束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 通用机约束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 7.5.2.1.1 免密配置约束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 7.5.2.1.2 操作系统配置约束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 7.5.2.1.3 文件及文件名约束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 7.5.2.1.4 扩缩容执行约束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 专用机约束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 7.5.2.2.1 操作系统配置约束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 7.5.2.2.2 扩缩容执行约束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 集群配置说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 扩缩容配置文件 install.conf 配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 集群扩缩容操作步骤及示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 通用机扩缩容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 7.5.4.1.1 操作步骤--通过 SSHD 服务自动分发文件并扩缩容 . . . . . . . . . . . . . . . 84 7.5.4.1.2 扩缩容示例--通过 SSHD 服务自动分发文件并扩缩容 . . . . . . . . . . . . . . 85 7.5.4.1.3 操作步骤--手动分发文件并扩缩容 . . . . . . . . . . . . . . . . . . . . . . . . 86 专用机扩缩容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 7.5.4.2.1 操作步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 7.5.4.2.2 扩缩容示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 7.5.4.2.3 补充说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 7.6 VIP 管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 7.7 主备库的数据检查 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 7.8 主备库的连接检查 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 7.9 集群同异步一致性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 7.10 一键修改密码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 7.10.1 sys_monitor.sh change_password ${superuser} ${superuser_password} ${esrep_password} . . 96 7.10.1.1 描述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 7.10.1.2 选项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 7.10.1.3 示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 7.10.1.4 注意事项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 7.11 一键修改集群参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 7.11.1 sys_monitor.sh set/set --restart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 7.11.1.1 描述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 7.11.1.2 使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 7.11.1.3 选项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 7.11.1.4 注意事项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 7.5.2.1 7.5.2.2 7.5.3 7.5.3.1 7.5.4 7.5.4.1 7.5.4.2 7.12 控制文件多路备份配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 7.12.1 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 7.12.2 配置参数说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 7.12.3 使用约束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 7.12.4 参数配置操作步骤及示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 IV 目 录 7.12.4.1 操作步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 7.12.4.1.1 单机数据库操作步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 7.12.4.1.2 集群操作步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 7.12.4.2 操作示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 7.12.4.2.1 单机数据库操作示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 7.12.4.2.2 集群操作示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 7.13 一键检查数据库状态 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 7.13.1 配置文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 7.13.2 使用及功能说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 7.13.2.1 使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 7.13.2.2 系统环境检查(-e) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 7.13.2.3 物理备份检查(-b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 7.13.2.4 配置参数检查(-c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 7.13.2.5 数据库健康检查(-d) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 7.13.2.6 文件检查(-f) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 7.13.2.7 校验和检查(-k) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 7.13.2.8 进程状态检查(-p) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 7.13.2.9 系统资源检查(-r) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 7.13.2.10 无人值守(-s) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 7.13.3 输出 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 7.14 日志收集分析工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 版权声明 123 服务周期承诺 124 V 第 1 章 前言 1 第 章 前言 本文描述了金仓数据守护集群与读写分离集群在 Linux 操作系统中的配置和使用方法。 前言部分包含以下主题: • 适用读者 • 相关文档 • 术语 • 手册约定 1.1 适用读者 本文面向所有使用 KingbaseES 的用户,主要是数据库管理员和应用程序开发人员。 1.2 相关文档 有关金仓数据守护集群与读写分离集群使用手册的关联技术的更多信息,请参阅以下资源: • 有关高可用概念,原理,架构、特性的更多信息,请参阅《高可用概述》 • 有关高可用应用实践的更多信息,请参阅《高可用最佳应用实践》 1.3 术语 1 第 1 章 前言 术语 定义 金 仓 数 据 库 管 理 系 统 (King- 人大金仓数据库管理系统,本文指代单机服务版本,下文也被称作单机版。其成 baseES) 员可能包括数据节点(data node)、备份节点(repo node)。 金仓数据守护集群软件 金仓数据守护集群软件用于构建基于流复制技术实现数据同步的主备数据库集 (Kingbase Data Watch) 群。该类集群由主库、备库和守护进程组成,其中主库提供数据库读写服务,备 库作为主库的备份,守护进程负责检查各库及环境状态并实现自动故障转移。基 于该软件,用户可构建同机房内、同城、异地的容灾及可用性方案,确保各种故 障及灾害时的用户数据及数据库服务安全与连续。 金仓数据库读写分离集群软件 金仓数据库读写分离集群软件在金仓数据守护集群软件的基础上增加了对应用透 (KingbaseRWC) 明的读写负载均衡能力。相比数据守护集群,该类集群中所有备库均可对外提供 查询能力,从而减轻了主库的读负载压力,可实现更高的事务吞吐率;该软件支 持在多个备库间进行读负载均衡。 其成员可能包括主节点(primary node)、备节点(standby node)、辅助节点 (witness node)、备份节点(repo node)。 金仓 KingbaseRAC 集群数据 金仓 KingbaseRAC 集群数据库软件用于构建采用共享存储架构的对等多写数据 库软件(KingbaseRAC) 库集群,该软件通过缓存交换技术保持各个节点的一致性。该类集群具有对应用 透明、高可用、高性能扩展、低存储成本等特点,可满足绝大多数应用场景的功 能、性能、可用性要求。 金 仓 高 可 用 软 件 (King- 以“保障企业级关键业务不间断运行”为目标,为用户提供 Linux 平台上完整的 baseHA) 数据库高可用性解决方案,减少由计算机硬件或软件出现故障所带来的损失。当 集群中的某个节点由于软件或硬件原因发生故障时,集群系统可以把 IP 地址、 业务应用等服务资源切换到其他健康的节点上,使整个系统能连续不间断地对外 提供服务,从而为企业关键业务提供持续可靠的保障,实现系统零宕机的高可用 和可靠性。 金仓集群资源管理软件 (King- 可提供集群成员管理、故障检测、处置调度等功能。可用于构建共享存储集群冷 baseES Clusterware) 备方案,在单机已经满足性能需求的情况下,低成本的增加 KingbaseES 数据库 的可用性。同时,也是金仓 KingbaseRAC 集群数据库软件所依赖的集群管理组 件。 WAL Write-Ahead Log 预写式日志,记录数据库所有数据操作的日志。 Record 特指 WAL 的一条日志记录。 REDO 重放 Record 恢复数据。 Primary 主库,数据库运行模式的一种,提供读写服务。 Standby 备库,数据库运行模式的一种,提供只读服务。 VIP Virtual IP,浮动 IP,主备集群提供的应用访问的 IP 地址。 2 第 1 章 前言 1.4 手册约定 本文档中可能出现“注意、提示、警告、另请参阅”等标志,它们所代表的含义如下: 注意: 用于突出重要/关键信息、最佳实践等。 提示: 用于突出小窍门、捷径等。 警告: 用于传递设备或环境安全警示信息,若不避免,可能会导致设备损坏、数据丢失、设备性能降低或其 它不可预知的结果。 另请参阅: 用于突出参考、参阅等。 以下程序代码书写约定适用于本文档: 符号 说明 [] 表示包含一个或多个可选项。不需要输入中括号本身。 {} 表示包含两个以上(含两个)的候选,必须在其中选取一个。不需要输入花括号本身。 | 分割中括号或者花括号中的两个或两个以上选项。不需要输入“|”本身。 ... 表示其之前的元素可以被重复。 斜体 表示占位符或者需要提供特定值的变量。 大写 表示系统提供的元素,以便与用户定义的元素相互区分。除出现在方括号中的元素外,应当按 照顺序逐字输入。当然,部分元素在系统中是大小写不敏感的,因此用户可以根据系统说明以 小写形式输入。 小写 表示由用户提供的元素。 3 第 2 章 概述 2 第 章 概述 金仓读写分离集群是基于硬件,软件系统不可靠,一定会有故障的假设设计的,是基于单台计算机无足够能力处 理大量数据设计的。 只要数据副本数量大于一,无论是硬件的升级、还是软件的迁移、单机的宕机或软件错误都无需停止对外服务, 极大的保证系统的正常运行,并且降低了系统管理员和运维人员的工作量。 本章节包含以下内容: • 主要特征 • 基本概念 • 金仓数据守护集群 • 金仓读写分离集群 2.1 主要特征 1)丰富的同步模式 KingbaseES 高可用集群可根据业务数据保护级别灵活支持多种数据复制模式。比如:实时 (sync) 模式、异步 (async) 模式、优选同步 (quorum) 模式。 2)高效切换 KingbaseES 高可用集群支持便捷高效的主备集群切换,切换过程仅需秒级完成。对计划内维护等切换需求提供 了高效灵活的实施方法。 3)全面数据保护 KingbaseES 高可用集群内的任意一个备库均为一个完整的冗余数据库,且可以同时配置多个备库,为数据安全 提供全方位的保护。 4)平衡资源负载 KingbaseES 高可用集群内的任意一个备库均可配置为读访问,支持用户访问备库,执行查询、报表统计分析、 作为 ETL 数据源进行数据抽取,减轻主库的系统负载,提升资源利用率。 4 第 2 章 概述 5)故障转移 当主库(计划外)发生故障时,KingbaseES 高可用集群支持自动切换,实现了库级和中心级的自动容灾功能。 6)强大的业务连续性保障机制 KingbaseES 高可用集群引入 VIP 设计,VIP 将始终运行于主库服务器,当主库或主库所在服务器发生故障, VIP 将自动随数据库切换而漂移(至新主库服务器)。极大地保障了业务系统的连续性。 7)多种自动恢复模式 KingbaseES 高可用集群可以配置不同的自动恢复模式来处理故障数据库,满足用户不同层次的需求,包括:关 闭自动恢复功能,自动恢复备数据库,自动恢复主数据。 2.2 基本概念 2.2.1 数据库模式 KingbaseES 只有两种数据库模式:主库 primary 或备库 standby。 主库 primary 提供正常的数据库读写服务,能正常生成 WAL 日志,如果有备库 standby 连接此数据库,还能将本地生产 WAL 日志传输给备库。 备库 standby 提供只读服务,不能生成 WAL 日志,可以连接某一个主库 primary,从主库接收 WAL 日志并重做。 可以通过 SQL 语句切换为 primary。 SELECT sys_promote(); 主库 primary 不能切换为备库。 2.2.2 数据库状态 KingbaseES 数据库有以下几种状态: DB_STARTUP 数据库刚启动时的状态,此时数据库正在重放 WAL,用户不可连接。 DB_SHUTDOWNED 主数据库正常关闭后的状态。 DB_SHUTDOWNED_IN_RECOVERY 备数据库正常关闭后的状态。 DB_SHUTDOWNING 数据库正在关闭过程中的状态。 DB_IN_CRASH_RECOVERY 主数据库崩溃(意外退出)后刚启动时的状态。 DB_IN_ARCHIVE_RECOVERY 备数据库正常运行时的状态,或者主数据库 PITR 时的状态。 5 第 2 章 概述 DB_IN_PRODUCTION 主数据库正常运行时的状态。 2.2.3 WAL(REDO 日志) REDO 日志在 KingbaseES 数据库系统中一般指 WAL(Write-Ahead Logging,预写式日志),其是保证数据完 整性的标准解决方案——任何对数据页面的修改都必须先记录 WAL 并持久化到存储上。 WAL 中按顺序记录了所有对数据页面的修改,每一条修改记录称为一条 Record。一个事务包含至少一条 SQL 语句,而一条 SQL 会记录一条或多条 record。事务提交时只需要保证将 WAL 从内存写入磁盘就可以完成,而不需 要保证所有更改的数据文件都写入磁盘。WAL 是按顺序写入文件,而数据文件的更改大部分是随机位置,所以 WAL 写入磁盘的成本更低,这种方案减少了事务提交时磁盘写入的次数,提高了事务并发性能。 当数据库系统发生崩溃后,可以读取磁盘中的 WAL 并按顺序重放日志来恢复数据文件,保证了数据的可靠性。 WAL 的文件组织形式是按 wal_segment_size 进行划分的,默认情况下 wal_segment_size 为 16MB,即 WAL 是由一系列 16MB 大小的文件组成的。每个文件称为 WAL 段文件,段文件的名称是 24 字符的十六进制字符串,分 别是 8 字符时间线、16 字符段文件号,例如:000000010000000A0000002C。 2.2.4 LSN 介绍 数据库每产生一条 Record 都会按 LSN 大小顺序追加到 WAL 文件中,插入位置就是 LSN(Log Sequence Number)。LSN 是 uint64 类型数值,随着 record 单调递增。LSN 对外的显示形式是”%08X/%08X”,范围为 0/0 到 FFFFFFFF/FFFFFFFF。 每一条 Record 都有一个 LSN 值表示其起始字节位置,Record 的结束位置就是下一个 Record 的起始位置,那么 相邻两条 Record 的 LSN 的差值就是前一条 Record 的字节长度。 2.2.5 归档介绍 WAL 段文件存储在数据目录的 sys_wal 下,开启归档功能后,每完成一个 WAL 段文件,数据库会执行 archive_command 将该文件进行归档。可以通过配置 archive_command 将 WAL 段文件拷贝到其他目录或其他设 备上。 每当一个 WAL 段文件完成后,会在 sys_wal/ archive_status 下生成一个同名的 ready 空文件,例如: 000000010000000A0000002C.ready。开启归档后,KingbaseES 数据库会有一个 archiver 进程专门负责 WAL 段文 件的归档。该进程会不断扫描 sys_wal/ archive_status 目录,寻找 ready 文件,当发现 ready 文件后,尝试执行 archive_command 归档 ready 文件对于的 WAL 段文件。 6 第 2 章 概述 archive_command 可以配置为任意命令,KingbaseES 推荐配置命令格式为:test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f。其中,%p 和%f 由归档进程 archiver 在执行归档命令前自动替换,%p 表示需要归 档的文件路径(包括文件名),%f 表示文件名称。 完成 archive_command 后,归档进程 archiver 会将 ready 文件重命名为 done 文件,表示归档完成,例如: 000000010000000A0000002C.done。当然 archive_command 也可能执行失败,表示归档失败,失败后归档进程会不 断重试,直到成功为止。 开启归档后,如果 WAL 段文件未被归档,该文件不会被 KingbaseES 回收。 2.2.6 脑裂 在主备集群或读写分离集群中,都应该有且只有一个 primary 节点,其他节点都为 standby。如果主备集群或读 写分离集群中有多个 primary 节点,此场景称为脑裂。 脑裂问题会导致数据分歧,无法保证数据一致性。 2.2.7 数据节点 数据节点指集群中有 primary 或 standby 数据库的节点,应用访问的是数据节点。 2.2.8 witness 节点 witness 节点,也称为仲裁节点、观察节点,应用不访问此节点,此节点主要作为集群故障自动切换时的仲裁。 2.2.9 命令行工具 管理、控制集群的命令行工具主要有 repmgr 和 kbha,这两个命令行工具提供了大量丰富的能力用来维护、管理 集群。 详细介绍请参考 2111repmgr 和kbha 章节。 2.2.10 守护进程 集群每个节点都存在两个守护进程。 数据库的守护进程为 repmgrd,主要负责数据库的状态检查和故障处理,包括:故障自动切换、故障自动恢复 等。而另一个守护进程 kbha 主要负责 repmgrd 进程的状态监控,以及一些环境的检查,包括:信任网关检查、存 储检测等。 7 第 2 章 概述 2.2.11 远程通信工具 集群由多个节点组成,分布在不同的服务器上。除了数据库之间利用 TCP 进行数据同步,集群的守护进程以及 一些命令行工具还需要利用远程通信工具来跨节点执行命令。 详细介绍请参考远程通信工具 章节。 2.3 金仓数据守护集群 金仓数据守护集群软件(简称:Kingbase Data Watch)是由主库、备库和守护进程组成的集群,主库提供数据库 读写服务,备库和主库通过流复制同步数据作为备份,守护进程检查各个数据库状态以及环境状态,当主库故障后可 以进行故障转移将备库提升为主库继续对外提供服务,确保主备集群持续提供服务。 2.3.1 主要功能 流复制同步数据 应用连接主库更改数据,主库生成 WAL 日志并写入磁盘,同时主库的 walsender 进程实时从存储读取 WAL 日 志并通过数据流的方式发送给备库,备库接收到 WAL 日志流后写入存储并 REDO。通过同步 WAL 日志的方式,主 备数据达到一致。 数据库状态监控 守护进程会实时监控主备集群的状态,包括主库、备库状态、流复制状态等。发生任何故障时,守护进程实施合 适的措施以保证主备集群能够持续的对外提供服务。 VIP 管理 VIP 又叫浮动 IP、虚拟 IP,集群在发生故障转移、主备切换等事件时,VIP 始终跟随主库。应用程序使用 VIP 访问数据库,可以尽量减少某些故障对应用的影响。 故障自动转移 守护进程监控到主库故障后,自动选择一个备库将其提升为主库,继续对外提供服务。 故障自动恢复 守护进程监控到备库故障后,不影响主库对外提供服务,同时尝试将备库自动恢复正常。 8 第 2 章 概述 2.3.2 主备的同步流程 流程说明 � 数据库 WalWriter 把产生的 WAL 日志写入磁盘; � WAL 日志写入磁盘后,由 walsender 进程将新增的日志读取出来并通过流的形式发送给备库; � 备库 walreceiver 进程将接收到的 WAL 日志写入本地 WAL 段文件; � 备库 startup 进程读取 WAL 日志进行重放,完成数据同步。 实时主备 实时主备是指主备数据最终一致,发生任何故障都不会丢失数据。从上图和上述流程看,要达到实时同步,需要 主库等待 WAL 日志同步到 � 或 � 的流程,主库才能继续。实时主备为了保证数据最终一致,牺牲了部分性能。 异步主备 异步主备不能保证主备数据最终一致,一旦主库发生故障,备库可能没有同步完成主库已经写入的 WAL 日志, 导致丢失部分数据。从上图和上述流程看,异步主备情况下,主库只需要 WAL 日志同步到流程 � 或 � 就可以继续。 那么异步主备比实时主库拥有更好的性能。 2.4 金仓读写分离集群 金仓数据库读写分离集群软件(简称:KingbaseRWC)在金仓数据守护集群软件的基础上增加了对应用透明的读 写负载均衡能力。相比数据守护集群,该类集群中所有备库均可对外提供查询能力,从而减轻了主库的读负载压力, 可实现更高的事务吞吐率;该软件支持在多个备库间进行读负载均衡。 9 第 2 章 概述 一般情况下,应用系统中查询等只读操作远多于写入操作,KingbaseRWC 为了保证集群在高并发、高压力下性 能不下降,需要借助读写分离将读操作分发到备库来分担业务压力,从而减轻主库压力,提升集群的整体吞吐量。 读写分离集群通过配置 JDBC 来实现。 2.4.1 实现原理 JDBC 的配置项: 表 2.4.1: JDBC 的配置项 JDBC 配置集群节点信息 节点地址 建 议 连 接 字 符 串 写 主 节 点 的 地 址, 备 节 点 地 址 通 过 SLAVE_ADD 和 SLAVE_PORT 进行配置。 节点名称 节点名称通过 nodeList 指定,节点名称可通过 repmgr 置 cluster show 查 询。 开 启 读 写 分 离 时 必 须 配 nodeList,并且节点名称顺序必须和节点地址配 置 的 顺 序 完 全 一 致。 各 节 点 名 称 间 逗 号 分 隔, 如: nodeList=node1,node2,node3。 读写分离开启和主 # 打开读写分离功能 机负载 USEDISPATCH=true # 主机负载率,备机之间轮询评分 HOSTLOADRATE=33 JDBC 的配置方式: 表 2.4.2: JDBC 的配置方式 连接串配置 连接串 + 配置文件 只用连接串开启 jdbc:kingbase8://192.168.0.100:54321/test?USE JDBC 读写分离一 PATCH=true&SLAVE_ADD=192.168.0.101,192.168.0.102 主两备 &SLAVE_PORT=54321,54321&nodeList=node1,node2,node3 连接串 + 配置文 jdbc:kingbase8://192.168.0.100:54321/test?Con 件开启 JDBC 读 urePath=jdbc.conf DIS- fig- 写分离一主两备 jdbc.conf 配置文件 USEDISPATCH=true SLAVE_ADD=192.168.0.101,192.168.0.102 SLAVE_PORT=54321,54321 nodeList=node1,node2,node3 另请参阅: 10 第 2 章 概述 其它更多参数和解释参见《KingbaseES 客户端编程接口指南-JDBC》手册中的“JDBC 连接属性”章节。 2.4.2 事务一致性 表 2.4.3: 事务一致性 事务 1 事务 2 transaction1: transaction2: update Test set C1=3 where C2=0; Rs = select C1 from Test where C2=0; commit; Fetch C1 from Rs INTO var_x; update Test set C1=3 where C2=0; insert into TX values(var_x); commit; tx1 在主库执行,tx2 的 select 会先在备库执行,insert 在主库执行,并且 insert 语句插入的值,是之前查询结果 集中获取。 在数据库异步模式下,备库事务会有一定延迟性,可能会插入一个历史值,数据库不做保证,因此不建议在异步 模式中使用一个事务内既有读又有写语句。 在同步模式(remote_apply)下: 1) tx2 执行 select 时,tx1 的 commit 还没执行;查询结果是 var_X=1; 2) tx2 执行 select 时,tx1 的 commit 已经执行完成。查询结果都是 tx1 更新表之后的值,var_x=2; 3) tx2 执行 select 时,tx1 正在执行 commit,此时 tx2 的查询结果,与两个语句在系统内部的执行顺序相关,无 论返回 1 或者 2,都符合读事务隔离级。 11 第3章 3 第 章 集群组件与功能介绍 集群组件与功能介绍 本章节包含以下内容: • 组件 • 功能介绍 3.1 组件 12 第3章 3.1.1 集群组件与功能介绍 命令行工具 3.1.1.1 repmgr 3.1.1.1.1 介绍 repmgr 用于管理 KingbaseRWC 中的故障转移,可支持一主一备或一主多备,备库支持同步和异步模式。它提 供了 repmgr 和 repmgrd 两个主要的工具。 repmgr 用于执行管理任务的命令行工具,例如: 设置备库; 将备库提升为主库; 主备切换; 显示集群状态。 repmgrd 主动监视集群各节点状态并执行某些任务的守护进程, 主要包括: 监视和记录复制性能; 通过检测主库的故障并提升最合适的备库进行故障转移。 3.1.1.1.2 包含的对象 为了有效的管理集群,repmgr 需要存储 KingbaseRWC 集群的信息,其包含以下对象: 表 repmgr.event:记录感兴趣的事件。 repmgr.nodes:集群中每个节点的连接和状态信息。 视图 repmgr.show_nodes:展示所有节点的连接和状态信息。 3.1.1.1.3 repmgr 命令参考 3.1.1.1.3.1 repmgr primary register 描述 repmgr primary register 在 KingbaseRWC 中注册主节点,会自动安装 repmgr 扩展。必须在其他任何节点之前 注册。 选项 13 第3章 --dry_run 检查先决条件,但实际并未注册数据库。 -F, --force 覆盖现有节点信息。 集群组件与功能介绍 事件通知 将生成以下事件通知: cluster_created primary_register 3.1.1.1.3.2 repmgr primary unregister 描述 repmgr primary unregister 在 KingbaseRWC 中注销主节点,通常是在主库出现故障,并且有新的备库提升为新 的主库后,将故障主库从集群中删除时执行。 选项 --dry_run 检查先决条件,但实际并未注销数据库。 --node-id 可以在任意可用的节点上执行注销操作,通过--node_id 传入需要注销的主库 ID。 -F, --force 在没有备库的情况下,可强制注销主节点。 事件通知 将生成以下事件通知: primary_unregister 3.1.1.1.3.3 repmgr standby clone 描述 从 KingbaseRWC 集群任一节点(一般是主节点)克隆一个新的备库。 选项 -d, --dbname=CONNINFO 用于连接上游节点的字符串。 --dry_run 检查先决条件,但实际并未克隆数据库。 -c, --fast-checkpoint 强制快速检查点。 --copy-external-config-file[={samepath | kbdata}] 将位于上游节点数据目录外的配置文件复制到备用节点上相同的位置。 -R, --remote-user=USERNAME SSH 或 securecmdd 远程操作时使用的系统名。 --replication-user 建立复制时的连接用户(非必须)。 --upstream-conninfo 可以连接到上游节点的连接字符串。 14 第3章 集群组件与功能介绍 --upstream-node-id 上游节点的 ID --recovery-conf-only 为以前克隆的实例创建恢复配置。 事件通知 将生成以下事件通知: standby_clone 3.1.1.1.3.4 repmgr standby register 描述 注册备节点到 KingbaseRWC 集群。 选项 -F, --force 覆盖现有节点信息。 --upstream-node-id 上游节点 ID --wait-start=VALUE 等待备库启动(超时以秒为单位,默认为 30 秒)。 --wait-sync[=VALUE] 等待节点记录同步到备库(可选超时,已秒为单位)。 事件通知 standby_register standby_register_sync(--wait-sync) 3.1.1.1.3.5 repmgr standby unregister 描述 注销备库,只从 KingbaseRWC 集群中删除此节点信息,并不会影响流复制。 选项 --node-id 需要注销的节点 ID 事件通知 standbu_unregister 3.1.1.1.3.6 repmgr standby promote 描述 如果当前主节点故障,提升一个备节点为新的主节点。 选项 15 第3章 集群组件与功能介绍 无 退出码 SUCCESS (0) 备节点成功提升为主。 ERR_DB_CONN (6) repmgr 不能连接到当前节点 KingbaseES 数据库。 ERR_PROMOTION_FAIL (8) 节点不能提升为主,可能的原因有: 集群中已经存在主节点; 节点不是一个备库; WAL 日志重放被暂停; 执行提或操作失败。 事件通知 standby_promote 3.1.1.1.3.7 repmgr standby follow 描述 跟随一个上游节点。 选项 --dry-run 检查先决条件,但实际并未跟随上游节点。 --upstream-node-id 上游节点的 ID。 -W, --wait 等待主库,repmgr 将等待多少秒(默认:60 秒)来验证此节点是否正在跟随新的 主库,此值可以通过 repmgr.conf 配置文件的 primary_follow_timeout 配置项来配 置。 退出码 SUCCESS (0) 跟随成功。 ERR_BAD_CONFIG (1) 检测到配置问题,导致命令无法执行。 ERR_NO_RESTART (4) 无法重启节点。 16 第3章 集群组件与功能介绍 ERR_DB_CONN (6) repmgr 无法和其中一个节点建立数据库连接。 ERR_FOLLOW_FAIL (23) repmgr standby follow 命令失败。 事件通知 standby_follow 3.1.1.1.3.8 repmgr standby switchover 描述 只能在备节点执行,把主节点降级为备库,把当前备节点提升为主库。 选项 --always-promote 在任何时候都将备用数据库提升为主数据库,即使它数据落后或偏离原主数据库。 原主数据库将关闭,需要手动操作才能重新加入集群。 --dry-run 检查先决条件,实际并未执行切换。 -F, --force 忽略警告并继续执行。 --force-rewind[=VALUE] 如有必要,会执行 sys_rewind 把数据同步为跟主数据库一致。 -R, --remote-user=USERNAME 远程 SSH/ securecmdd 操作的系统用户名(默认为本地当前系统用 户)。 --repmgrd-no-pause 不要在执行切换时暂停 repmgrd。 --siblings-follow 让跟随旧主节点的节点跟随新的主节点。 退出码 SUCCESS (0) 切换成功。 ERR_SWITCHOVER_FAIL (18) 切换命令执行失败。 ERR_SWITCHOVER_INCOMPLETE (22) 已执行切换,但遇到了问题。通常是以前的主数据库无法作为备数据库重新加入集群。 事件通知 standby_switchover 17 第3章 集群组件与功能介绍 3.1.1.1.3.9 repmgr witness register 描述 注册观察节点。 选项 -h/--host 主节点 IP 或主机名。 --dry-run 检查先决条件,但并未注册观察节点。 -F, --force 覆盖已存在节点的信息。 事件通知 witness_register 3.1.1.1.3.10 repmgr witness unregister 描述 注销观察节点。 选项 --dry-run 检查先决条件,但并未注销观察节点。 -F, --force 如果观察节点没有运行任然注销。 --node-id 观察节点的 ID(在其他节点上执行时需要)。 -D --data-dir 观察节点的数据目录(在其他节点上执行时需要)。 事件通知 witness_unregister 3.1.1.1.3.11 repmgr node status 描述 显示节点的基本信息和复制状态的概述,此命令必须在本地节点上运行。 选项 --csv 用 CSV 格式输出。 退出码 SUCCESS (0) 成功。 18 第3章 集群组件与功能介绍 ERR_NODE_STATUS (25) 检测到一个或多个错误。 3.1.1.1.3.12 repmgr node check 描述 从复制角度对节点进行一些运行状况检查。 选项 --csv 输出 CSV 格式(不使用于单个检查)。 --nagios 以 Nagios 格式输出(只使用与单个检查)。 检查的参数 --archive-ready 检查尚未归档的 WAL 文件数量。 --downstream 检查预期的下游节点是否都已连接。 --replication-lag 检查节点是否滞后(备节点有效)。 --role 检查节点是否有预期的角色。 --slots 检查节点是否存在非活跃的物理复制槽。 --missing-slots 检查是否缺少物理复制槽。 --data-directory-config 检查 repmgr.conf 的配置项是否与实际的数据目录匹配。 退出码 0: OK 1: WARNING 2: ERROR 3: UNKNOWN 或则 SUCCESS (0) 没检测到错误。 ERR_NODE_STATUS (25) 检查到一个或多个错误。 3.1.1.1.3.13 repmgr node rejoin 描述 把已经停止了的节点重新加入 KingbaseRWC 集群。 19 第3章 集群组件与功能介绍 选项 --dry-run 检查先决条件,但并未真正执行 rejoin。 --force-rewind[=VALUE] 在满足 sys_rewind 的情况下,执行 sys_rewind。 --config-files 执行 sys_rewind 后,需要保留的配置列表。 目前 sys_rewind 会使用源节点中的文件覆盖本地节点的配置文件,因此建议使用 此选项来确保保留他们。 --config-archive-dir 指定保存配置文件的临时目录,默认为/tmp。 -W/--no-wait 不等待节点重新加入集群; 如果设置了此项,则 repmgr 会重启节点,单不会等待它连接到主节点。 --no-check-wal 在节点重新加入集群时,不检查时间线或 LSN。 只在指定了--roce-rewind 时有效。 事件通知 node_rejoin 3.1.1.1.3.14 repmgr node service 描述 显示或执行系统服务命令以停止/启动/重新启动/重新加载节点。 选项 --dry-run 检查先决条件,但并未真正执行。 --action 要执行的操作(”start”, ”stop”, ”restart” 或”reload” 中的一种)。 --list-actions 列出每个操作将要执行的命令。 --checkpoint 在停止或重启节点前触发一个 checkpoint。 退出码 SUCCESS (0) 成功。 ERR_LOCAL_COMMAND (5) 命令执行失败。 20 第3章 集群组件与功能介绍 3.1.1.1.3.15 repmgr cluster show 描述 显示集群中所有节点的信息。 此命令会轮询没一个节点,并显示节点的角色(primary/ standby/ witness)和状态,并且可以在任何节点上执 行。 选项 --csv 用 CSV 格式输出。 --compact 禁止显示连接信息列。 退出码 SUCCESS (0) 成功。 ERR_BAD_CONFIG (1) 检索 repmgr 元数据时遇到错误。 ERR_DB_CONN (6) repmgr 不能连接到当前数据库。 ERR_NODE_STATUS (25) 在复制配置中检测到一个或多个错误。 3.1.1.1.3.16 repmgr cluster matrix 描述 显示集群矩阵,并汇总输出,矩阵中记录成功或失败。可在所有节点上执行。 选项 用 CSV 格式输出。 --csv 示例 示例 1(所有节点正常) $ repmgr cluster matrix Name | Id | 1 | 2 | 3 -------+----+----+----+---node1 | 1 | * | * | * node2 | 2 | * | * | * node3 | 3 | * | * | * 示例 2(节点 1 和 2 正常,节点 3 错误) 21 第3章 集群组件与功能介绍 $ repmgr -f /etc/repmgr.conf cluster matrix Name | Id | 1 | 2 | 3 -------+----+----+----+---node1 | 1 | * | * | x node2 | 2 | * | * | x node3 | 3 | ? | ? | ? 退出码 SUCCESS (0) 所有节点正常。 ERR_BAD_SSH (12) 一个或多个节点无法使用 SSH/securecmdd 连接。 ERR_NODE_STATUS (25) 一个或多个节点上的 KingbaseES 无法访问。 3.1.1.1.3.17 repmgr cluster crosscheck 描述 集群交叉检查,交叉检查每个节点组合之间的连接,输出类似 CLUSTER MATRIX 的检查结果。 选项 --csv 用 CSV 格式输出。 退出码 SUCCESS (0) 所有节点正常。 ERR_BAD_SSH (12) 一个或多个节点无法使用 SSH/securecmdd 访问。 ERR_NODE_STATUS (25) 一个或多个节点上的 KingbaseES 无法访问。 3.1.1.1.3.18 repmgr cluster event 描述 展示格式化后的集群事件。 选项 --limit 最大显示条目数,默认 20。 22 第3章 --all 显示所有条目。 --event 筛选特定的事件。 --node-id 将条目限定为此 ID 的节点。 --node-name 将条目限定为此名称的节点。 --compact 忽略详细信息。 集群组件与功能介绍 3.1.1.1.3.19 repmgr cluster cleanup 描述 清楚监控历史信息,防止 repmgr.monitoring_history 表过度增长。 选项 -k, --keep-history=VALUE 指定保留历史的天数。 事件通知 cluster_cleanup 3.1.1.1.3.20 repmgr service status 描述 显示所有节点上 repmgrd 服务的状态。 选项 --csv 用 CSV 格式输出。 --detail 输出详细信息。 --verbose 显示任何数据库连接错误连接的全文。 3.1.1.1.3.21 repmgr service pause 描述 暂停所有节点上 repmgrd 服务的故障转移功能。 选项 --dry-run 检查先决条件,但并未真正暂停。 退出码 SUCCESS (0) 所有节点的 repmgrd 故障转移服务已被暂停。 ERR_REPMGRD_PAUSE (26) 23 第3章 集群组件与功能介绍 一个或多个节点上的 repmgrd 故障转移服务不能被暂停。 3.1.1.1.3.22 repmgr service unpause 描述 恢复所有节点上 repmgrd 服务的故障转移功能。 选项 --dry-run 检查先决条件,但并未真正恢复。 退出码 SUCCESS (0) 所有节点的 repmgrd 故障转移服务已恢复。 ERR_REPMGRD_PAUSE (26) 一个或多个节点的 repmgrd 故障转移服务无法恢复。 3.1.1.1.3.23 repmgr daemon start 描述 在本地节点上启动 repmgrd 守护程序。 选项 --dry-run 检查先决条件,但并未真正启动。 -w/--wait 等待 repmgrd 启动(默认 15 秒)。 --no-wait 不等待 repmgrd 启动。 退出码 SUCCESS (0) 命令执行成功。 ERR_BAD_CONFIG (1) repmgr.conf 中没有配置 repmgrd_service_start_command。 ERR_DB_CONN (6) repmgr 无法连接到当前节点数据库。 ERR_REPMGRD_SERVICE (27) 命令执行失败。 24 第3章 集群组件与功能介绍 3.1.1.1.3.24 repmgr daemon stop 描述 在本地节点上停止 repmgrd 守护程序。 选项 --dry-run 检查先决条件,但并未真正停止。 -w/--wait 等待 repmgrd 停止(默认 15 秒)。 --no-wait 不等待 repmgrd 停止。 退出码 SUCCESS (0) 命令执行成功。 ERR_BAD_CONFIG (1) repmgr.conf 中没有配置 repmgrd_service_stop_command。 ERR_REPMGRD_SERVICE (27) repmgrd 不能被停止。 3.1.1.2 kbha 3.1.1.2.1 介绍 kbha 是 KingbaseRWC 集群的复制管理守护进程。 3.1.1.2.2 kbha 命令参考 3.1.1.2.2.1 kbha 描述 Kbha 启动 repmgrd,并且执行 KingbaseES 的自动恢复。 选项 -f, --config-file=PATH 指定 repmgr 配置文件的路径。 -A,--action={rejoin|daemon|loadvip|unloadvip|arping|stopdb|updateinfo|removeinfo|check_ip} 以哪种方式处理程序,默认方式为守护进程。 --dev=device name 如果参数-A 设置为 check_ip,则允许输入网络设备名称。 25 第3章 集群组件与功能介绍 --ip=ip address 如果参数-A 设置为 check_ip,则必须要检查输入的 IP(支持 IPV4 和 IPV6)。 -d, --dbname=DBNAME 指定要连接的数据库名称(默认值为 kingbase)。 -h, --host=HOSTNAME 指定要连接的数据库服务器主机名称。 -p, --port=PORT 指定要连接的数据库服务器端口(默认值为 54321)。 -U, --username=USERNAME 指定要连接的数据库用户名(默认值为 kingbase)。 -?, --help 显示帮助信息,然后退出。 -V, --version 输出版本信息,然后退出。 -v, --verbose 显示附加日志内容输出(对调试有用)。 3.1.2 守护进程 每个数据库节点有一个 repmgrd 守护进程,主节点的 repmgrd 只监视本地数据库,备节点的 repmgrd 会同时监 控本地数据库和主数据库。所有节点的状态信息存在 repmgr.nodes 表里,并通过流复制同步到所有备节点。 每个数据库节点都有一个 kbha 守护进程,其主要监控并守护 repmgrd 进程,同时对环境进行监控,包括:磁盘 状态、信任网关状态。 监控主库 主节点 repmgrd 每隔 monitor_interval_secs(默认 2s)会检查一次本地数据库是否可连接;备节点的 repmgrd 每隔 monitor_interval_secs(默认 2s)会检查本地数据库和主数据库是否可连接。 检查失败后,备库会尝试重连主库,重连尝试失败则会触发备库的切换动作。控制重连次数和重连尝试间隔 的参数为 reconnect_attempts 和 reconnect_interval,这两个参数代表着第一次检查失败后,最多执行 econnect_attempts 次的重连尝试,每两次尝试间隔 reconnect_interval 秒。 监控备库 位于备库上的 repmgrd 监控进程的监控循环,会检查本地数据库是否可连接。 主库的 repmgrd 进程检查备库状态,是通过从主库查询 sys_stat_replication 视图直接调取流复制状态来判断备 库是否正常。sys_stat_replication 视图只在主库上才有数据,视图中的每条记录对应一个主库的 walsender 进程,主 备库之间的流复制连接由主库端的 walsender 进程和备库端的 walreceiver 进程建立,因此 sys_stat_replication 视图 中的每一条记录都对应了一条主备间的流复制连接。 当 备 库 发 生 故 障, 或 主 备 间 网 络 中 断 等 情 况 导 致 流 复 制 连 接 中 断 后, 主 库 端 的 walsender 进 程 退 出, sys_stat_replication 视图记录清除,主库的 repmgrd 会据此判断备库下线,当集群中所有备库都下线时,主库 repmgrd 会执行同步转异步操作。触发同步转异步的场景主要是集群所有备库故障、集群主备间断网或其他原因导致 主备间流复制连接中断。 26 第3章 注意: 集群组件与功能介绍 对于网络中断的场景,依据 walsender 和 walreceiver 间的通信协议,网络中断时 walsender 无法收到 wal- receiver 的退出信号,walsender 会尝试重连,在达到超时时间后如果仍然没有恢复连接,walsender 才会退出,因此 这种场景下,repmgrd 判断备库下线的时间会延迟。walsender 的超时退出参数为 wal_sender_timeout,默认值 60 秒。 3.1.3 远程通信工具 sys_securecmdd 是集群中自带的工具,集群监控、管理集群时通过 sys_securecmdd 安全执行命令。其主要包含 以下文件: 表 3.1.1: 远程工具包括文件 类型 文件名 作用 服务端 sys_securecmdd 默认监听 8890 端口,接受客户端连接。 sys_secureftp 服务端调用,用于接收文件。 sys_HAscmdd.sh 脚本,管理服务端。 客户端 sys_securecmd 客户端,用于连接服务端。 密钥文件 accept_hosts 免密文件 key_file 私钥文件 securecmdd_config 服务端配置文件 securecmd_config 客户端配置文件 sys_HAscmdd.conf 脚本配置文件 securecmdd.service 服务模板文件,服务端可以使用此文件注册为 其他文件 服务。 依赖库文件 libcrypto.so.10 依赖 openssl 编译,为了不同环境能够使用, 需要带上编译使用的库文件。 其中,sys_HAscmdd.conf 是用于配置 sys_securecmdd 的文件,其中参数说明如下: 27 第3章 集群组件与功能介绍 表 3.1.2: 参数说明 参数名称 描述 取值约束 start_method 启动 sys_securecmdd 进程并保证进程高可用的方式。 crontab, systemd,通用机集群默认值,通过 service 服务启动 crontab。 systemd 默认为 sys_securecmdd;crontab, 专用机集群默认值,通过 crond 服务定时启动 sys_securecmdd。 scmd_port 进程 sys_securecmdd 的监听端口,修改后,需要使用 INT,默认 8890。 sys_HAscmdd.sh 脚本初始化。 使用方法(需要 root 权限执行): # 初始化,主要初始化 sys_securecmdd/sys_securecmd 需要的配置文件和秘钥协商。 # 将 securecmd_config/securecmdd_config 修改后拷贝到/etc/.kes 目录下。 # 将 accept_hosts/key_file 拷贝到/root/.es 和当前用户 ~/.es 目录下。 sys_HAscmdd.sh init # 启动 sys_securecmdd 进程和进程高可用能力 #start_method=systemd 将 securecmdd.service 服务文件拷贝到/ etc/ systemd/ system 目录下,并启动 sys_securecmdd 服务 #start_method=crontab 在/etc/cron.d/KINGBASECRON 中设置 sys_securecmdd 的定时任务 sys_HAscmdd.sh start # 查看 sys_securecmdd 进程状态 sys_HAscmdd.sh status # 关闭 sys_securecmdd 进程和进程高可用能力 sys_HAscmdd.sh stop # 卸载 sys_securecmdd 的配置文件和服务 sys_HAscmdd.sh uninstall 28 第3章 3.2 功能介绍 3.2.1 自探测、自修复的集群故障恢复技术 3.2.1.1 进程保护 集群组件与功能介绍 守护进程 repmgrd 主要是监控集群并保障处理集群中的故障,包括:故障转移、故障恢复、VIP 管理等。高可 用设计的前提是软件不是百分百可靠的,所以一旦 repmgrd 进程故障后,集群中数据库遇到故障便无法处理,集群 高可用能力就失效了。 为了保护守护进程 repmgrd,守护进程 kbha 通过 repmgr_pid_file 文件监控 repmgrd 进程状态,一旦发现 repmgrd 进程不存在,会尝试启动 repmgrd 进程,时间间隔为 3 秒左右。 而守护进程 kbha 则由操作系统的 crond 定时服务负责启动,定时任务会每分钟尝试启动一次 kbha 进程。 这两点分别保证了守护进程 kbha 和 repmgrd 的高可用。 3.2.1.2 故障自动转移 主库故障后,守护进程选择备库提升为主库对外提供服务,这个过程称为故障自动转移。 当备库上的守护进程 repmgrd 检查到主库异常时,会经过以下流程进行处理并最终完成故障自动切换。 尝试重连主节点 29 第3章 集群组件与功能介绍 此流程,守护进程 repmgrd 会尝试重新连接主库,防止因网络抖动或其他故障导致检查结果不正确。 这个过程,repmgr 的最大尝试次数为 reconnect_attempts,相邻两次尝试时间间隔 reconnect_interval 秒,当 reconnect_attempts * reconnect_interval 的循环结束,备库的 repmgrd 与主库连接依然没有重建,将进入准备流 程。如果在这个过程中,成功重新连接上主库,则恢复正常监控状态,集群恢复正常。 准备流程 此流程,主要是进入进行流程前的一些准备工作,保证竞选流程所有备库处于同一状态。 如果配置参数 standby_disconnect_on_failover 打开,则需要在进入竞选流程前关闭备库的 walreceiver 进程。 守护进程 repmgrd 会向数据库的 walreceiver 进程发送 SIGTERM 信号,并循环使用信号 0 测试 walreceiver 进程是 否已经退出。同时调整 wal_retrieve_retry_interval 的值防止 walreceiver 再次启动。整个关闭 walreceiver 的过程至 少需要 6 秒钟,如果 walreceiver 进程没有正常退出,则最多等待约 1 分钟。 如果有其它备库,则检查并等待其它备库关闭 walreceiver 进程,如果其它备库 walreceiver 没有关闭,将等待并 重试 30 秒。 检查确认集群是否配置了 witness 节点,是否有 witness 节点将会影响竞选流程。接下来进入竞选流程。 竞选流程 当主库故障前集群中有多于 1 个备库存活时,各个备库需要通过竞选逻辑,确认由哪一个备库作为新的主节点; 当主库故障前集群中只有 1 个备库存活,该备库通过条件判断后作为唯一备库当选。 首先,依据不同 synchronous 配置模式,检查当前同步状态是否符合切换条件,不符合条件的放弃竞选流程;符 合的继续下一步检查。 表 3.2.1: synchronous 配置模式 同步配置 切换条件 检查的意义 all 主库故障前,前备库在 sys_stat_replication 视图 保证主库故障前,该备库已经完成了 中 state=streaming, sync_stat=sync wal 日志的 catchup 过程,并且是同步 备机,避免丢数据。 quorum 主库故障前,前备库在 sys_stat_replication 视图 保证主库故障前,该备库已经完成了 中 state=streaming, sync_stat=quorum wal 日志的 catchup 过程,避免丢数 (一主多备的情况下 quorum 配置并不 能保证该备机处于同步状态)。 sync 主库故障前,前备库在 sys_stat_replication 视图 保证主库故障前,该备库已经完成了 中 state=streaming, sync_stat=sync wal 日志的 catchup 过程,并且是同步 备机,避免丢数据。 async 主库故障前获取到的主库 flush_lsn 与本库 re- 保证主库故障前,异步备机与主库的 play_lsn 的差值小于参数 lsn_lag_threshold 的值 wal 日志差距不会过大。 检查集群中是否有其它备节点,如果没有,本节点默认竞选成功,退出竞选流程; 如果有,继续下一步检查。 30 第3章 集群组件与功能介绍 将本地节点初始为 candidate_node(当前最优节点),从本地库 repmgr.nodes 表中获取所有 standby 节点并 进行遍历,遍历过程中会依次检查每一个节点并设置状态量:visible_nodes,如果节点能通过 libpq 连接成功,计数 +1;nodes_with_primary_still_visible,如果节点的 upstream_last_seen 即与主库正常连通的最近记录时间与当前 时间间隔小于 repmgrd 监控循环间隔(默认 2s) * 2,计数 +1。 对于同步模式下,节点流复制状态不是 streaming+quorum/sync 的节点过滤不可作为 candidate_node。 最后依次比较下列 4 个条件更新 candidate_node:LSN,值更大胜出;节点 catchup 状态 false 则不可作为 candidate_node;priority,值更高的胜出;node_id,值更小的胜出。 遍历完成后,当前的 candidate_node 作为备选节点,在参数 primary_visibility_consensus 设置为 true 时,还 会检查 nodes_with_primary_still_visible 的计数值,如果大于 1 代表上一个监控周期内仍有其它节点能联系到主 库,放弃升主操作,否则继续下一步检查。 半数节点存活检查,此处会区分集群是否部署了 witness 节点: 1) 没有部署 witness 的集群:如果满足公式 visible_nodes <= total_nodes/2.0 则竞选失败。即如果从本节点的 视角看,可见的备节点数不足集群总的备节点数一半,中断流程,故障自动转移失败。 2) 部署了 witness 的集群:如果满足公式 visible_nodes <=(total_nodes+1)/2.0, 不再直接放弃切换,如果同时 满足条件(存活的备节点数 +1)>= (总备节点数 +1)/2.0 时,与 witness 可见的备节点可以切换。 总结来说,没有 witness 部署的集群不支持大于半数节点失效场景下的切换;部署了 witness 节点的集群可以有 限的支持大于半数节点失效时的切换。 注意: visible_nodes 是包含本节点在内的所有从本节点视角下可见备节点数量(可见指的是 libpq 可连接),如果集 群配置了 witness 节点,witness 节点也包括在内;total_nodes 指的是当前 repmgr.nodes 表中状态为 active 且上游 节点是故障的主节点的节点数量,如果集群配置了 witness 节点,witness 节点也包括在内。 如果配置了 standby_disconnect_on_failover,将参数 wal_retrieve_retry_interval 改回默认值。 竞选成功的进入升主流程,成为新的主节点;竞选失败的节点等待新的主节点出现,并跟随新的主节点建立流复 制。 升主流程 ping trusted_servers, 获取 trusted_servers 配置的网关列表,分别 ping,只要有 1 个 ping 通即成功,如果都不 成功会尝试 reconnect_attemts 轮次。如果全部尝试失败,放弃升主; 成功则进行下一步。 如果仍能通过 ssh 连接原主库所在主机,则尝试 ssh 到主库上调用 kbha -A stopdb 保证主库停库。 如果集群配置了 vip (virtual ip),则挂载 vip,挂载成功进行下一步,挂载失败则放弃升主。 执行 promote 操作,并在完成升主后执行 checkpoint。 注意: 加载 vip 的过程需要检查配置的 vip 在网络中是否已经存在,如已经存在会尝试卸载 vip 后再次在本机挂载; 挂载动作完成后还会执行 arping 命令,只有当挂载 vip 和 arping 都执行成功,才会进行 promote 操作,否则放弃升 主。由于 vip 需要在升主动作之前执行,可能会出现在 vip 已经挂载而升主尚未完成期间,业务已经通过 vip 来到尚 31 第3章 集群组件与功能介绍 未升主的数据库节点,此时由于数据库仍处于只读状态,增删改操作会暂时无法执行,待数据库完成 promote 操作后 业务才能完全恢复。 3.2.1.3 故障自动恢复 主库所在节点的 repmgrd 进程通过流复制监控其他数据库状态,一旦发现其他数据库对应的流复制断开,则认 为该数据库异常,经过 reconnect_attempts 次检查,每次间隔 monitor_interval_secs(默认 2 秒),如果数据库的 流复制仍然断开,可以认为数据库故障。 根据自动恢复参数 recovery 配置为不同值,采取不同措施: 1) manual,手动恢复,不处理数据库故障。 2) standby,仅当故障数据库为备库时才处理,如果是故障主库,则不处理。 3) automatic,任何故障数据都处理。 当主库上的守护进程 repmgrd 认为数据库故障后,如果故障数据库(根据配置)能够处理,就会准备开始执行 故障自动恢复。开始执行故障自动恢复前,会等待 auto_recovery_delay(默认 20 秒),在此期间,也会不断检测流 复制。如果在此期间故障数据库成功和主库建立流复制,则认为该数据库重连成功,中断自动恢复流程;否则,等待 时间结束后,开始自动恢复故障备库。 故障自动恢复流程: 1) 主库的 repmgrd 进程远程到故障数据库调用 kbha -A rejoin 开始恢复。 2) 尝试连接故障数据库:连接成功则查询故障数据库状态,如果为主库则中断恢复流程,如果为备库则关闭数据 库,并进行下一步;连接失败,直接下一步。 3) 通过 pid 文件和共享内存检测数据库是否成功关闭:如果 pid 对应进程存在或共享内存正在使用,中断恢复流 程;否则,直接下一步。 4) 执行 sys_rewind 修改故障数据库文件,使得故障库数据和主库保持一致。 5) 配置流复制连接,在主库建立复制槽,然后启动故障数据库。 6) 将故障数据库注册为备库,并更新状态。 7) 恢复结束。 在恢复结束后,主库 repmgrd 进程会尝试连接完成恢复的数据库,确认其状态,有三种结果: 1) 【故障数据库恢复成功】:连接成功,结束。 2) 【故障数据库恢复失败】:连接失败,数据库未响应,如果尝试次数未达到 3 次则再次尝试,否则结束。 3) 【故 障 数 据 库 恢 复 超 时】: 连 接 失 败, 数 据 库 有 响 应 (数 据 库 可 能 正 在 redo 恢 复), 如 果 未 超 时 (in_recovery_timeout,默认为 3600 秒)则再次尝试,否则结束。 不论结果如何,到此整个流程结束,主库的 repmgrd 重新开始进行其他数据库的状态检查。 32 第3章 3.2.1.4 集群组件与功能介绍 网络断开 网络故障是最容易造成脑裂的故障,特别是主库或备库的网络断开,如果不能正确的知道是否为本节点的网络故 障,容易造成脑裂。为了能够识别网络故障,KingbaseES 引入了” 信任网关(trusted_servers)” 的概念,守护进程 kbha 通过判断和信任网关的连通性来判断本机是否出现了网络故障。 表 3.2.2: 信任网关参数 参数 取值 说明 trusted_servers IP1[,IP2,IP3] 配置为集群内部网络的网关设备的 IP 地 址,例如路由器的 IP 地址。 ping_path /bin 操作系统 ping 命令的路径 检测信任网关的方法:命令”ping -c3 -w2 ${IP}” 来不断探测信任网关(trusted_servers)的连通性,当 ping 所 有的信任网关 IP 都返回异常时,认为信任网关异常,再次尝试,最多尝试 reconnect_attempts 次,如果每次都异 常,那么就认为网络故障。 集群异常时,如果主库故障,在进行故障自动转移的升主流程中,第一步就会通过以上方法检测信任网关来判断 网络状态:如果确认网络故障,则会中断流程,故障自动转移失败;如果网络正常,那么正常升主。故障自动转移成 功后,新主库为了预防网络问题,会自动探测集群其他节点状态,尝试关闭其他主库。 集群状态正常时,守护进程 kbha 会不断通过以上方法检测信任网关。当确认网络故障后,kbha 会自动关闭守护 进程 repmgrd,kbha 会接管 repmgrd 负责的部分功能,大致功能表现如下: 表 3.2.3: kbha 接管 repmgrd 的部分功能表现 功能 网络正常(kbha 和 repmgrd) 网络故障(kbha) 故障自动转移 支持 不支持 故障自动恢复 支持 不支持 VIP 管理 支持 支持 同异步转换 支持 支持 集群多级别自动恢复 支持 支持(仅能恢复主库) 存储检测 支持 支持 3.2.1.5 全局故障恢复(集群多级别自动恢复) 当出现整个集群故障、掉电后重新上电等情况下,对整个集群的自动恢复功能 (目前只支持 1 级自动恢复)。当参 数 auto_cluster_recovery_level=1 时,此功能开启;参数 auto_cluster_recovery_level=0 时,此功能关闭。此功能 33 第3章 集群组件与功能介绍 默认开启,如果需要修改此参数,在 repmgr.conf 文件中修改此参数后,需要重启 repmgrd/kbha 守护进程生效。 自启动功能在满足以下所有条件后才会生效并恢复集群:集群全部节点均故障、节点间网络正常、集群中只有 1 个节点为主库状态。 集群故障后,守护进程 kbha 检查集群其它节点状态,当其它节点都能连通,数据库均处于停库状态且没有其它 数据库处于主库状态时,启动本地的主库。随后主库上的守护进程 repmgrd 通过故障自动恢复尝试恢复其它备库节 点。 3.2.1.6 外部存储故障 当数据库数据目录对应的外部存储故障后,数据库的数据以及 WAL 可能无法正常写入或读取,会造成不可预知 的风险。所以,集群需要能够检查存储并及时处理。 表 3.2.4: 磁盘检测相关参数 参数 取值 说明 use_check_disk on 开启存储故障后转移功能,如果发现存储存在问 题,关闭本节点数据库。 mount_point_dir_list off 关闭功能,仅做检查并打印日志。 path1[,path2] 进行存储检查的路径,默认为””,如果配置为空, 则检查 data_directory;如果配置多个路径,使 用’,’ 进行分隔。 mount_check_max_retries 0-INT 发现存储异常后,重试次数,默认为 6。如果重试 之后仍然异常,认为存储盘故障。 集群的守护进程 kbha 负责此功能: 1) 每隔 60 秒检查一次存储; 2) 在 mount_point_dir_list 配置的路径下进行检查,如果此参数等于””,则默认在 data_direcotry 路径下做检 查; 3) 检查方式:查看目录、创建临时文件、向临时文件写入 8KB 数据、从临时文件读取 8KB 数据,删除临时文件; 4) 检查中任意项失败则认为集群异常,重试 mount_check_max_retries。 每次重试间隔 10 秒 如果重试过程中,检查无问题,则重置重试次数,恢复正常检查。 如果重试完,检查仍然异常,认为磁盘故障。 认 定 磁 盘 故 障 后, 根 据 参 数 不 同 采 取 不 同 的 措 施: 如 果 重 试 完, 检 查 仍 然 异 常, 认 为 磁 盘 故 障; use_check_disk=off,仅打印报错信息。 34 第3章 3.2.1.7 集群组件与功能介绍 同异步转换 集群通过配置数据库参数 synchronous_standby_names 和 synchronous_commit 两个参数来控制数据库之间数 据同步的行为。其中 synchronous_standby_names 是同步备库的配置参数,配置此参数可以决定有哪些数据库可以 作为同步备库或异步备库;而 synchronous_commit 则是同步级别的参数,配置此参数可以控制数据同步的级别,不 同级别数据同步程度不一致。 下图清晰地展示了 synchronous_commit 五种配置的区别,简要概括: 1) off: 事务信息到了主库缓存,返回给用户。 2) local: 事务信息到了主库 WAL 文件,返回给用户。 3) remote_write: 事务信息到了备库缓存,返回给用户。 4) on: 事务信息到了备库 WAL 文件,返回给用户。 5) remote_apply: 事务信息到了备库 WAL 文件且应用到数据文件,返回给用户。 其他说明: 1) 异步的集群会有丢数风险。 2) 同步的集群 synchronous_commit < on 有丢数风险。 3) 同步的集群 synchronous_commit = on 备库有暂时查询不到的可能(但不会丢数)。 4) 同步的集群 synchronous_commit = remote_apply 主备数据强一致性。 5) 从性能维度而言,从高到低:off > local > remote_write > on > remote_apply。 35 第3章 集群组件与功能介绍 集群中默认设置 synchronous_commit=remote_apply 保证主库和同步备库强一致。那么接下来就是通过配置 synchronous_standby_names 决定集群中哪些数据库可以作为同步备库: 表 3.2.5: 同异步转换相关参数 集群同异步功 参数值 解释 repmgrd 采取操作 能 异步(async) 同步(sync) synchronous_standby_names 所有备库都为异步 如 果 参 数 不 为 空, 自 动 设 置 为 =” 空。 synchronous_standby_names 第一个连接主库的备库为同步备 通过流复制查看,有备库连接主 库 sync,其他备库为潜在同步备 库时, 且主备差异小于 LSN_LAG 库 potential(实际为异步); 当同 (默认 16M), 集群切换为同步模 步备库故障后,第一个 potential 式, 设置数据库参数为实例中的格 备库自动变为同步。potential 备 式。无备库连接主库时,集群将 库自动变为同步。 切换为异步模式,设置数据库参 =’1 (node2,node3)’ 数为空。 优 选 同 步 synchronous_standby_names 所有备库都显示为 quorum,最先 (quorum) =’ANY 同步完成的备库为同步备库; 任意 (node2,node3)’ 备库故障不影响其他备库。 全同步(all) synchronous_standby_names 所有备库都为同步备库 sync,需 =’ALL 要等待所有同步备库都完成同步 (node2,node3)’ 后主库才能提交; 任意备库故障, 同上 如果参数不为示例中的格式,自 动设置(由内核控制同异步)。 不影响其他备库。 集群同异步转换触发: 1) 由主库端的 repmgrd 进程执行,每轮(默认间隔 2 秒)检测都会根据 sys_stat_replication 视图以及集群配置 判断是否需要调整。 2) 在特殊情况下(网关故障时 repmgrd 会退出),kbha 会接管主库 repmgrd 的同异步转换工作。 3) 执行 repmgr standby promote/repmgr standby switchover/repmgr standby unregister 时会触发并尝试更新同步 配置。 同步转异步以及异步转回同步的判断逻辑: 1) 首先获取 repmgr.conf 中配置的集群默认同异步配置 synchronous。 2) 获取当前实际的同步配置 synchronous_standby_names。 3) 获取当前集群流复制状态。 4) 比较当前 synchronous_standby_names 值和流复制状态,决定是否需要转换同异步。 无流复制:如果当前已经是异步则不做操作,否则同步转异步。 36 第3章 集群组件与功能介绍 有流复制:如果当前已经是同步则不做操作,否则查看主备差异,小于预期(默认 16M)则异步转同 步。 3.2.1.8 Virtual IP 的管理与支持 VIP(Virtual Internet-Protocal,虚拟 IP)是主备集群提供的一种功能,用于应用访问集群的接口。VIP 会由主 库的守护进程 repmgrd 加载到本地设备上,当主库故障发生故障自动转移时,VIP 会自动漂移到新的主库上,应用 方法 VIP 就不受主库故障的影响。 集群中关于 VIP 相关参数: 集群加载 VIP 的命令: vip_add_cmd='ip addr add $\ *IP*\ $ dev $\ *DEV*\ $ label $\ *DEV*\ $:3' arping_cmd='arping –U $\ *IP*\ $ -w 2 –c 2 –I $\ *DEV*\ $' 集群卸载 VIP 的命令: vip_del_cmd='ip addr del $\ *IP*\ $ dev $\ *DEV*\ $' VIP 变化的触发点: 1) 主库注册:执行 primary register 操作时,在主库写入 primary 信息前加载 vip。 2) 主库注销:在删除 primary 信息后卸载 vip 操作。 3) 故障切换:在切换过程中,备库执行 promote 前,先加载 vip,如果 vip 仍然连通,需要尝试登陆到原主库卸 载 vip——此过程会不断重试,直到成功或者 vip_timeout 超时。 4) 主备切换 (switchover):需要先在原主库卸载 vip,再在备库升主前加载 vip。 5) repmgrd 监控主库进程:每隔 check_vip_interval 检查一次,如果 vip 不存在则加载。 6) repmgrd 监控备库进程:每隔 check_vip_interval 检查一次,如果 vip 存在则卸载。 7) 网关故障:repmgrd 进程会退出,其检测 vip 的逻辑由 kbha 进程代替。 3.2.1.9 在线自动块修复 集群中,主数据库访问持久化用户表数据、索引时,从磁盘读取数据块至共享缓冲区,如果检测到坏块,自动从 备节点获取坏块的副本,并修复坏块。 参数 auto_bmr.enable_auto_bmr:是否开启自动块修复功能,取值范围 0/1,默认为 1,支持 reload。 auto_bmr.auto_bmr_req_timeout:块自动修复的超时时间,取值范围 0 至 INT_MAX,默认为 60s,0 表示不限制,支持 set。 37 第3章 集群组件与功能介绍 auto_bmr.auto_bmr_sess_threshold:session 级最大块修复数量,取值范围 0 至 INT_MAX,默认为 100,0 表示不限制,支持 set。 auto_bmr.auto_bmr_sys_threshold:系统级最大块修复数量,取值范围 0 至 INT_MAX,默认为 1024,0 表示不限制,支持 reload。 约束 只支持主库自动块修复,需将 auto_bmr.enable_auto_bmr 参数设置为 1, 并且需创建 auto_bmr 扩展插 件。 如果 checksum 没有打开,只检测块的头部是否有效;checksum 打开时,同时检查块的头部和块数据是否 有效。 如果开启 zero_damaged_pages,此参数会在块修复结束后生效。 块自动修复功能当检测到坏块和坏块修复成功时,在日志中有对应的 WARNING 提示信息。检测到坏块时提示 信息如下所示: 2021-10-12 18:59:06.264 CST [9128] WARNING: page **is** invalid:base/16089/16385, blockNum: 3 修复坏块成功时提示信息如下所示: 38 第3章 集群组件与功能介绍 2021-10-12 18:59:06.292 CST [9128] WARNING: repair invalid page:base/16089/16385, blockNum: 3 successfully. 如果在日志中有类似如下提示: WARNING: Exec get buffer page failed,errMsg:ERROR: function public.get_lsn_reached_page(integer, integer, integer, integer, integer,integer) does **not** exist LINE 1: select public.get_lsn_reached_page(1663, 16832, 16881, 0, 1,... HINT: No function matches the given name **and** argument types. You might need to add explicit type casts. 需创建 auto_bmr 扩展插件: test=\ *# create extension auto_bmr;* CREATE EXTENSION 如果系统修复的块数量超过系统级最大块修复数量,可通过 select reset_auto_bmr_sys_bad_blk() 重置系统块 修复数量。 test=\ *# select reset_auto_bmr_sys_bad_blk();* reset_auto_bmr_sys_bad_blk ---------------------------(1 行记录) 如果一个 session 修复的块数量超过 session 级最大块修复数量,可通过 select reset_auto_bmr_sess_bad_blk() 重置 session 修复的块数量。 test=\ *# select reset_auto_bmr_sess_bad_blk();* reset_auto_bmr_sess_bad_blk ----------------------------(1 行记录) 3.2.1.10 witness witness 是集群中的特殊节点,其不提供数据库服务,主要是为了避免由于网络隔离导致的误切换,同时在极端 场景下辅助进行故障自动切换。 未引入 witness 的集群,为了避免由于网络隔离导致的误切换,集群不支持下述条件的故障自动切换: 存活的备节点 <= 有效备节点数/2(有效备节点的意思是在主节点发生故障前仍正常存活的备节点) 在引入 witness 后,集群支持极端场景下故障自动切换: 存活节点数量 <= 有效备节点数/2(1 主 2 备、1 主 3 备、1 主 4 备的集群支持在主备节点同时故障仅剩 1 个备节点存活时的切换) witness 部署示意图如下: 39 第3章 集群组件与功能介绍 注意: 集群中只能有一个 witness 节点,且 witness 节点应当独占一台设备,该设备应该与其他数据库节点在同一交 换机下,处于同一网段。 witness 支持的场景介绍: 1) 1 主 1 备 +witness 的集群 在本节点无法联系主节点时,会参考 witness 对主节点的可见性,决定是否升主 2) 1 主 2 备 +witness 的集群 主节点故障时,2 个备节点正常的切换不受影响; 主节点故障时,在仅存活 1 个备节点和 witness 节点时能够正常切换; 主节点故障时,若仅 witness 节点也故障,不影响 2 个备节点切换。 3) 1 主 3 备 +witness 的集群 在主节点故障后,3 个备节点存活的正常切换不受影响 在主节点故障后,仅存活 1 个或 2 个备节点和 witness 节点时正常切换; 在主节点故障后,1 个备节点和 witness 节点正常连接,其余 2 个备节点出现网络隔离时,与 witness 节点相连的备节点可以切换,隔离的 2 个备节点不会出现升主; 主节点故障时,若仅 witness 节点也故障,不影响 3 个备节点切换。 40 第3章 集群组件与功能介绍 4) 1 主 4 备 +witness 的集群 在主节点故障后,4 个备节点存活的正常切换不受影响 在主节点故障后,存活 1 个或 2 个或 3 个备节点和 witness 节点时能正常切换; 在主节点故障后,1 个备节点和 witness 节点正常连接,其余 3 个备节点出现网络隔离时,与 witness 节点相连的备节点可以切换;隔离的 3 个备节点不会出现升主; 主节点故障时,若仅 witness 节点也故障,不影响 4 个备节点切换。 5) 多于 4 个备节点 +witness 的集群 主节点故障后,满足条件就可以切换:存活且与 witness 可见节点数 +witness 节点的数量 >=(备节 点数 +witness 数)/ 2 即,在 1 主 5 备 +witness 的集群,不能支持仅剩 1 个备节点时的切换;1 主 5 备的集群如发生网络 隔离分区,出现 4 个备节点分区互相可见的情况下,这 4 个节点会自行裁决并提升出新的主节点。 3.2.2 轻量级、易扩展、易维护的集群管理 3.2.2.1 一键部署集群 主备集群或读写分离集群都是部署在多个节点(设备)的复杂系统,可以通过 GUI 图形工具一个节点一个节点 部署,直到完成预定数量节点的部署。 41 第3章 集群组件与功能介绍 同时,也提供了命令行脚本 cluster_install.sh 提供用户一键部署集群,此脚本在用户提供对应的文件并配置好环 境后,可以自动在所有节点部署数据库和对应软件并启动,完成集群的配置和启动。 具体使用方法请参考一键式集群部署 。 3.2.2.2 一键在线扩容/缩容集群节点 在集群部署完成并上线生产后,一般只会进行常规的运维操作,而不会对集群进行大幅度的调整。但在实际运维 过程中,如果因为业务扩容或变更,可能需要同步调整数据库集群,要求数据库集群扩展更多节点或缩减节点。 我们提供了在线扩容/缩容集群节点的命令行脚本,客户可以在不影响业务的情况下在线调整集群,进行对应的 扩容节点或缩容节点的操作。 具体使用方法请参考在线扩缩容 。 3.2.2.3 一键启停集群 前面章节也介绍过集群的组件,在整个集群环境中,每个节点上除了数据库服务进程外还有 kbha 和 repmgrd 两 个守护进程。在对集群进行启动、停止操作时,需要操作数据库和守护进程。 另外,主备集群和读写分离集群中数据库是有状态(primary 或 standby)的,需要按照特定顺序启动或关闭所 有节点的数据库和守护进程,防止启动或关闭过程中因为顺序错误导致集群中数据库状态出现变化。 集群中自带命令行脚本 sys_monitor.sh 来启动、关闭集群。 详细信息和使用方法请参考集群启停 和集群项检查 。 3.2.2.4 一键检查数据库状态 单机数据库或集群的运维是十分专业和复杂的,需要运维人员收集各种信息来判断单机数据库或集群的当前状 态,并排除可能影响数据库的隐患。 提供了命令行脚本进行数据库和环境的状态检查,方便运维人员快速收集信息和定位问题。 具体使用方法请参考一键检查数据库状态 。 42 第4章 运行环境 4 第 章 运行环境 本章节包含以下内容: • 硬件要求 • 系统参数 4.1 硬件要求 43 第4章 需求项 规格 cpu 主流的 32 位或 64 位 CPU 内存 1GB 以上 硬盘 1GB 以上空闲空间 4.2 运行环境 系统参数 操作系统版本 主流的 32 位或 64 位 Linux 操作系统。 操作系统时间 date -s " 时间" date 命令检查操作系统时间;如果操作系统时间不准确,则使用 date -s " 时间",命令进行修改 防火墙 如果是 centos6 及之前版本或者使用 iptables 的系统,请执行如下命令: 查看状态: service iptables status 关闭防火墙: service iptables stop 关闭防火墙开机自启动: chkconfig iptables off 如果是 centos7 或者是使用 firewalld 的系统,请执行如下命令: 查看状态: systemctl status firewalld 关闭防火墙: systemctl stop firewalld 关闭防火墙开机自启动: systemctl disable firewalld 如果是 ubuntu 或者使用 ufw 的系统,请执行以下命令: 查看状态: service ufw status 关闭防火墙: service ufw stop 44 第4章 运行环境 关闭防火墙开机自启动: systemctl disable ufw 最终保证服务器的防火墙处于关闭状态,并且非开机自启。 SELinux 安全设置 使用 vim /etc/selinux/config 修改 SELINUX=disabled,保证 SELINUX 处于禁用状态修改完需要重启操作系统 生效。 ip 命令路径 使用 which ip 命令确认 ip 命令存在且可正常使用得到 ip 命令的路径 path,使用 chmod u+s $path/ip,确保普 通用户有权限执行 注意: 只有集群中设置了 VIP 才需要设置、检查此项。 arping 命令路径 如果配置了 VIP,集群默认使用自带的 arping,无需检查。 ulimit 资源限制 vim /etc/security/limits.conf 添加以下内容: soft nofile 65536 hard nofile 65535 soft nproc 65536 hard nproc 65535 soft core unlimited hard core unlimited # 使用 unlimited ,是最大数量则表示无限制 #* 表示所有用户,这里也可只设置 root 和要安装的 kingbase 用户设置其值 #nofile 是打开文件最大数目,nproc 为进程最大数目,core 为生成内核文件大小的上限 # soft 代表一个警告值,hard 为真正的阈值,超过就会报错,可以适当继续往高调 # PAM 的调整针对单个会话生效,调整后需重新登录 root 和 kingbase,用 ulimit -n 查看生效情况 注意: 设置 nofile 的 hard limit 不能大于/proc/sys/fs/nr_open,否则注销后将无法正常登陆。 操作系统内核参数 ulimit 资源限制 45 第4章 运行环境 # 信号量 #vim /etc/sysctl.conf 添加以下内容: # 重新加载生效修改操作系统信号量 kernel.sem = 5010 641280 5010 256 # 网络传输参数 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_default = 8388608 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 8192 65536 16777216 # 网络传输队列配置 net.ipv4.tcp_wmem = 8192 87380 16777216 如果出现 ssh/sys_securecmd 心跳超时建议修改网络传输队列类型;特别是队列类型是 pfifo_fast 很有可能出现 心跳超时问题, 例如: tc qdisc replace dev 网卡名称 root fq_codel # 当前生效(重启设备会失效) echo "net.core.default_qdisc=fq_codel" >> /etc/sysctl.conf # 永久生效(需重启设备) 以上修改完成后,使用 root 用户执行 sysctl –p systemd 服务设置 vim /etc/systemd/logind.conf # 修改 IPC ,某些操作系统会默认打开,会造成程序信号丢失等问题 (只有 redhat7 及以上和一些特殊的国产 linux 的版本 需要修改,改之前可先查看此配置项中的此项是否为默认 yes) RemoveIPC=no vim /etc/systemd/system.conf # 修复服务最大进程数限制,某些操作系统会有此限制 DefaultTasksAccounting=no 或 DefaultTasksMax=65536 # 执行以下命令生效, 重启服务 systemctl daemon-reload systemctl restart systemd-logind.service sshd 参数设置 Root 下 vim /etc/ssh/sshd_config 允许 root 登录:修改 PermitRootLogin 的参数为 yes。 Root 下执行 service sshd restart。测试 root ssh 自己 ip 和其他设备 ip 的耗时,若超过 5s 以上均为异常,需解 决,否则会影响部署及 HA 的流程。 建议的参数调整:GSSAPIAuthentication 改为 no UseDNS 改为 no(谨慎) 46 第4章 运行环境 IO 调度策略 查看当前 I/O 调度策略 cat /sys/block/{DEVICE-NAME}/queue/scheduler 临时修改:echo deadline > /sys/block/{DEVICE-NAME}/queue/scheduler 永久修改:vim /etc /rc.d/rc.localecho deadline >/sys/block/{DEVICE-NAME}/queue/scheduler 修改 I/O 调 度策略为 deadline(最后期限算法,根据算法保证请求不饿死){DEVICE-NAME} = 硬盘名称 # 机械硬盘,推荐 deadline 调度算法,较为适合业务单一并且 IO 比较重的业务,比如数据库。 # 固态硬盘,推荐 noop 调度算法。# 查看系统支持 IO 调度算法: -bash-4.2# dmesg\| grep -i scheduler [ 1.203287] io scheduler noop registered [1.203289] io scheduler deadline registered (default) [ 1.203311] io scheduler cfq registered [ 1.203314] io scheduler mq-deadline registered [ 1.203316] io scheduler kyber registered # 查看某块盘的 IO 调度算法: -bash-4.2# cat /sys/block/sda/queue/scheduler cfq 47 第5章 5 第 章 部署操作说明 部署操作说明 本章节包含以下内容: • 图形界面部署 • 一键式集群部署 5.1 图形界面部署 请参考《KingbaseES 数据库部署工具使用指南》中的 通用机集群图形化界面安装或者 专用机集群图形化界面安 装章节。 5.2 一键式集群部署 KingbaseES 提供数据库部署工具进行数据库集群的部署。对于不支持 GUI 的服务器,KingbaseES 提供基于命 令行操作的集群部署方式,本文档主要用于指导不支持 GUI 的服务器上的 KingbaseES 集群部署工作。 5.2.1 一键部署约束 5.2.1.1 通用机约束 免密配置约束 目前在通用机上支持两种部署方式: � 通过 sshd 服务自动分发文件并部署; � 手动分发文件,启动 sys_securecmdd 工具并进行部署。 第 � 种部署方式,需要配置节点间 ssh 免密,第 � 种部署方式需要节点间 sys_securecmdd 工具秘钥协商。 48 第5章 部署操作说明 两种方式都有如下免密登陆要求:所有即将部署集群的设备之间,root 用户和 root 用户、root 用户和普通用 户、普通用户和普通用户免密登陆,同一主机的 root 用户免密登陆、root 用户和普通用户免密登陆、普通用户免密 登陆。 sys_securecmdd 工具秘钥协商在初始化、启动过程中自动完成;配置 ssh 免密请用 root 用户执行脚本 trust_cluster.sh,脚本会读取 install.conf 配置文件,所以请先按要求配置 install.conf 文件。 注意: 在使用脚本配置 ssh 免密时,由于脚本是交互式的,在执行过程中需要用户输入必要信息。 操作系统配置约束 建议关闭防火墙,如果用户确认无法关闭防火墙,那么在防火墙添加数据库白名单,不同系统命令不同,数据库 端口默认 54321,HA-LOG 分析工具默认端口 65432,sys_securecmdd 工具默认端口 8890,请根据实际配置调整。 其他操作系统配置约束请参照产品文档《高可用最佳部署实践》-【读写分离集群部署手册】章节进行配置。 文件及文件名约束 集群部署所需要的所有文件需要已存在设备上,且 install.conf 文件、cluster_install.sh、trust_cluster.sh 都需要 在同一设备的同一目录下,需安装数据库后获取对应文件,以下是集群部署所需要的所有文件: # 用户单独准备: license.dat # 授权文件 # 从 ${install_dir}/ClientTools/guitools/DeployTools/zip/目录下获取: db.zip # 数据库压缩包 cluster_install.sh # 部署脚本 install.conf # 部署配置文件 trust_cluster.sh # 配置 SSH 免密脚本 注意: 这里的 db.zip 也可以换成用户自行压缩的其他形式的压缩包,在 ${install_dir}/Server/ 下将 bin、lib、share 三个目录做成压缩包,支持 zip、tar、tar.gz 三种格式的压缩包;压缩包解压后的目录应该和 db.zip 保持一致。 支持配置多个 license,若集群设备上的 license 不能复用于多个设备,则请在 license_file 参数中按照 all_ip 的 写入顺序写入 license 文件名,如果 license 文件可以复用,则可以只写一次。需要注意的是,如果集群 license 不可 复用,而参数里又只写了一次,那么可能在部署中途因为 license 文件导致无法启动数据库而失败,同理,net_device 的配置也是如此。 集群设置 virtual_ip 时,必须保证其子网掩码长度与网卡 net_device 的子网掩码长度一致;网卡 net_device 上 必须已有 IP,此 IP 需要配置在 net_device_ip 中。 支持用户配置数据库 data 目录的路径,配置路径时需注意所配置路径不能是当前部署集群用户无权限访问及读 写的目录,且所配置的 data 目录的上一级目录不能为空。 部署执行约束 49 第5章 部署操作说明 1) 执行脚本的操作只能在集群主机上执行,通用机需用普通用户执行脚本。 2) 配置文件中所有要求写路径的参数都必须是绝对路径,不支持相对路径。 3)license_file 参数只需写 license 文件名即可,无需写路径。 4) 脚本支持使用非 22 端口进行 ssh 连接,如果想要修改 ssh 连接端口,除了更改配置文件 install.conf 之外,还 需修改系统/etc/ssh/sshd_config 文件中的 Port 项,然后重启 sshd 服务才能正常部署集群。修改系统文件以及重启 sshd 服务均需要使用 root 用户执行。 5.2.1.2 专用机约束 操作系统配置约束 同通用机操作系统约束。 部署执行约束 1) 执行脚本的操作只能在集群主机上执行,专用机需用 root 用户执行脚本。 2) 专用机部署集群之前,请确保所有设备的 sys_securecmdd 处于启动状态。 3) 配置文件中所有要求写路径的参数都必须是绝对路径,不支持相对路径。 4) 在已经成功部署集群后,如果需要再次部署集群,同样请先移除原有的 archive 目录、log 目录下的所有内容。 5) 部署集群前需要关闭所有设备上的 kingbased 服务,并注销其开机自启设置。 # 关闭 kingbased 服务 systemctl stop kingbased # 注销 kingbased 服务开机自启设置 systemctl disable kingbased 5.2.2 相关文件配置 部署配置文件 install.conf 配置 提供 install.conf 配置文件用于配置集群部署所需参数,提供参数如下: 50 第5章 部署操作说明 表 5.2.1: install.conf 配置文件参数 参数名称 默认值/建议值 备注 on_bmj 0 必须配置,说明当前部署集群的设备是否为专用机,1 表示为专用机,0 表示为通用机,默认值为 0。 读写分离集群参数部署读写分离集群时,为必须配置项 all_ip 部署两地三中心时,为不可配置项 配置读写分离集群所有节点 host,以空格分隔,默认第 一个被设置为集群主机,可配置 IPv4、IPv6 或 hostname,但所有节点必须配置为相同的类型。 两地三中心配置项部署读写分离集群时,为不可配置项 production_ip 部署两地三中心时,为必须配置项 配置生产中心所有节点的 host。可配置 IPv4、IPv6 地 址但所有节点必须配置为相同的类型 local_disaster_r 两地三中心配置项部署读写分离集群时,为不可配置项 ecov- 部署两地三中心时,为必须配项 ery_ip 配置同城灾备中心所有节点的 host。可配置 IPv4、 IPv6 地址,但所有节点必须配置为相同的类型 remote_disaste 两地三中心配置项部署读写分离集群时,为不可配置项 r_recovery_ip 部署两地三中心时,为可选项 配置异地灾备中心节点的 host。异地灾备中心只能有一 个节点。可配置 IPv4、IPv6 地址。 可选配置,要部署观察器节点的设备,只能配置一个 witness_ip IP,默认为空(不部署观察器节点)。可以配置 IPv4 或 IPv6 地址或 hostname,但必须和 all_ip 中的 IP 类 型相同。 必须配置,说明集群部署的路径,该路径需是一个不存 install_dir 在的目录,专用机不需要配置,字符串不能以 / 字符结 尾。 zip_package 必须配置,说明压缩包的路径,专用机不需要配置。 license_file 必须配置,说明 license 文件的名字,多个 license 之间 以空格分隔, 专用机不需要配置。 db_user ”system” 必须配置,数据库初始用户。 db_password 12345678ab 可选配置,数据库用户密码;不配置则使用默认密码 12345678ab。 见续表 51 第5章 部署操作说明 表 5.2.1 – 续表 参数名称 默认值/建议值 备注 db_port 54321 必须配置,数据库端口。 db_mode ”oracle” 必须配置,数据库模式,pg/oracle/mysql。 db_auth scram-sha-256 必须配置,数据库权限。 db_case_sensitive yes 必须配置,数据库是否大小写敏感,yes 表示数据库大 小写敏感,no 表示数据库大小写不敏感,默认为 yes。 当数据库默认为 pg 时,只能设置为 yes。数据库模式为 mysql 时,只能设置为 no。 可选配置,数据库默认采取的字符集,不配置数据库默 db_encoding 认从 locale 命令读取。 可选配置,数据库字符排序的字符集规则,不配置数据 db_collate 库默认从 locale 命令读取。 可选配置,数据库字符分类的字符集规则,不配置数据 db_ctype 库默认从 locale 命令读取。 可选配置,用户需要自定义添加的数据库初始化参数, other_db _init_options 例如:”--scenario-tuning”。数据库模式为 mysql 时,不 允许设置”--scenario-tuning”。 可选配置,是否开启同步安全参数的功能,yes 表示开 sync_security_guc 启,no 表示关闭,默认为 no。相关功能详细描述请参 考 定时任务 必须配置,指定当前部署集群的信任网关,多个网关请 trusted_servers 用“,”分隔,不允许有空格。可以配置 IPv4 或 IPv6 地 址,但必须和 all_ip 中的 IP 类型相同。 running_under_fail ure_trusted_servers ”on” 可选配置,数据库节点无法 ping 通信任网关后是否正 常运行。on 表示 ping 信任网关失败后数据库可以继续 运行;off 表示 ping 网关失败后将关闭数据库。默认为 on。 data_directory 可选配置,指定数据库 data 目录路径,通用机默认为 $ {install_dir}/kingbase/data,专用机默认为/opt/Kingbase/ES/V9/data。 见续表 52 第5章 部署操作说明 表 5.2.1 – 续表 参数名称 默认值/建议值 备注 可选配置,部署集群所需的数据库虚拟 IP,掩码长度默 virtual_ip 认为 24,需跟网卡 net_device 的实际掩码长度一致。 简称 VIP。只能配置 IPv4,当 all_ip 配置为 IPv6 或 hostname 时,不能配置此参数。 可选配置,若配置了 [virtual_ip],则此参数必须配置, net_device 值为 VIP 所在网卡的网卡名称,每个节点网卡名中间以 空格分隔,且必须和 all_node_ip 的顺序保持一致,如 果所有设备的网卡相同,则只需写一次。 可选配置,若配置了 [virtual_ip],则此参数必须配置, net_device_ip 即 VIP 所在网卡的物理 IP 地址,每个节点的 IP 中 间以空格分隔,且必须和 all_ip 的顺序保持一致。因 为 [virtual_ip] 只能配置为 IPv4,此参数也必须配置为 IPv4。net_device_ip 可以是 VIP 所在网卡的物理 ip 地 址列表中的任何一个,默认为第一个,且不区分虚拟 IP 与物理 IP。 ipaddr_path ”/sbin” 可选配置,ip 命令路径,默认为“/sbin”。 可选配置,arping 命令路径,默认为” 数据库安装目录 arping_path 的 bin” 目录。 ping_path ”/bin” 可选配置,ping 命令路径,默认为“/bin”。 super_user ”root” 可选配置,指明设备的超级用户,默认为 root。 execute_user ”kingbase” 可 选 配 置, 指 明 设 备 部 署 集 群 的 普 通 用 户, 默 认 为 kingbase。 deploy_by_sshd 1 可选配置,部署方式,通用机是否通过 sshd 服务部署 集群。在专用机上不能通过 sshd 服务部署(值为 0)。 use_scmd 1 可选配置,指定集群是否依赖 sys_securecmdd 运行。 如果为 0 则集群依赖 sshd 服务,专用机上只能依赖 sys_securecmdd(值为 1)。 reconnect_attempts 10 可选配置,数据库故障时检测重试次数。 reconnect_interval 6 可选配置,数据库故障时检测重试间隔。 见续表 53 第5章 部署操作说明 表 5.2.1 – 续表 参数名称 默认值/建议值 备注 recovery ”standby” 可选配置,集群故障恢复自动恢复参数,manual 表 示不自动恢复,standby 表示自动恢复故障的备数据 库,automatic 表示自动恢复所有故障数据库,默认为 standby。 ssh_port ”22” 可选配置,指定 sshd/ssh 连接端口,默认为 22。 scmd_port ”8890” 可选配置,指定 sys_securecmdd/sys_securecmd 连接 端口,默认为 8890。 use_ssl 0 可选配置,指定是否使用 ssl 进行集群间通信,0 表示 功能关闭,1 表示功能开启。默认为 0,即不使用 ssl 通 信。 auto_cluster_recov 1 可选配置,集群故障多级别自动恢复参数,1 表示全部 节点故障且节点间网络正常,当前集群节点只有 1 个处 ery_level 于主库状态时可自动恢复集群。0 表示关闭集群自动恢 复功能。 use_check_disk ”off” 可选配置,是否开启磁盘故障转移功能。on 表示开启, 检查到磁盘故障后,关闭当前数据库防止故障扩大;off 表示关闭,仅检查磁盘,发现故障后打印日志,不做任 何处理。默认为 off,关闭此功能。 可选配置,指定集群同/异步模式。async 为异步模式; synchronous sync 为同步模式;quorum 为优选同步模式;all 为动态 全同步模式。配置为空则使用默认值,读写分离集群默 认为 quorum;两地三中心集群默认为 all。 sync_in_same_loca tion 0 可选配置,两地三中心集群下同步模式是否仅在本中心 生效。0 表示不局限于本中心,synchronous 配置的同 步模式对所有连接主库的备库生效;1 表示仅本中心有 效,synchronous 配置的同步模式仅在主库所在中心内 部生效。 failover_need_ser ver_alive ”off” 可选配置,两地三中心集群支持跨中心故障转移是否进 行检查。off 为不支持跨中心故障转移;none 为支持并 且不需要检查;any 为支持但要求故障主库所属中心任 一数据库所在服务器存活;all 为支持但要求故障主库所 属中心所有数据库所在服务器存活。 54 第5章 部署操作说明 免密工具配置 5.2.3 sys_securecmd 免密配置 具体操作步骤请参考远程通信工具 章节。 ssh 免密配置 用户可以手动配置部署环境的 ssh 免密,或者使用 trust_cluster.sh 配置免密。 免密配置要求: 1) 每个节点的集群部署用户(execute_user)和超级用户(super_user)之间免密 2) 所有节点(all_ip)之间集群部署用户(execute_user)彼此免密 3) 所有节点(all_ip)之间超级用户(super_user)彼此免密 4) 所有节点(all_ip)之间集群部署用户(execute_user)和超级用户(super_user)彼此免密 使用 trust_cluster.sh 配置免密方法: 1) 上传 install.conf 和 trust_cluster.sh 到需要部署集群的任意一台设备上 2) 配置 install.conf 文件,配置 all_ip、execute_user 和 super_user 三个参数 3) 确保所有节点(all_ip)上都存在 execute_user 和 super_user 两个用户 4) 使用 super_user 用户执行 trust_cluster.sh 5) 执行过程中需要输入每个节点 super_user 的密码,请输入 6) 免密完成 5.2.4 部署操作示例 5.2.4.1 通用机部署 5.2.4.1.1 操作步骤--通过 SSHD 服务自动分发文件并部署 注意: 此步骤针对通用机环境【可以使用 SSHD 服务并且可以通过 SSH 免密登陆 root 用户】此类场景可以使用此 方式部署集群。 1、安装数据库: 推荐在集群主机安装数据库 2、获取集群部署所需文件 安装成功后,请在 ${install_dir}/ClientTools/guitools/DeployTools/zip/目录下获取如下文件: 55 第5章 部署操作说明 注意: db.zip # 数据库服务器压缩包 cluster_install.sh # 部署脚本 install.conf # 部署配置文件 trust_cluster.sh # 配置 SSH 免密脚本 请单独准备 license.dat 授权文件并上传,使用集群部署用户新建文件夹 r6_install,将压缩包 db.zip、脚本文件 cluster_install.sh、配置文件 install.conf、免密配置脚本 trust_cluster.sh、license 文件上传至 r6_install,需注意文 件权限属主需为集群部署用户。 注意: cluster_install 路径不能是 cluster_path 或者其子目录。例:上传到 r6_install 目录,目录结构如下: r6_install -- cluster_install.sh -- install.conf -- trust_cluster.sh -- license.dat -- db.zip 3、配置 install.conf 编辑 install.conf 配置文件,参见相关文件配置 部署配置文件 install.conf 配置,进行相关参数配置。如需修改 ssh 连接端口,先修改 install.conf 文件中 ssh_port 项的值,然后修改系统/etc/ssh/sshd_config 文件中的 Port 项的 值,最后需要重启 sshd 服务。 注意: 如果需要修改 ssh 端口,建议不要将其修改为与 22 相近的端口号,这些端口号容易被其他服务占用,尽量往 大了写,比如修改为 10022。 4、SSH 免密配置 使用 trust_cluster.sh 进行 SSH 免密配置,免密配置后,请验证即将要部署集群的所有设备的 root 用户和普通 用户之间的免密是否配置正确。 5、集群部署 集群部署用户执行 sh cluster_install.sh 命令进行集群部署,部署脚本将按照配置自动完成集群部署工作。 6、部署后检查 部署成功后,请去到集群部署位置(通用机 install_dir)下,执行命令”repmgr cluster show”,确认是否真正成 功部署集群。 5.2.4.1.2 部署示例--通过 SSHD 服务自动分发文件并部署 1、准备部署设备 A、B,IP 分别为 192.168.28.126、192.168.28.127。 2、将数据库通用机安装包,安装到 A 设备上,在安装目录/ClientTools/guitools/DeployTools/zip 目录下,获取 db.zip、cluster_install.sh、trust_cluster.sh 和 install.conf。 56 第5章 部署操作说明 3、上传 cluster_install.sh、install.conf、trust_cluster.sh、license 文件到 A 设备普通用户下,例:上传到 A 的/ home/kingbase/r6_install 目录下。注意上传后的所有文件的属主和执行权限,必须要是普通用户能够执行的权限。 4、进行部署前参数配置(填写 install.conf 配置文件),参数填写后检查参数填写是否正确。如需要更改其他不 在 install.conf 文件中能够配置的参数,可修改 cluster_install.sh 脚本。 5、在 /home/kingbase/r6_install 目录下用 root 用户执行命令 sh trust_cluster.sh,在执行过程中,如果遇到需 要输入信息的地方,请按提示要求输入。 6、在 A 上,使用集群部署用户执行 cluster_install.sh 脚本。 7、集群部署完成。 8、部署成功后,请去到集群部署位置(通用机 install_dir)下,执行命令”install_dir/ bin/ repmgr clustershow”,确认是否真正成功部署集群。 install.conf 参数配置示例: on_bmj=0 all_ip=(192.168.28.126 192.168.28.127) production_ip=() # 配置 all_ip 后,不能配置这个参数 local_disaster_recovery_ip=() # 配置 all_ip 后,不能配置这个参数 remote_disaster_recovery_ip=() # 配置 all_ip 后,不能配置这个参数 witness_ip="192.168.28.128" # 在此 IP 的设备上部署观察器节点,如果不需要部署请设置为空 install_dir="/home/kingbase/v9" zip_package="/home/kingbase/r6_install/db.zip" license_file=(license.dat) db_user="system" db_password="123456" db_port="54321" db_mode="oracle" db_auth="scram-sha-256" db_case_sensitive="yes" db_encoding="" db_collate="" db_ctype="" other_db_init_options="" sync_security_guc="no" data_directory="" trusted_servers="192.168.28.1" running_under_failure_trusted_servers="on" virtual_ip="192.168.28.226" net_device=(ens192 eth0) net_device_ip=(192.168.28.126 192.168.28.127) # 网卡上已有的 ip 地址 ipaddr_path="/sbin" arping_path="" ping_path="/bin" super_user="root" 57 第5章 部署操作说明 execute_user="kingbase" deploy_by_sshd=1 use_scmd=1 reconnect_attempts="10" reconnect_interval="6" recovery="standby" ssh_port="22" scmd_port="8890" auto_cluster_recovery_level="1" use_check_disk="off" # 配置为空,则读写分离集群默认为 quorum,两地三中心集群默认为 all synchronous="" sync_in_same_location=0 failover_need_server_alive='off' 注 意: 设置 deploy_by_sshd=1。 当 license 文 件 不 可 复 用 时, 请 在 文 件 名 上 进 行 区 分, 例 如:li- cense_file=(license.dat-1 license.dat-2) 5.2.4.1.3 操作步骤--手动分发文件并部署 注意: 此步骤针对通用机环境【无法使用 SSHD 服务,或者无法通过 SSH 免密登陆 root 用户】此类环境可以使用 此方式部署集群。 1、安装数据库 2、获取集群部署所需文件 安装成功后,需获取如下文件 a. 安装目录/DeployTools/zip/Lin64(对应平台)中的 db.zip b. license.dat 授权文件 请单独准备 license.dat 授权文件并上传,使用集群用户(操作系统用户,例如:kingbase),在每个节 点创建 $install_dir/kingbase 目录(install_dir 是集群部署路径,后续会配置在 install.conf 中),并将 db.zip 和 license.dat 拷贝到每个节点的 $install_dir/kingbase 目录下。在 $install_dir/kingbase 目录下解 压 db.zip,并将 license.dat 拷贝到解压后出现的 $install_dir/kingbase/bin 目录下。需注意文件权限属主 需为集群部署用户。 3、启动 SYS_SECURECMDD 使用 root 用户在每个节点执行 $install_dir/kingbase/bin/sys_HAscmdd.sh init 和 $install_dir/kingbase/ bin/sys_HAscmdd.sh start 来启动 SYS_SECURECMDD。 58 第5章 部署操作说明 注意: 如果需要修改 SYS_SECURECMDD 的端口,在执行 sys_HAscmdd.sh init 前修改 share/sys_HAscmdd.conf 中的 scmd_port。之后在下一步配置 install.conf 中配置 scmd_port 为同样的值。 4、配置 install.conf 编辑 $install_dir/kingbase/bin/install.conf 配置文件,参见相关文件配置 ,部署配置文件 install.conf 配 置,进行相关参数配置。 5、集群部署 集群部署用户执行 sh cluster_install.sh 命令进行集群部署,部署脚本将按照配置自动完成集群部署工作。 6、部署后检查 部署成功后,请去到集群部署位置(通用机 install_dir)下,执行命令” install_dir/ bin/ repmgr cluster show”,确认是否真正成功部署集群。 5.2.4.1.4 部署示例--手动分发文件并部署 1、准备部署设备 A、B,IP 分别为 192.168.28.126、192.168.28.127。 将数据库通用机安装包,安装到 A 设备上,在安装目录/ ClientTools/ guitools/ DeployTools/ zip/下,获取 db.zip。 2、在 A、B 设备上创建/home/kingbase/v9/kingbase 目录,并将 db.zip 和 license.dat 分别上传到 A、B 设备的 此目录下,请注意所有文件的属主和执行权限,必须要是普通用户能够执行的权限。 3、使用 root 用户在每个节点执行/home/kingbase/v9/kingbase/bin/sys_HAscmdd.sh init 和/home/kingbase/ v9/ kingbase/bin/sys_HAscmdd.sh start 来启动 sys_securecmdd。 4、在 A 上,配置/home/kingbase/v9/kingbase/bin/install.conf 文件,参数填写后检查参数填写是否正确。如需 要更改其他不在 install.conf 文件中能够配置的参数,可修改 cluster_install.sh 脚本。 5、在 A 上,使用集群部署用户执行 cluster_install.sh 脚本。 6、集群部署完成,部署成功后,执行命令”repmgr cluster show”,确认是否真正成功部署集群。 install.conf 参数配置示例: on_bmj=0 all_ip=(192.168.28.126 192.168.28.127) production_ip=() # 配置 all_ip 后,不能配置这个参数 local_disaster_recovery_ip=() # 配置 all_ip 后,不能配置这个参数 remote_disaster_recovery_ip=() # 配置 all_ip 后,不能配置这个参数 witness_ip="192.168.28.128" # 在此 IP 的设备上部署观察器节点,如果不需要部署请设置为空 install_dir="/home/kingbase/v9" zip_package="" license_file=() db_user="system" 59 第5章 部署操作说明 db_password="123456" db_port="54321" db_mode="oracle" db_auth="scram-sha-256" db_case_sensitive="yes" db_encoding="" db_collate="" db_ctype="" other_db_init_options="" sync_security_guc="no" data_directory="" trusted_servers="192.168.28.1" running_under_failure_trusted_servers="on" virtual_ip="192.168.28.226/24" net_device=(ens192 eth0) net_device_ip=(192.168.28.126 192.168.28.127) # 网卡上已有的 ip 地址 ipaddr_path="/sbin" arping_path="" ping_path="/bin" super_user="root" execute_user="kingbase" deploy_by_sshd=0 use_scmd=1 reconnect_attempts="10" reconnect_interval="6" recovery="standby" ssh_port="22" scmd_port="8890" auto_cluster_recovery_level="1" use_check_disk="off" synchronous="" # 配置为空,则读写分离集群默认为 quorum,两地三中心集群默认为 all sync_in_same_location=0 failover_need_server_alive='off' .. note:: 设置 deploy_by_sshd=0。手动创建的集群部署路径为 $install_dir/kingbase。例如配置 install_dir="/home/ kingbase/v9",则创建/home/kingbase/v9/kingbase 目录并解压 db.zip 到此目录下。 5.2.4.2 专用机部署 5.2.4.2.1 操作步骤 1、安装数据库需要在集群所有设备安装专用机数据库。 60 第5章 部署操作说明 2、获取集群部署所需文件. 安装成功后,需确认如下文件: 安装目录/Server/bin/下的部署脚本 cluster_install.sh; 安装目录/Server/bin/下的配置文件 install.conf。 3、配置 install.conf 在安装目录/Server/bin/目录下编辑 install.conf 配置文件,进行相关参数配置。 4、每个节点初始化并启动 sys_securecmdd 执行命令 / opt/ Kingbase/ ES/ V9/ Server/ bin/ sys_HAscmdd.sh init 和/ opt/ Kingbase/ ES/ V9/ Server/ bin/ sys_HAscmdd.sh start 启动 sys_securecmdd。 5、集群部署 移除主备机原有的 data 目录后,集群部署用户在/ opt/ Kingbase/ ES/ V9/ Server/ bin/目录下执行 sh cluster_install.sh 命令进行集群部署,部署脚本将按照配置自动完成集群部署工作。 6、部署后检查 去到集群部署位置(专用机/opt/Kingbase/ES/V9/Server/bin 目录)下,执行对应的命令,确认是否真正成功 部署集群,即执行命令”/opt/Kingbase/ES/V9/Server/bin/repmgr cluster show”。 5.2.4.2.2 部署示例 1、准备部署设备 A、B,IP 分别为 192.168.28.126、192.168.28.127。 2、安装专用机数据库,请使用专门的包管理器进行安装。 3、在安装目录/Server/bin 目录下找到 cluster_install.sh、install.conf 文件。 4、请确认是否有变量需要更改,包括文件名是否正确、数据库参数是否需要修改等。 由于专用机安装后会自动启动数据库,所以首先执行 ps -ef|grep kingbase 查看是否有数据库在运行,如果有,将 数据库停掉,A、B 两台设备均要检查,同时移除主备机原有 data 目录。 5、执行 ps -ef|grep sys_securecmdd 查看 sys_securecmdd 是否处于启动状态,如果没有,请执行命令 /opt/ Kingbase/ES/V9/Server/bin/sys_HAscmdd.sh init 和/opt/Kingbase/ES/V9/Server/bin/sys_HAscmdd.sh start 启 动 sys_securecmdd。A 和 B 设备都要检查。 6、在设备 A 上的/opt/Kingbase/ES/V9/Server/bin 目录下,使用 root 用户执行 sh cluster_install.sh 命令。 7、集群部署完成。 8、去到集群安装目录即/opt/Kingbase/ES/V9/Server/bin 目录下连接数据库,执行命令”/opt/Kingbase/ES/ V9/ Server/bin/repmgr cluster show” 查看集群是否正常。 install.conf 参数配置示例: 61 第5章 部署操作说明 on_bmj=0 all_ip=(192.168.28.126 192.168.28.127) production_ip=() # 配置 all_ip 后,不能配置这个参数 local_disaster_recovery_ip=() # 配置 all_ip 后,不能配置这个参数 remote_disaster_recovery_ip=() # 配置 all_ip 后,不能配置这个参数 witness_ip="192.168.28.128" # 在此 IP 的设备上部署观察器节点,如果不需要部署请设置为空 install_dir="" zip_package="" license_file=() db_user="system" db_password="123456" db_port="54321" db_mode="oracle" db_auth="scram-sha-256" db_case_sensitive="yes" db_encoding="" db_collate="" db_ctype="" other_db_init_options="" sync_security_guc="no" data_directory="/root/data" trusted_servers="192.168.28.1" running_under_failure_trusted_servers="on" virtual_ip="192.168.28.226" net_device=(ens192) # 表明 A、B 设备的网卡是相同的 net_device_ip=(192.168.28.126 192.168.28.127) # 网卡上已有的 ip 地址 ipaddr_path="/sbin" arping_path="" ping_path="/bin" super_user="root" execute_user="kingbase" deploy_by_sshd=0 use_scmd=1 reconnect_attempts="10" reconnect_interval="6" recovery="standby" ssh_port="22" scmd_port="8890" auto_cluster_recovery_level="1" use_check_disk="off" synchronous="" # 配置为空,则读写分离集群默认为 quorum,两地三中心集群默认为 all sync_in_same_location=0 failover_need_server_alive='off' 62 第6章 6 第 章 配置文件说明 配置文件说明 集群的配置文件为 repmgr.conf,集群守护进程(kbha、repmgrd)以及命令行工具(repmgr、kbha)都会读取 此配置文件。 说明:取值约束中部分缩写解释。 INT:整形值,大于等于 0 STR:字符串,配置时使用单引号括起来。 IP:ip 地址。 IP/MASK:ip 地址 + 掩码,例:192.168.1.1/24 。 表 6.1: 集群配置文件 repmgr.conf 配置 参数分 参数名称 描述 取值约束 ha_running_mode 集群运行模式。运行模式不 DG, TPTC 默认为 DG 类 节点基 本配置 同则功能不同,目前只支持 两种运行模式:RWC 读写分 离集群,TPTC 两地三中心 集群。 node_id 数据库节点 ID。从 1 开始, INT,必须配置,且所有节点值不能有 每个数据库实例对应不同的 相同值。 ID,此值会记录在数据库的 节点信息表 repmgr.nodes 中,用于标示每个数据库实 例。 node_name 数据库节点名称。用于显示 STR,必须配置,且所有数据库节点值 的数据库实例名称。 不能有相同值。 见续表 63 第6章 配置文件说明 表 6.1 – 续表 参数分 参数名称 描述 取值约束 conninfo 本地数据库实例连接串。此 STR,必须配置。 类 连接串必须能够从本地、从 远端都可以连接本地数据 库。HA 组件中的 repmgrd 通过此连接串来监控数据状 态。 location 节点的区域。用于表示本节 STR 点所处区域,可以根据不同 读写分离集群默认为 default;两地三 的物理位置或网络分区来 中心集群默认配置为:production 表示 配置不同的值。相同值的节 生产中心,local_disaster 表示同城灾备 点被视为在同一区域,当其 中心,remote_disater 表示异地灾备中 他区域的节点无法连接主库 心。 和主库所在区域任一数据库 时,这些区域的节点无法进 行故障切换。 sys_bindir 数据库安装的 bin 目录绝对 STR,必须配置。 路径。实例名称。 data_directory 本地数据库 data 目录的绝对 STR,必须配置。 路径。 守护进 log_level 程设置 HA 组件打印日志级别。影 DEBUG, 响 打 印 日 志 的 详 细 程 度, ING, 从 高 到 低 一 次 为:DEBUG, EMERG,默认为 INFO。 INFO, ERROR, NOTICE,WARNALERT, CRIT or INFO, NOTICE,WARNING, ERROR, ALERT, CRIT or EMERG, 前 一 个 值 包 含 后 一个值。 log_file 集群守护进程 repmgrd 的日 STR 志文件的绝对路径(含文件 名)。 kb_log_file 集群守护进程 kbha 的日 STR 志文件的绝对路径(含文件 名)。 见续表 64 第6章 配置文件说明 表 6.1 – 续表 参数分 参数名称 描述 取值约束 repmgrd_pid_file 集群守护进程 repmgrd 启动 STR,必须配置。 类 时对应的 pid 文件的绝对路 径(含文件名)。 kbha_pid_file 集群守护进程 kbha 启动时 STR,必须配置。 对应的 pid 文件的绝对路径 (含文件名)。 集群通 use_scmd 集 群 是 否 使 用 信工具 sys_securecmdd 设置 群间通信共享工具,设置为 off/on,默认为 on。 作为集 off 则使用 sshd 作为集群间 通信工具。 scmd_options 集群使用通信工具(ssh 或 STR sys_securecmd)时, 会加此 参数中配置的值。 VIP 设 virtual_ip 置 虚拟 ip+ 掩 码。 例:vir- IP/MASK tual_ip=’192.168.1.111/24’, 配置的虚拟 IP 最好和设备的 IP 同网段,可以使用默认路 由。如果和设备 IP 不同网 段,请配置好路由表,使得 虚拟 IP 能够正常使用。 ipaddr_path 操作系统命令 ip 的目录。 STR,默认为 /sbin 如果配置了 virtual_ip 且集 群运行在普通用户下,需要 让普通用户执行 ip 命令时 有 root 的权限,例:chmod u+s /sbin/ip arping_path 操作系统命令 arping 的目 STR,默认为 ${集群路径}/bin 录。如果配置了 virtual_ip 且集群运行在普通用户下, 需要让普通用户执行 ip 命 令时有 root 的权限,例: chmod u+s /sbin/arping 见续表 65 第6章 配置文件说明 表 6.1 – 续表 参数分 参数名称 描述 取值约束 vip_add_cmd 添加虚拟 IP 时执行的命 STR,默认为’ip addr add $_IP_$ dev 令。 默 认 为’ip $_DEV_$ label $_DEV_$:3’ 类 addr add $_IP_$ dev $_DEV_$ label $_DEV_$:3’,其中 $_IP_$ 和 $__DEV$ 表示通配字 符, 在 程 序 执 行 命 令 时, 会自动根据 virtual_ip 和 net_device 配置的值进行替 换。 vip_del_cmd 删除虚拟 IP 时执行的命令。 STR,默认为’ip addr del $_IP_$ dev 默认为’ip addr del $_IP_$ $_DEV_$’ dev $_DEV_$’,通配符同 上。 arping_cmd 加载虚拟 IP 后执行的 arp- STR,默认为’arping -U $_IP_$ -w 2 -c ing 命令。默认为’arping - 2 -I $_DEV_$’ U $_IP_$ -w 2 -c 2 -I $_DEV_$’,通配符同上。 net_device 虚拟 IP 对应的网卡名称。 STR, 如果配置了 virtual_ip 则必需配 如果没有配置 VIP 则不需要 置此参数。 配置,否则必须配置网卡名 称。 net_device_ip vip_timeout 网卡 net_device 上已存在的 STR, 如果配置了 virtual_ip 则必需配 物理 IP。 置。 故障自动转移过程中,原主 INT, 默认 60 秒。 卸载 VIP 新主加载 VIP 的 超时时长,超时前会不断尝 试。 check_vip_interval 主库或备库检查 VIP 的间 INT, 默认 20 秒。 隔。主库定期检查 VIP 是否 在本设备上,如果不存在则 添加;备库定期检查 VIP 是 否在本设备上,如果存在则 自动卸载。 见续表 66 第6章 配置文件说明 表 6.1 – 续表 参数分 参数名称 描述 取值约束 trusted_servers 信任网关 IP,可以配置多 IP[,IP,IP…,IP],必须配置 类 信任网 关设置 个,以符号’,’ 进行分隔。数 据库所在设备能够 ping 通 的 IP,且通过能否 ping 通 该 IP 来判断本设备网络是否 正常。如果无法 ping 通所有 信任网关 IP,认为本设备异 常,将会关闭 HA 组件和数 据库; 如果能够 ping 通任意 一个信任网关 IP,则一切正 常。 running_under_fail 数据库是否可以在 ping 信任 ure_trusted_servers 网关失败后继续运行。’on’, off/on,默认为 on。 ping 信任网关失败后数据库 不受影响;’off’,ping 信任 网关失败后关闭数据库。 监控数 ping_path 操作系统 ping 命令的目录。 STR,默认为 /bin connection_check _type 检查上游数据库状态的方 ping, connection, query, mix 默认为 mix 据库设 法。ping,使用 PQping() 检 置 查;connection, 建 立 数 据 库 连 接;query, 使 用 已 有 连接执行 SELECT TRUE 进 行 检 查;mix, 平 常 使 用 PQping() 进行检查,如果多 次失败,最后一次使用已有 连接执行 SELECT TRUE 进行检查。则一切正常。 见续表 67 第6章 配置文件说明 表 6.1 – 续表 参数分 参数名称 描述 取值约束 reconnect_attempts 连 接 失 败 时, 重 试 次 数。 INT,默认 10。 类 当 连 接 数 据 库、ping 网 关、ssh 信任 测试远端能否 连 通 时, 失 败 后 会 根 据 此 参 数 进 行 多 次 重 试, 重 试 reconnect_attempts 仍然 失败,才会认为本次执行失 败,进行相应的失败处理。 reconnect_interval 重试时的时间间隔。每次重 INT, 默认 6 秒。 试间隔多少秒。 monitor_interval _secs 集群守护进程 repmgrd 正 INT, 默认 2 秒。 常情况下每轮循环的间隔时 间。 故障自 failover 自 动 切 换 控 制 参 数。’man- 动切换 ual’, 关 闭 自 动 切 换; 设置 ’automatic’, 开 启 自 动 切 manual, automatic 默认为 automatic。 换。 failover_need_ser ver_alive 两地三中心集群下跨中心自 off, none, any, all 默认为 off。 动切换控制参数。’off’,不支 持跨中心自动切换;’none’, 支持跨中心自动切换并且无 任何附加检查条件;’any’, 支持跨中心自动切换,但需 要故障主库所属中心任一数 据库所在服务器存活;’all’, 支持跨中心自动切换,但需 要故障主库所属中心所有数 据库所在服务器存活。 standby_disconnect 自动切换时, 先检查备库流 _on_failover 复制状态,如果流复制正常 false/true,默认为 true。 则先断开流复制,之后在继 续。 见续表 68 第6章 配置文件说明 表 6.1 – 续表 参数分 参数名称 描述 取值约束 priority 自动切换时, 备机选举权重。 INT,默认 100。 类 自动切换时,备机选举出一 个最优的备机进行升主。当 所有备机的 LSN 一致时,选 择权重最大的备机作为最优 备机。如果备机节点的权重 设置为 <=0,则该备机不能 作为最优备机。 promote_command 自动切换时, 备机升主时执行 STR 的命令。 follow_command 自动切换时, 备机跟随新主机 STR 执行的命令。当关闭自动恢 复 recovery=’manual’ 时, 备机才会自动跟随新主机; 否则,自动恢复开启的情况 下,发生自动切换后,备机 由主机来恢复,而不是备机 自动跟随。 故障自 自 动 恢 复 控 制 参 数。’man- manual, standby, automatic 默认为 动恢复 ual’, 关 闭 自 动 恢 复; standby。 设置 ’standby’,自 动 恢 复故 障备 recovery 库;’automatic’, 自 动 恢 复 所有故障数据库。 auto_recovery_delay 发现数据库故障后,延迟多 INT,默认 20 秒。 长时间后再进行恢复。 in_recovery_timeout 恢复故障数据库后,连接故 INT,默认 3600 秒。 障数据库确认其状态,如果 故障数据库一直处于 redo 不 接受连接,则等待其恢复的 最长时间。 见续表 69 第6章 配置文件说明 表 6.1 – 续表 参数分 参数名称 描述 取值约束 集群多级别自启动功能。0, 0/1,默认为 1。 类 auto_cluster_ recovery _level 关闭此功能;1, 当集群所有节 点数据库停止, 且只有一个 主库时,启动主库并恢复集 群。 同异步 synchronous 设置 集 群 同 异 步 控 制 参 数。 async, sync, quorum, all async,异步集群,所有备库 读写分离集群默认为 quorum;两地三 为 异 步;sync, 同 步 集 群, 中心集群默认为 all。 第一个正常的备库为同步备 库;quorum,优选同步集群, 所有备库中最先同步完成的 为 同 步 备 库;all, 动 态 全 同 步集群,所有备库为同步备 库。 sync_in_same_loca tion 两地三中心集群下集群同异 0/1, 默认为 0。 步参数生效范围控制参数。 0,无限制,所有连接主库的 备库都受同异步控制参数影 响;1, 只 有 主 库 所 在 中 心 的备库受同异步控制参数影 响。 lsn_lag_threshold 主备库数据差异阈值。当主 INT,默认 16 MB。 备数据小于此值时,才能将 主库由异步自动切换为同 步。同时,此值还会影响异 步集群中异步备库是否能够 自动切换。 磁盘检 use_check_disk 测设置 检查认为磁盘故障后, 是否关 off/on, 默认为 off。 闭数据库。 mount_point_dir_list 磁盘检查目录,可以配置多 STR, 默认为空。 个路径,以英文逗号分隔。 如果为空,则自动检查数据 目录。中异步备库是否能够 自动切换。 见续表 70 第6章 配置文件说明 表 6.1 – 续表 参数分 参数名称 描述 取值约束 mount_check_max _retries 磁盘检查失败后,重复检查 INT,默认 6。 类 的次数,检查失败后重试间 隔 10 秒,每次重试都失败 后,认为磁盘故障。 71 第7章 7 第 章 日常运维管理 日常运维管理 对应 10 小节作的整改,包括但不限于一键启动的检查项目。对属于一键启动的检查项作个说明即可,比如本检 查属于一键启动默认检查项。 本章节包含以下内容: • 集群启停 • 集群项检查 • 集群主备切换 • 故障库恢复至集群 • 在线扩缩容 • VIP 管理 • 主备库的数据检查 • 主备库的连接检查 • 集群同异步一致性 • 一键修改密码 • 一键修改集群参数 • 控制文件多路备份配置 • 一键检查数据库状态 • 日志收集分析工具 7.1 集群启停 集群的启停通常有两种方式:一键启停和单个节点独立启停。 72 第7章 7.1.1 日常运维管理 一键启停方式 集群一键停止 $bin_path/sys_monitor.sh stop 集群一键启动 $bin_path/sys_monitor.sh start 7.1.2 手动启停方式 需要按照步骤手动启动集群中所有数据库以及守护进程。 首先启动所有数据库节点,在启动前需要检查所有数据库状态,保证不能有多主。 sys_ctl -D $data_directory -l logfile start 然后启动所有节点的 repmgrd 守护进程。 repmgrd -d -v -f $rep_conf 启动所有节点的 kbha 守护进程。 kbha -A daemon -f $rep_conf 最后,在所有节点使用 root 用户添加 CRON 任务。 # 在文件/etc/cron.d/KINGBASECRON(如果没有请创建)中写入语句: * 1 * * * * $user . /etc/profile;$bin_path/kbha -A daemon -f $rep_conf 需要按照步骤手动停止所有守护进程以及数据库。 首先,在所有节点使用 root 用户注释或删除 CRON 任务。 # 在文件/etc/cron.d/KINGBASECRON 注释(句首使用 #)以下语句: #* 1 * * * * $user . /etc/profile;$bin_path/kbha -A daemon -f $rep_conf 其次,关闭或杀掉所有节点的守护进程 kbha 和 repmgrd。 # 一定先关闭 kbha 进程 kill -9 pidof kbha repmgrd 最后停止所有数据库节点。 sys_ctl -D $data_directory -l logfile stop 73 第7章 7.2 集群项检查 7.2.1 启动状态 日常运维管理 在一键启动集群过程中,会逐个启动集群中的所有节点 DB,如果在启动 DB 过程中,发现有某个节点 DB 启动 失败了,则集群也会启动失败。 下面是针对此场景进行的简单模拟: 修改备机 data/es_rep.conf 文件,增加不正确的参数,构造备机 DB 无法启动情景,然后启动集群,集群 启动失败退出,报错如下: 7.2.2 集群双主 在一键启动集群时,会去检测集群中存在的主机数量,如果发现不只存在一个主机,则会终止集群启动,并停止 当前已经启动的 DB 及定时任务。 下面是针对此场景进行的简单模拟: 备机执行 promote 命令,构造双主情景: 启动集群失败,报错退出,并停止节点 DB 及定时任务: 74 第7章 日常运维管理 如需手动检查双主,执行: repmgr cluster show 如果查询结果有超出一行显示按主库运行,则正在面临双主问题。 7.3 集群主备切换 集群主备切换时指主动让主备角色互换,这种场景和故障自动转移的情况有所不同。自动故障转移是主库故障 后,备库升主以替代原主库,这个流程是意外发生、不受控制的。而主备切换一般是在运维过程中由运维人员手动触 发的,使主备角色互换。 命令以及详细参数请参考: repmgr standby switchover 章节。 切换示例: 1. 最初 primary 节点是 node102 75 第7章 日常运维管理 集群同步状态检查: 2. 选择 node101 为新的 primary。在 node101 运行切换命令,如下所示: [Kingbase@nn01]repmgr standby switchover --siblings-follow NOTICE: executing switchover on node "node101" (ID: 1) NOTICE: local node "node101" (ID: 1) will be promoted to primary; current primary "node102" (ID: 2) will be demoted to standby NOTICE: stopping current primary node "node102" (ID: 2) NOTICE: issuing CHECKPOINT NOTICE: node (ID: 2) release the virtual ip 192.168.237.100/24 success DETAIL: executing server command "/home/kingbase/cluster/PROJ01/DBCL/kingbase/bin/sys_ctl '/home/kingbase/cluster/PROJ01/DBCL/kingbase/data' -D -l /home/kingbase/cluster/PROJ01/DBCL/kingbase/bin/logfile -W -m fast stop" INFO: checking for primary shutdown; 1 of 60 attempts ("shutdown_check_timeout") INFO: checking for primary shutdown; 2 of 60 attempts ("shutdown_check_timeout") INFO: checking for primary shutdown; 3 of 60 attempts ("shutdown_check_timeout") INFO: checking for primary shutdown; 4 of 60 attempts ("shutdown_check_timeout") INFO: checking for primary shutdown; 5 of 60 attempts ("shutdown_check_timeout") INFO: checking for primary shutdown; 6 of 60 attempts ("shutdown_check_timeout") INFO: checking for primary shutdown; 7 of 60 attempts ("shutdown_check_timeout") INFO: checking for primary shutdown; 8 of 60 attempts ("shutdown_check_timeout") INFO: checking for primary shutdown; 9 of 60 attempts ("shutdown_check_timeout") INFO: checking for primary shutdown; 10 of 60 attempts ("shutdown_check_timeout") NOTICE: current primary has been cleanly shut down at location 0/18000028 NOTICE: PING 192.168.237.100 (192.168.237.100) 56(84) bytes of data. --- 192.168.237.100 ping statistics --2 packets transmitted, 0 received, +1 errors, 100% packet loss, time 1000ms WARNING: ping host"192.168.237.100" failed DETAIL: average RTT value is not greater than zero NOTICE: new primary node (ID: 1) acquire the virtual ip 192.168.237.100/24 success 76 第7章 日常运维管理 NOTICE: promoting standby to primary DETAIL: promoting server "node101" (ID: 1) using sys_promote() NOTICE: waiting up to 60 seconds (parameter "promote_check_timeout") for promotion to complete NOTICE: STANDBY PROMOTE successful DETAIL: server "node101" (ID: 1) was successfully promoted to primary NOTICE: issuing CHECKPOINT INFO: local node 2 can attach to rejoin target node 1 DETAIL: local node's recovery point: 0/18000028; rejoin target node's fork point: 0/180000A0 NOTICE: setting node 2's upstream to node 1 WARNING: unable to ping "host=192.168.237.102 user=esrep dbname=esrep port=54321 connect_timeout=3 keepalives=1 keepalives_idle=10 keepalives_interval=1 keepalives_count=3" DETAIL: PQping() returned "PQPING_NO_RESPONSE" NOTICE: begin to start server at 2020-10-01 15:23:16.183728 NOTICE: starting server using "/home/kingbase/cluster/PROJ01/DBCL/kingbase/bin/sys_ctl -t 90 -D '/home/kingbase/cluster/PROJ01/DBCL/kingbase/data' -w -l /home/kingbase/cluster/PROJ01/DBCL/kingbase/bin/logfile start" NOTICE: start server finish at 2020-10-01 15:23:16.299152 NOTICE: replication slot "repmgr_slot_1" deleted on node 2 WARNING: 1 inactive replication slots detected DETAIL: inactive replication slots: - repmgr_slot_3 (physical) HINT: these replication slots may need to be removed manually NOTICE: NODE REJOIN successful DETAIL: node 2 is now attached to node 1 NOTICE: executing STANDBY FOLLOW on 1 of 1 siblings INFO: STANDBY FOLLOW successfully executed on all reachable sibling nodes NOTICE: switchover was successful DETAIL: node "node101" is now primary and node "node102" is attached as standby NOTICE: STANDBY SWITCHOVER has completed successfully 以上标黑字体表示主要步骤,其大致步骤总结如下: 1) 在 node102 运行 checkpoint 2) 从 node102 去除 VIP 3) 在 node102 运行 sys_ctl stop,关闭数据库 4) 确认 vip 及 102 数据库已停止 5) 在 node101 启动 VIP,并运行 promote 命令,将 node101 数据库提升为 primary 6) 启动 node102 数据库 7) 在 node103 运行 repmgr standby follow 3. 切换结果验证 77 第7章 7.4 日常运维管理 故障库恢复至集群 一般情况下,故障数据库会由守护进程将其作为备库恢复至集群。但如果故障为主库,默认情况(recovery=standby)下是不会自动将其恢复为备库的,另外,如果用户关闭了自动恢复功能(recovery=manual)或者暂 停了集群(repmgr service pause),那么任何故障数据库都不会自动恢复至集群,这时就需要运维人员手动操作将 故障数据库恢复至集群。 命令行命令: # 在故障的数据库节点执行 repmgr node rejoin -h ${主库 IP} -d esrep -U esrep -p ${主库 port} [--force-rewind] [--no-check-wal] # 可以执行简化后的命令 kbha -A rejoin -h ${主库 IP} 详细命令以及参数,请参考repmgr node rejoin 和kbha 章节。 参数说明: --force-rewind,当故障数据库和当前主库数据分歧后,需要指定此参数使用 sys_rewind 使得故障数据库 和新主库保持数据一致; —no-check-wal,一般情况下不允许时间线高的数据库恢复为时间线低的主库的备库,此选项可以忽略时 间线和 lsn 检查,必须和--force-rewind 一起使用; 使用示例: 1. Node101 由于数据库宕机,primary 切换到 node102。 2. 执行以下命令将原主库 node101 重新加入集群。 78 第7章 日常运维管理 [kingbase@nn01 archive]$ repmgr node rejoin -h 192.168.237.102 -U esrep -d esrep WARNING: the item in /home/kingbase/.kbpass is not end in the right way INFO: local node 1 can attach to rejoin target node 2 DETAIL: local node's recovery point: 0/4B000028; rejoin target node's fork point: 0/4B0000A0 NOTICE: setting node 1's upstream to node 2 WARNING: unable to ping "host=192.168.237.101 user=esrep dbname=esrep port=54321 connect_timeout=3 keepalives=1 keepalives_idle=10 keepalives_interval=1 keepalives_count=3" DETAIL: PQping() returned "PQPING_NO_RESPONSE" NOTICE: begin to start server at 2020-10-02 15:02:27.685836 NOTICE: starting server using "/home/kingbase/cluster/PROJ01/DBCL/kingbase/bin/sys_ctl -t 90 -D '/home/kingbase/cluster/PROJ01/DBCL/kingbase/data' -w -l /home/kingbase/cluster/PROJ01/DBCL/kingbase/bin/logfile start" NOTICE: start server finish at 2020-10-02 15:02:27.792657 NOTICE: replication slot "repmgr_slot_2" deleted on node 1 WARNING: 1 inactive replication slots detected DETAIL: inactive replication slots: - repmgr_slot_3 (physical) HINT: these replication slots may need to be removed manually NOTICE: NODE REJOIN successful DETAIL: node 1 is now attached to node 2 3. 确认集群状态 注意: 以上的例子 node101 在宕机后、rejoin 之前,并没有启动,也就是 node101 数据与 primary 并没有出现 di- verged。但如果 node101 宕机后曾经启动过,甚至修改了数据,这时 node101 重新加入时,就必须指定--force-rewind 选项。 7.5 在线扩缩容 7.5.1 简介 KingbaseES 提供数据库扩缩容工具进行数据库集群的在线扩缩容。对于不支持 GUI 的服务器,KingbaseES 提 供基于命令行操作的集群扩缩容方式,本文档主要用于指导不支持 GUI 的服务器上的 KingbaseES 版本集群扩缩容 工作。 79 第7章 7.5.2 日常运维管理 集群扩缩容约束 计划扩缩容集群前,请仔细阅读以下约束。 7.5.2.1 通用机约束 7.5.2.1.1 免密配置约束 1、目前在通用机上支持两种扩缩容方式:� 通过 sshd 服务自动分发文件并扩缩容;� 手动分发文件,启动 sys_securecmdd 工具并进行扩缩容。 2、第 � 种扩缩容方式,需要配置节点间 ssh 免密,第 � 种扩缩容方式需要节点间 sys_securecmdd 工具秘钥协 商。两种方式都有如下免密登陆要求:所有即将扩缩容集群的设备之间,root 用户和 root 用户、root 用户和普通用 户、普通用户和普通用户免密登陆,同一主机的 root 用户和 root 用户、root 用户和普通用户免密登陆。 3、sys_securecmdd 工具秘钥协商在初始化、启动过程中自动完成;配置 ssh 免密请用 root 用户执行脚本 trust_cluster.sh,脚本会读取 install.conf 配置文件【install】标签下的内容,所以请先按要求配置 install.conf 文件。 注意: 在使用脚本配置 ssh 免密时,由于脚本是交互式的,在执行过程中需要用户输入必要信息。 7.5.2.1.2 操作系统配置约束 1、建议关闭防火墙,如果用户确认无法关闭防火墙,那么在防火墙添加数据库白名单,不同系统命令不同,数 据库端口默认 54321,HA-LOG 分析工具默认端口 65432,sys_securecmdd 工具默认端口 8890,请根据实际配置调 整。 2、其他操作系统配置约束请参考系统参数 章节进行配置。 7.5.2.1.3 文件及文件名约束 1、集群扩缩容所需要的所有文件需要已存在设备上,且 install.conf 文件、cluster_install.sh、trust_cluster.sh 都需要在同一设备的同一目录下,需安装数据库后获取对应文件,以下是集群扩缩容所需要的所有文件: (仅扩容需要)用户单独准备 license.dat 授权文件 (仅扩容需要)从安装目录/ClientTools/guitools/DeployTools/zip/下获取 服务器压缩包 db.zip 一键部署脚本 cluster_install.sh 配置文件 install.conf 配置 SSH 免密脚本 trust_cluster.sh 80 第7章 日常运维管理 注意: 这里的 db.zip 也可以换成用户自行压缩的其他形式的压缩包,在” 安装目录/Server/” 下将 bin、lib、share 三 个目录做成压缩包,支持 zip、tar、tar.gz 三种格式的压缩包;压缩包解压后的目录应该和 db.zip 保持一致。 2、扩容支持配置 1 个 license,若集群设备上的 license 不能复用于多个设备且需要多次扩容,每次扩容则请在 license_file 参数填入不同 license 的文件名,如果 license 文件可以复用,则可以使用同样 license。需要注意的是,如 果集群 license 不可复用,所有节点扩容使用相同 license,那么在扩容过程中可能因为 license 问题无法启动数据库而 扩容失败,同理,net_device 的配置也仅支持配置一个。 3、集群设置 virtual_ip 时,必须保证其子网掩码长度与网卡 net_device 的子网掩码长度一致;网卡 net_device 上必须已有 IP,此 IP 需要配置在 net_device_ip 中。 4、扩容节点不支持用户配置数据库 data 目录的路径,data 目录自动从已有集群获取。 7.5.2.1.4 扩缩容执行约束 1、执行脚本的操作扩容时只能在需要扩容的机器上执行,缩容时只能在集群主机上或者集群需要缩容的机器上 执行,通用机需用普通用户执行脚本。 2、配置文件中所有要求写路径的参数都必须是绝对路径,不支持相对路径。 3、扩容时 license_file 参数只需写 license 文件名即可,无需写路径。 4、脚本支持使用非 22 端口进行 ssh 连接,如果想要修改 ssh 连接端口,除了更改配置文件 install.conf 之外, 还需修改系统/etc/ssh/sshd_config 文件中的 Port 项,然后重启 sshd 服务才能正常扩缩容集群。修改系统文件以及 重启 sshd 服务均需要使用 root 用户执行。 5、脚本支持使用非 8890 端口进行 scmd 连接,如果想要修改 scmd 连接端口,除了更改配置文件 install.conf 之外还需修改系统 install_dir /share 目录 sys_HAscmdd.conf 文件中的 scmd_port 项,然后使用 systemctl stop securecmdd 命令停止已有 secure_cmdd 服务,再以 root 权限使用命令 install_dir/bin/sys_HAscmdd.sh init/start 初始化和启动 secure_cmdd 服务。 7.5.2.2 专用机约束 7.5.2.2.1 操作系统配置约束 同通用机操作系统约束。 7.5.2.2.2 扩缩容执行约束 1、执行脚本的操作扩容时只能在需要扩容的机器上执行,缩容时只能在集群主机上或者集群需要缩容的机器上 执行,专用机需用 root 用户执行脚本。 2、专用机扩缩容集群之前,请确保所有设备的 sys_securecmdd 处于启动状态。 3、配置文件中所有要求写路径的参数都必须是绝对路径,不支持相对路径。 81 第7章 日常运维管理 4、在已经成功缩容集群后,如果需要在同一个节点再次扩容节点,同样请先移除原有的 archive 目录、log 目 录、data 目录下的所有内容。 7.5.3 集群配置说明 7.5.3.1 扩缩容配置文件 install.conf 配置 提供 install.conf 配置文件用于配置集群扩缩容所需参数,提供参数如下: 表 7.5.1: install.conf 配置文件 [expand] 标签下参数 参数名称 expand_type 默认值/建议值 备注 必须配置,说明需要扩容的数据库节点类型,0 表示为 standby 节点,1 表示为 witness 节点。 primary_ip 必须配置,说明需要扩容的集群的主节点 IP, 可以配置 IPv4 或 IPv6 地址。 expand_ip 必须配置,说明需要扩容的节点的 IP, 可以配置 IPv4 或 IPv6 地址。 node_id 必须配置,说明扩容加入集群后的节点的序号。 install_dir 必须配置,说明扩容节点对应的安装目录路径,该路径 在待扩容节点需是一个不存在的目录,且该安装目录需 与原集群保持一致,专用机不需要配置,字符串不能以 / 字符结尾 zip_package 必须配置,说明压缩包的路径,专用机和手动分发压缩 包不需要配置 net_device 可选配置,若配置了 [virtual _ip],则此参数必须配 置,值为 VIP 所在网卡的网卡名称,仅需配置单个。 net_device_ip 可选配置,若配置了 [virtual_i p],则此参数必须配 置,值为 VIP 所在网卡的物理 IP 地址,仅需配置单 个。 因为 [virtual_ip] 只能配置为 IPv4,此参数也必须配置 为 IPv4。n et_device_ip 可以是 VIP 所在网卡的物理 ip 地址列表中的任何一个,默认为第一个,且不区分虚 拟 IP 与物理 IP。 license_file 必须配置,说明 license 文件的名字,仅需配置一个。 见续表 82 第7章 日常运维管理 表 7.5.1 – 续表 参数名称 默认值/建议值 备注 deploy_by_sshd 0 可选配置,扩容方式。通用机是否通过 sshd 服务对集 群扩容。在专用机上不能通过 sshd 服务扩容(值为 0) ssh_port 22 可选配置,指定 sshd/ssh 连接端口,默认 22。 scmd_port 8890 可选配置,指定 sys_securecmdd/sy s_securecmd 连接 端口,默认为 8890。 表 7.5.2: install.conf 配置文件 [shrink] 标签下参数 参数名称 默认值/建议值 备注 必须配置,说明需要缩容的数据库节点类型,0 表示为 shrink_type standby 节点,1 表示为 witness 节点。 必须配置,说明需要缩容的集群的主节点 IP, 可以配置 primary_ip IPv4 或 IPv6 地址。 必须配置,说明需要缩容的节点的 IP, 可以配置 IPv4 或 shrink_ip IPv6 地址。 必须配置,说明需要缩容的节点在集群中的节点的序 node_id 号。 必须配置,说明缩容节点对应的安装目录路径,该路径 install_dir 需是一个存在的目录,专用机不需要配置,字符串不能 以 / 字符结尾。 ssh_port 22 可选配置,指定 sshd/ssh 连接端口,默认 22。 scmd_port 8890 可选配置,指定 sys_securecmdd /sys_securecmd 连接 端口,默认为 8890。 83 第7章 7.5.4 集群扩缩容操作步骤及示例 7.5.4.1 通用机扩缩容 日常运维管理 7.5.4.1.1 操作步骤--通过 SSHD 服务自动分发文件并扩缩容 注意: 通用机环境【可以使用 SSHD 服务并且可以通过 SSH 免密登陆 root 用户】可以使用此方式扩缩容集群。 扩容: 1、检查数据库已有集群状态正常 2、获取集群扩容所需文件 检测到原集群状态正常后,需获取原集群安装目录/ ClientTools/ guitools/ DeployTools/ zip/下的:服 务器压缩包 db.zip、一键部署脚本 cluster_install.sh、配置文件 install.conf、配置 SSH 免密脚本 trust_cluster.sh ;然后需要用户单独准备 license.dat 授权文件使用集群安装用户在扩容节点新建文 件夹 r6_install,将压缩包 db.zip、脚本文件 cluster_install.sh、配置文件 install.conf、免密配置脚本 trust_cluster.sh、license 文件上传至 r6_install,需注意文件权限属主需为集群安装用户。 使用集群安装用户在扩容节点新建文件夹 r6_install,将压缩包 db.zip、脚本文件 cluster_install.sh、配 置文件 install.conf、免密配置脚本 trust_cluster.sh、license 文件上传至 r6_install,需注意文件权限属主 需为集群安装用户。 3、配置 install.conf 编辑 install.conf 配置文件,参见扩容配置文件 install.conf 配置,进行相关参数配置。如需修改 ssh 连接 端口,先修改 install.conf 文件中 ssh_port 项的值,然后修改系统/etc/ssh/sshd_config 文件中的 Port 项 的值,最后需要重启 sshd 服务。 4、SSH 免密配置 使用 trust_cluster.sh 进行 SSH 免密配置,免密配置后,请验证即将要扩容集群的所有设备的 root 用户 和普通用户之间的免密是否配置正确。 5、集群扩容 集群部署用户执行 sh cluster_install.sh expand 命令进行集群扩容,脚本将按照配置自动完成集群扩容工 作。 6、扩容后检查 扩容成功后,请去到主库或扩容的备库所在节点的集群目录(通用机 install_dir)下,执行命令”repmgr cluster show”,确认是否真正成功扩容集群。 缩容: 1、检查数据库已有集群状态正常 2、获取集群缩容所需文件 84 第7章 日常运维管理 3、检测到原集群状态正常后,需获取如下文件: 原集群部署目录/bin/下的一键部署脚本 cluster_install.sh 原集群部署目录/bin/下的配置文件 install.conf 配置 install.conf 4、编辑 install.conf 配置文件,参见缩容配置文件 install.conf 配置,进行相关参数配置。如需修改 ssh 连接端 口,先修改 install.conf 文件中 ssh_port 项的值,然后修改系统/etc/ssh/sshd_config 文件中的 Port 项的值,最后需 要重启 sshd 服务。 5、集群缩容 集群部署用户执行 sh cluster_install.sh shrink 命令进行集群缩容,脚本将按照配置自动完成集群缩容工 作。 6、缩容后检查 缩容成功后,请去到主库所在节点的集群目录(通用机 install_dir)下,执行命令” repmgr cluster show”,确认是否真正成功缩容集群。 7.5.4.1.2 扩缩容示例--通过 SSHD 服务自动分发文件并扩缩容 扩容: 1、准备集群设备 A、B,待扩容节点 C,IP 分别为 192.168.28.126、192.168.28.127、192.168.28.128。 2、确保原集群状态正常。 3、在安装目录/Server/bin 目录下找到 cluster_install.sh、install.conf 文件。 4、请确认是否有变量需要更改,包括文件名是否正确、数据库参数是否需要修改等。 5、由于专用机安装后会自动启动数据库,所以首先执行 ps -ef|grep kingbase 查看是否有数据库在运行,如果 有,将数据库停掉,检查 C 设备,同时移除主备机原有 data 目录。 6、执行 ps -ef|grep sys_securecmdd 查看 sys_securecmdd 是否处于启动状态,如果没有,请执行命令 /opt/ Kingbase/ES/V9/Server/bin/sys_HAscmdd.sh init 和/opt/Kingbase/ES/V9/Server/bin/sys_HAscmdd.sh start 启 动 sys_securecmdd。A,B 和 C 设备都要检查。 7、在设备 C 上的/opt/Kingbase/ES/V9/Server/bin 目录下,使用 root 用户执行 sh cluster_install.sh expand 命令。 8、集群扩容完成。 9、去到集群安装目录即/opt/Kingbase/ES/V9/Server/bin 目录下连接数据库,执行命令”/opt/Kingbase/ES/ V9/Server/bin/repmgr cluster show” 查看集群是否正常。 [expand] expand_type='1' primary_ip='192.168.28.126' expand_ip='192.168.28.128' 85 第7章 日常运维管理 license_file='license.dat-t' zip_package="/home/kingbase/r6_install/db.zip" node_id='3' install_dir="/home/kingbase/cluster/shrinkandexpand" scmd_port="8890" ssh_port="22" net_device=(ens192) net_device_ip=(192.168.28.128) deploy_by_sshd=1 缩容: 1、准备集群设备 A、B,待缩容节点 C,IP 分别为 192.168.28.126、192.168.28.127、192.168.28.128。 2、确保已经安装专用机数据库,请使用专门的包管理器进行安装。 3、在安装目录/Server/bin 目录下找到 cluster_install.sh、install.conf 文件。 4、请确认是否有变量需要更改,包括文件名是否正确、数据库参数是否需要修改等。 5、执行 ps -ef|grep sys_securecmdd 查看 sys_securecmdd 是否处于启动状态,如果没有,请执行命令 /opt/ Kingbase/ES/V9/Server/bin/sys_HAscmdd.sh init 和/opt/Kingbase/ES/V9/Server/bin/sys_HAscmdd.sh start 启 动 sys_securecmdd。A,B 和 C 设备都要检查。 6、在设备 A/C 上的/opt/Kingbase/ES/V9/Server/bin 目录下,使用 root 用户执行 sh cluster_install.sh shrink 命令。 7、集群缩容完成。 8、去到集群安装目录即/opt/Kingbase/ES/V9/Server/bin 目录下连接数据库,执行命令”/opt/Kingbase/ES/ V9/Server/bin/repmgr cluster show” 查看集群是否正常。 install.conf 参数配置示例: [shrink] shrink_type='1' primary_ip='192.168.28.126' shrink_ip='192.168.28.128' node_id='3' install_dir="/home/kingbase/cluster/shrinkandexpand" scmd_port="8890" ssh_port="22" 7.5.4.1.3 操作步骤--手动分发文件并扩缩容 注意: 通用机环境【无法使用 SSHD 服务,或者无法通过 SSH 免密登陆 root 用户】可以使用此方式扩缩容集群。 86 第7章 日常运维管理 扩容: 1、准备扩容原集群,集群中有 A、B、C 三节点,A 为主节点,B 为 standby 节点,C 为集群外待扩容节点,IP 分别为 192.168.28.126、192.168.28.127、192.168.28.128。 2、获取集群扩容所需文件,从集群安装目录/ClientTools/guitools/DeployTools/zip/目录下获取如下文件: db.zip cluster_install.sh install.conf 用户需要单独准备 license.dat 授权文件并上传,使用集群用户(操作系统用户,例如:kingbase),在待 扩容节点 C 创建 $install_dir/ kingbase 目录(install_dir 是集群安装路径,后续会配置在 install.conf 中),并将 db.zip 和 license.dat 拷贝到每个节点的 $install_dir/kingbase 目录下。在 $install_dir/kingbase 目录下解压 db.zip,并将 license.dat 拷贝到解压后出现的 $install_dir/kingbase/bin 目录下。需注意 文件权限属主需为集群部署用户。 3、启动 sys_securecmdd 使用 root 用户在每个节点执行 $install_dir/kingbase/bin/sys_HAscmdd.sh init 和 $install_dir/kingbase/ bin/sys_HAscmdd.sh start 来启动 sys_securecmdd。 4、配置 install.conf 编辑 $install_dir/kingbase/bin/install.conf 配置文件,参见扩容配置文件 install.conf 配置,进行相关参 数配置。 5、集群扩容 扩容节点上集群部署用户执行 sh cluster_install.sh expand 命令进行集群扩容,一键部署脚本将按照配置 自动完成集群扩容工作。 6、扩容后检查 扩容成功后,请在主库 (A 节点) 或扩容的备库(C 节点)所在节点的集群目录(通用机 install_dir)下, 执行命令”install_dir/bin/repmgr cluster show”,确认是否真正成功扩容集群。 install.conf 参数配置示例: [expand] expand_type='1' primary_ip='192.168.28.126' expand_ip='192.168.28.128' license_file='license.dat-t' zip_package="" node_id='3' install_dir="/home/kingbase/cluster/shrinkandexpand" scmd_port="8890" ssh_port="22" net_device=(ens192) 87 第7章 日常运维管理 net_device_ip=(192.168.28.128) deploy_by_sshd=0 缩容: 1、准备扩容原集群,集群中有 A、B、C 三节点,A 为主节点,B 为 standby 节点,C 为集群内待缩容节点,IP 分别为 192.168.28.126、192.168.28.127、192.168.28.128。 2、获取集群缩容所需文件需获取如下文件 待缩容节点上安装目录下 bin 目录中的 cluster_install.sh 待缩容节点上安装目录下 bin 目录中的 install.conf 3、启动 sys_securecmdd 使用 root 用户在每个节点执行 $install_dir/kingbase/bin/sys_HAscmdd.sh init 和 $install_dir/kingbase/ bin/sys_HAscmdd.sh start 来启动 sys_securecmdd。 4、配置 install.conf 编辑 $install_dir/kingbase/bin/install.conf 配置文件,参见缩容配置文件 install.conf 配置,进行相关参 数配置。 5、集群缩容 集群部署用户执行 sh cluster_install.sh shrink 命令进行集群缩容,一键部署脚本将按照配置自动完成集 群缩容工作。 6、缩容后检查 缩容成功后,请到 C 节点安装目录(通用机 install_dir)下,执行”repmgr cluster show”,确认是否真正 成功缩容集群。 install.conf 参数配置示例: [shrink] shrink_type='1' primary_ip='192.168.28.126' shrink_ip='192.168.28.128' node_id='3' install_dir="/home/kingbase/cluster/shrinkandexpand" scmd_port="8890" ssh_port="22" 7.5.4.2 专用机扩缩容 7.5.4.2.1 操作步骤 1、检查数据库已有集群状态正常 88 第7章 日常运维管理 2、获取集群扩缩容所需文件. 确认原集群已经安装成功,需确认如下文件: 安装目录/Server/bin/下的一键部署脚本 cluster_install.sh 安装目录/ Server/ bin/下的脚本 trust_server.sh(仅扩容需要)安装目录/ Server/ bin/下的配置文件 install.conf 3、每个节点初始化并启动 sys_securecmdd 执行命令 /opt/Kingbase/ES/V9/Server/bin/sys_HAscmdd.sh init 和/opt/Kingbase/ES/V9/Server/bin/ sys_HAscmdd.sh start 启动 sys_securecmdd。 4、配置 install.conf 在” 安装目录/Server/bin/” 目录下编辑 install.conf 配置文件,进行相关参数配置。 5、集群扩缩容 移除扩容节点原有的 data 目录后,集群部署用户在 /opt/Kingbase/ES/V9/Server/bin/目录下执行 sh cluster_install.sh expand/shrink 命令进行集群缩容,一键部署脚本将按照配置自动完成集群缩容工作。 6、缩容后检查 去到主库所在节点的集群目录(专用机/opt/Kingbase/ES/V9/Server/bin 目录)下,执行对应的命令, 确认是否真正成功缩容集群,即执行命令”/opt/Kingbase/ES/V9/Server/bin/repmgr cluster show”。 7.5.4.2.2 扩缩容示例 扩容: 1、准备集群设备 A、B,待扩容节点 C,IP 分别为 192.168.28.126、192.168.28.127、192.168.28.128。 2、确保原集群状态正常。 3、在安装目录/Server/bin 目录下找到 cluster_install.sh、install.conf 文件。 4、请确认是否有变量需要更改,包括文件名是否正确、数据库参数是否需要修改等。 5、由于专用机安装后会自动启动数据库,所以首先执行 ps -ef|grep kingbase 查看是否有数据库在运行,如果 有,将数据库停掉,检查 C 设备,同时移除主备机原有 data 目录。 6、执行 ps -ef|grep sys_securecmdd 查看 sys_securecmdd 是否处于启动状态,如果没有,请执行命令 /opt/ Kingbase/ES/V9/Server/bin/sys_HAscmdd.sh init 和/opt/Kingbase/ES/V9/Server/bin/sys_HAscmdd.sh start 启 动 sys_securecmdd。A,B 和 C 设备都要检查。 7、在设备 C 上的/opt/Kingbase/ES/V9/Server/bin 目录下,使用 root 用户执行 sh cluster_install.sh expand 命令。 8、集群扩容完成。 9、去到集群安装目录即/opt/Kingbase/ES/V9/Server/bin 目录下连接数据库,执行命令”/opt/Kingbase/ES/ V9/Server/bin/repmgr cluster show” 查看集群是否正常。 89 第7章 日常运维管理 [expand] expand_type="1" primary_ip="192.168.28.126" expand_ip="192.168.28.128" node_id="3" install_dir="" zip_package="" net_device=(ens192) net_device_ip=(192.168.28.128) license_file=(license.dat) deploy_by_sshd="0" ssh_port="22" scmd_port="8890" 缩容: 1、准备集群设备 A、B,待缩容节点 C,IP 分别为 192.168.28.126、192.168.28.127、192.168.28.128。 2、确保已经安装专用机数据库,请使用专门的包管理器进行安装。 3、在安装目录/Server/bin 目录下找到 cluster_install.sh、install.conf 文件。 4、请确认是否有变量需要更改,包括文件名是否正确、数据库参数是否需要修改等。 5、执行 ps -ef|grep sys_securecmdd 查看 sys_securecmdd 是否处于启动状态,如果没有,请执行命令 /opt/ Kingbase/ES/V9/Server/bin/sys_HAscmdd.sh init 和/opt/Kingbase/ES/V9/Server/bin/sys_HAscmdd.sh start 启 动 sys_securecmdd。A,B 和 C 设备都要检查。 6、在设备 A/C 上的/opt/Kingbase/ES/V9/Server/bin 目录下,使用 root 用户执行 sh cluster_install.sh shrink 命令。 7、集群缩容完成。 8、去到集群安装目录即/opt/Kingbase/ES/V9/Server/bin 目录下连接数据库,执行命令”/opt/Kingbase/ES/ V9/Server/bin/repmgr cluster show” 查看集群是否正常。 install.conf 参数配置示例: [shrink] shrink_type="1" primary_ip="192.168.28.126" shrink_ip="192.168.28.128" node_id="3" install_dir="" ssh_port="22" scmd_port="8890" 90 第7章 日常运维管理 7.5.4.2.3 补充说明 1、脚本在线扩容缩容暂未集成两地三中心功能。 2、扩容失败时,原集群数据节点数据不受影响,脚本退出后,再次扩容时,根据脚本提示进行操作即可。 3、缩容由于备库挂掉,而失败时,保留复制槽,此时数据库不可用,复制槽同样不可用,对读写分离集群功能 不影响。 7.6 VIP 管理 包括状态查看,添加删除 vip。构造模拟 vip 不在集群节点的情景等(对应 10.4—10.5). 一键启动集群添加加 VIP 是否成功 ** 在一键启动集群时,会检测当前所配置的虚拟 IP 是否合法,包括 IP 格式是否正确,是否已经存在于其他设备 上;如果发现虚拟 IP 不可用,则会报错退出。 下面是针对此场景进行的简单模拟: 将集群 VIP 添加到其他集群外设备上,构造集群主机添加 VIP 失败情景: 启动集群失败,报错退出: 91 第7章 日常运维管理 手动添加删除 VIP # 添加 VIP kbha -A loadvip kbha -A arping # 删除 VIP kbha -A unloadvip 所有节点连接测试 ping VIP 是否成功 在一键启动集群时,除了检测虚拟 IP 是否可用外,在主机成功添加虚拟 IP 后,会对该 IP 进行连接测试,如果 在所设置的时间内无法 ping 通虚拟 IP,则集群启动失败,报错退出。 7.7 主备库的数据检查 LSN,即日志序列号,是 WAL 日志的全局唯一标识。 在一键启动集群时,会通过 LSN 检测当前主机与备机之间的数据差异,如果主备机之间的数据差异超过所设置 的阈值(默认为 16MB),则集群启动失败,报错退出。 下面是针对此场景进行的简单模拟: 停止集群,启动主机 DB,ksql 连接主机数据库,将集群同步模式改为异步模式: 92 第7章 日常运维管理 图 7.7.1: 集群同步模式改为异步模式 在主库中插入大量数据: 图 7.7.2: 主库中插入大量数据 启动集群失败,报错退出: 93 第7章 日常运维管理 图 7.7.3: 启动集群失败,报错退出 7.8 主备库的连接检查 在一键启动集群时,当备库无法连接主库时,也会导致集群启动失败,报错退出。 下面是针对此场景进行的简单模拟: 停止集群,删除主库复制槽: 图 7.8.1: 停止集群,删除主库复制槽 启动集群失败,报错退出: 94 第7章 日常运维管理 图 7.8.2: 启动集群失败,报错退出 7.9 集群同异步一致性 在一键启动集群时,会检查配置文件 repmgr.conf 中 synchronous 的值与执行 SQL 语句“show synchronous_standby_names;”得到的值是否一致,如果不一致,则将会更改集群的同异步模式,使其与配置文件保持 一致。 95 第7章 日常运维管理 图 7.9.1: 集群同异步一致性 7.10 一键修改密码 集群部署完成后,会新增集群专属的数据库用户 esrep: • esrep,普通用户(继承角色 kcluster),默认密码 Kingbaseha110,集群部署过程中创建的用户,专门用于集群 同时,在集群部署完成后,会有文件保存数据库用户 esrep 的密码: • ~/.encpwd,数据库免密文件,加密保存 esrep 用户的密码,集群中的守护进程、命令行工具或其他应用在集群 节点使用 esrep 用户连接数据库时,默认使用此文件中的密码。 注意: 以上文件每个节点都有一份,所有节点的同名文件内容都相同。 在修改集群用户(esrep)密码时,需要同步修改以上密码文件,才能保证集群部分功能能够正常使用。 KingbaseES 提供了命令工具以便一键修改数据库密码和对应的密码文件: 7.10.1 sys_monitor.sh change_password $ {superuser} $ {supe- ruser_password} ${esrep_password} sys_monitor.sh change_password ${superuser} ${superuser_password} ${esrep_password} —修改集群使用的 用户的密码 96 第7章 7.10.1.1 日常运维管理 描述 该命令行工具只能修改 esrep 用户的密码,并且需要用户提供数据库超级用户和密码来修改 esrep 用户的密码。 如果提供的用户不是超级用户,则提示”Current user $superuser is not superuser, will do nothing and exit.” 7.10.1.2 选项 change_password 脚本调用修改用户密码函数,固定传此字符串。 ${superuser} 数据库超级用户名,此用户有权限可以修改 esrep 用户的密码。 ${superuser_password} 超级用户的密码。 ${esrep_password} esrep 用户的新密码。 7.10.1.3 示例 [kingbase@28-125-HA05 /home/kingbase/cluster/test/kingbase]$ ./bin/sys_monitor.sh change_password system '12345678ab' 'kingbase123456' ID | Name | Role | Status | Upstream | Location | Priority | Timeline | LSN_Lag | Connection string ----+-------+---------+-----------+----------+----------+----------+----------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------1 | node1 | primary | * running | | default | 100 | 1 | | host=10.10.11.125 user=esrep dbname=esrep port=4444 connect_timeout=10 keepalives=1 keepalives_idle=2 keepalives_interval=2 keepalives_count=3 tcp_user_timeout=9000 sslmode=require 2 | node2 | standby | running | node1 | default | 100 | 1 | 0 bytes | host=10.10.11.126 user=esrep dbname=esrep port=4444 connect_timeout=10 keepalives=1 keepalives_idle=2 keepalives_interval=2 keepalives_count=3 tcp_user_timeout=9000 sslmode=require ALTER ROLE There is no witness node in cluster. [kingbase@28-125-HA05 /home/kingbase/cluster/test/kingbase]$ 7.10.1.4 注意事项 1. 必须在集群所有节点状态正常的情况下才能执行修改密码操作。 97 第7章 日常运维管理 2.【sys_monitor.sh change_password ${superuser} ’${superuser_password}’ ’${esrep_password}’】使用一键修 改密码功能时,如果密码中有特殊字符,密码参数必须使用单引号” 括起来。 3. 只能修改集群使用的数据库用户 esrep 的密码。 7.11 一键修改集群参数 7.11.1 sys_monitor.sh set/set --restart sys_monitor.sh set/set --restart —一键修改集群配置和数据库配置 7.11.1.1 描述 sys_monitor.sh set 脚本读取配置文件 set_repmgr.conf 和 set_db.conf 中的配置,分别修改集群配置文件 repmgr.conf 和集群中数据库配置文件 es_rep.conf。 7.11.1.2 使用 在 ${集群目录}/etc 目录下配置 set_repmgr.conf,该配置文件中设置参数,修改集群 repmgr.conf 文件: 图 7.11.1: 修改集群 repmgr.conf 文件 在 ${集群目录}/etc 目录下配置 set_db.conf,该配置文件中设置参数,修改集群中所有数据库的 es_rep.conf 文 件: 图 7.11.2: 修改集群 es_rep.conf 文件 7.11.1.3 选项 以下是脚本执行参数: set 脚本调用修改集群和数据库配置函数,固定传此字符串。 98 第7章 日常运维管理 set --restart 脚本调用修改集群和数据库配置函数, 并重启集群。如果修改的参数必须重启数据库才能生效时,使用该 项 图 7.11.3: 一键修改集群配置和数据库配置 图 7.11.4: 一键修改集群配置和数据库配置 7.11.1.4 注意事项 1. 必须在集群所有节点状态正常的情况下才能执行修改参数操作。 99 第7章 日常运维管理 2.set_db.conf 配置要求: 不可以配置 port 参数 不可以配置 kingbase.conf 中没有的参数 不可以给参数配置错误的值 3.set_repmgr.conf 配置要求: 不建议修改路径相关和数据库连接串等参数;建议仅修改以下参数: reconnect_attempts reconnect_interval recovery trust_servers 7.12 控制文件多路备份配置 7.12.1 介绍 KingbaseES 数据库控制文件至关重要,它关系到数据库能否正常启动,数据是否会丢失等问题。因此开发控制 文件多副本功能,用以备份数据库控制文件,保证数据库的高可用性。 7.12.2 配置参数说明 • 参数名称:control_file_copy • 参数所在配置文件:kingbase.conf • 如果当前是集群环境,也可以配置在 es_rep.conf 文件中 7.12.3 使用约束 修改参数前,请仔细阅读以下约束。 • 参数支持配置成相对路径、绝对路径两种方式,当为相对路径时,会默认将该相对路径存放在 data 目录下; • 参数值不能仅仅只是目录,后面必须跟文件名; • 参数值不能是当前用户没有权限的路径; • Windows 平 台 参 数 值 内 的 目 录 分 隔 符 支 持 正 斜 杠 (/) 字 符, 若 使 用 反 斜 杠 (\) 字 符 则 需 要 转 义 (C: \\backup\\sys_control); • Windows 平台,若参数值含有中文,则需要将 kingbase.conf 改为 ANSI 编码方式; 100 第7章 日常运维管理 • 最多只能配置 8 个控制文件副本,超过 8 个则默认只保留前 8 个; • 如果在数据库启动状态修改该参数,则需要重启数据库,新的副本文件才能生效; • 控制文件的副本名长度不能超过系统创建文件名的最大字节,否则会报错; • 所配置的控制文件副本名成不能是当前路径下已存在的目录名; • 控制文件多副本参数 control_file_copy=’’,其等号后面的内容(路径和文件名)都必须使用单引号括起 来。 7.12.4 参数配置操作步骤及示例 7.12.4.1 操作步骤 7.12.4.1.1 单机数据库操作步骤 • 初始化数据库; • 打开 data/kingbase.conf 文件; • 按照要求修改 control_file_copy 的值,重启数据库; • 使用 md5sum 命令对比副本文件与原控制文件是否一致; • 若因控制文件错误导致数据库启动失败,可将原控制文件备份或移除,后将副本文件拷贝到原控制文件的路径 下并与原控制文件保持同名,替换完成后重新启动数据库即可。 7.12.4.1.2 集群操作步骤 • 部署集群; • 打开主机 data/es_rep.conf 文件; • 按照要求在文件中新增一行 control_file_copy 的值,重启集群; • 使用 md5sum 命令对比副本文件与原控制文件是否一致; • 若因控制文件错误导致集群启动失败,可将原控制文件备份或移除,后将副本文件拷贝到原控制文件的路径下 并与原控制文件保持同名,替换完成后重新启动集群即可。 7.12.4.2 7.12.4.2.1 操作示例 单机数据库操作示例 • 初始化数据库: 101 第7章 日常运维管理 图 7.12.1: 初始化数据库 • 打开 kingbase.conf 文件,修改参数值: 图 7.12.2: 修改参数值 • 启动数据库: 102 第7章 日常运维管理 图 7.12.3: 启动数据库 • 由于配置的相对路径,查看 data 目录下是否生成对应文件: 图 7.12.4: 查看 data 目录下是否生成对应文件 • 使用 md5sum 命令对比控制文件副本与原控制文件,确认是否一致: 图 7.12.5: 对比控制文件副本与原控制文件 103 第7章 7.12.4.2.2 日常运维管理 集群操作示例 • 部署集群(可选择工具部署,或使用一键部署脚本部署,这里以脚本部署为例): 图 7.12.6: 部署集群 • 修改 data/es_rep.conf 文件: 图 7.12.7: 修改 data/es_rep.conf 文件 • 重启集群: 104 第7章 日常运维管理 图 7.12.8: 重启集群 • 由于配置的绝对路径,查看是否在所配置目录下生成该文件: 图 7.12.9: 查看是否在所配置目录下生成该文件 • 使用 md5sum 命令对比副本文件与原控制文件是否一致,Windows 平台可使用 certutil.exe 工具: 图 7.12.10: 对比副本文件与原控制文件是否一致 105 第7章 7.13 日常运维管理 一键检查数据库状态 在数据库运维过程中,需要定期的对数据库的环境进行检查,可以帮助用户减少数据库发生问题的概率。检查最 好以脚本形式实现,然后定期执行,减少运维难度。一键检查数据库状态脚本可以快速的检查数据库状态以及运行环 境,支持单机或者主备集群使用。 调用脚本时,使用 -D 参数指定数据库 data 目录,脚本会自动根据 data 目录来判断是单机还是集群。单机 只检查本机的状态,集群会检查所有节点(不包括 witness 节点)的状态。在检查过程中会连接数据库,单机使用 chk.conf 配置文件中配置的 kb_user 和 kb_database 进行连接,连接过程中需要手动输入密码。集群使用流复制用 户进行连接,不需要输入密码。 调用脚本时,如果没有传入 data 目录,则将跳过连接数据库的检查,仅检查本机的状态。 注意: 一键检查数据库状态脚本只支持 linux 通用机,只支持使用 bash 语言执行。 7.13.1 配置文件 配置文件 chk.conf,和一键检查数据库状态脚本一起存放在数据库的 bin 目录下,此配置文件中可以修改数据库 连接信息和参数建议信息。用户可以根据自己需要进行修改。 # general config ip_path="/usr/sbin" sysctl_path="/usr/sbin" tc_path="/usr/sbin" # database setting kb_user="system" # only single kingbase is effective kb_database="test" # only single kingbase is effective kb_port="54321" # only single kingbase is effective kb_data="" # kingbase data absolute path. kb_port_sshd="22" # ssh port # result save. result file will save into this path. result_save_path="" # unattended setting crond_month="*" # crontab rules must be observed crond_day="*" # crontab rules must be observed crond_dayofweek="*" # crontab rules must be observed crond_hour="0" # crontab rules must be observed crond_minute="0" # crontab rules must be observed # env parameters 106 第7章 reco_ulimit_n=655360 # ulimit -n recommended value reco_ulimit_u=655360 # ulimit -u recommended value reco_ulimit_l=50000000 # ulimit -l recommended value 日常运维管理 reco_ulimit_c=unlimited # ulimit -l recommended value # kernel setting reco_kernel_sem="5010 641280 5010 256" reco_fs_file_max="7672460" reco_fs_aio_max_nr="1048576" reco_net_core_rmem_default="262144" reco_net_core_rmem_max="4194304" reco_net_core_wmem_default="262144" reco_net_core_wmem_max="4194304" reco_net_ipv4_ip_local_port_range="9000 65500" reco_net_ipv4_tcp_wmem="8192 65536 16777216" reco_net_ipv4_tcp_rmem="8192 87380 16777216" reco_vm_min_free_kbytes="521000" reco_vm_vfs_cache_pressure="200" reco_vm_swappiness="20" reco_net_ipv4_tcp_max_syn_backlog="4096" reco_net_core_somaxconn="4096" # resource check reco_cpu_usage="70" # when >=70% , warning reco_mem_usage="70" # when >=70% , warning reco_mem_free_count="1024" # fixed in unit MB , when <1024, warning reco_disk_free_count="1024" # fixed in unit MB , when <1024, warning disk_space_check=() # directory absolute path. split with space. cannot wrap read_write_check=() # directory adsolute path. split with space. cannot wrap # config parameters reco_wal_level=replica reco_checkpoint_timeout=300 # 300s reco_max_wal_size=1024 # 1024 MB ## config parameters. only cluster will check reco_failover=automatic reco_recovery=standby reco_auto_cluster_recovery_level=1 reco_use_check_disk=on reco_max_standby_streaming_delay=30000 # 30000ms # check file cluster_file_in_home=(".es/accept_hosts" ".es/key_file") # relative path single_file_in_home=() # relative path 107 第7章 cluster_file_in_data=("global/sys_control") # relative path single_file_in_data=("global/sys_control") # relative path 日常运维管理 # database check reco_log_min_duration_statement=5 # default 5s. slow sql reco_dead_tup_rate=10 # 10% reco_dead_tup_count=1000 # when dead_tup > reco_dead_tup_count , the reco_dead_tup_rate will become effective reco_standby_replay_delay_time=0 # 0s. alarm when standby replay delay time great than reco_ standby_replay_delay_time reco_time_interval_with_last_checkpoint=300 # last checkpoint time and now time interval. if it great than 300s. alarm 7.13.2 使用及功能说明 7.13.2.1 使用 一键检查数据库状态的入口文件是 KBchk.sh。会自动根据传入的 data 目录判断当前环境是单机还是集群。单机 只检查本机,集群会检查所有能连接的节点。配置文件会自动在集群间自动同步。 usage: ./KBchk.sh options. options: -b: do physical backup validity check. -c: do config check. -d: do database check. -e: do environments check. -f: do files check. -k: do checksums check. -p: do process check. -r: do resources check. -D: input kingbase data. and do health check. -s: unattended setting. action contains [init | start | stop] 7.13.2.2 系统环境检查(-e) 可通过 KBchk.sh -e 调用 do_env_chk.sh 脚本检查系统环境,也可以直接调用 do_env_chk.sh 脚本。单独调用 do_env_chk.sh 进行检查时,无论传入的 data 是单机还是集群,只会检查当前节点。 usage: ./do_env_chk.sh options options: -D: kingbase data absolute path. 108 第7章 日常运维管理 检查项: 表 7.13.1: 系统环境检查项 检查项 推荐值 检查结果 备注 ulimit -n 655360 OK/WARN 单机/集群 ulimit -u 655360 OK/WARN 单机/集群 ulimit -l 50000000 OK/WARN 单机/集群 ulimit -c unlimited OK/WARN 单机/集群 kernel.sem 5010 OK/WARN 单机/集群 641280 5010 256 fs.file-max 7672460 OK/WARN 单机/集群 fs.aio-max-nr 1048576 OK/WARN 单机/集群 net.core.rmem_default 262144 OK/WARN 单机/集群 net.core_rmem_max 4194304 OK/WARN 单机/集群 net.core_wmem_default 262144 OK/WARN 单机/集群 net.core_wmem_max 4194304 OK/WARN 单机/集群 net.ipv4.ip_local_port_range 9000 65500 OK/WARN 单机/集群 net.ipv4.tcp_wmem 8192 OK/WARN 单机/集群 OK/WARN 单机/集群 65536 16777216 net.ipv4.tcp_rmem 8192 87380 16777216 vm.min_free_kbytes 521000 OK/WARN 单机/集群 vm.vfs_cache_pressure 200 OK/WARN 单机/集群 vm.swappiness 20 OK/WARN 单机/集群 net.ipv4.tcp_max_syn_backlog 4096 OK/WARN 单机/集群 net.core.somaxconn 4096 OK/WARN 单机/集群 tc qdisc show dev xxx fq_codel OK/WARN 集群 配置了 VIP 时才检查 见续表 109 第7章 日常运维管理 表 7.13.1 – 续表 检查项 推荐值 检查结果 备注 iptables off OK/WARN 单机/集群 firewalld off OK/WARN 单机/集群 ufw off OK/WARN 单机/集群 kingbase 端口 on (54321) OK/WARN 单机/集群 es_server 端口 on (8890) OK/WARN 集群 集群如果使用的是 es_server 或 securecmd 进 行通信,则检查对应的端口号是否被监听,默 认端口号为 8890,支持端口号被修改。 ssh 端口 on (22) OK/WARN 集群 集群如果使用的是 ssh 进行通信,则需要检查 ssh 端口号是否被监听,ssh 默认端口号为 22, 支持端口号被修改。 集群间免密配置 免密 OK/ERROR 集群 service 服务是否存在 存在 OK/WARN 单机/集群 凝思操作系统没有 service 服务 crontab 服务 存在 OK/WARN 集群 凝思操作系统没有 / etc/ cron.d 目录,需要使 用/etc/crontab 7.13.2.3 物理备份检查(-b) 可通过 KBchk.sh -b 调用 do_backup_chk.sh 脚本检查是否配置了物理备份和物理备份的有效性,也可以直接调 用 do_backup_chk.sh 脚本。单独调用 do_backup_chk.sh 进行检查时,无论传入的 data 是单机还是集群,只会检 查当前节点。 usage: ./do_backup_chk.sh options options: -D: kingbase data absolute path. 检查项: 110 第7章 7.13.2.4 检查项 推荐值 检查结果 是否配置了 sys_rman 已配置 OK/ERROR 单机/集群 备份集有效性 OK/ERROR 单机/集群 日常运维管理 备注 配置参数检查(-c) do_config_chk.sh 脚本检查数据库配置文件,可通过 KBchk.sh -c 调用,也可以单独调用。单独调用 ‘do_config_chk.sh‘进行检查时,无论传入的 data 是单机还是集群,只会检查当前节点。 usage: ./do_config_chk.sh options options: -D: kingbase data absolute path. 检查项: 表 7.13.2: 配置参数检查项 检查项 推荐值 检查结果 备注 是否配置了 sys_rman 已配置 OK/ERROR 单机/集群 logrotate kbha.log 已配置 OK/ERROR 集群 检查/etc/logr otate.d/kingbase logrotate hamgr.log 已配置 OK/ERROR 集群 检查/etc/logr otate.d/kingbase 归档 已配置 OK/WARN 单机/集群 wal_level replica OK/WARN 单机/集群 full_page_writes on OK/WARN 单机/集群 checkpoint_timeout 5min OK/WARN 单机/集群 max_wal_size 1GB OK/WARN 单机/集群 failover automatic OK/WARN 集群 recovery standby OK/WARN 集群 auto_cluster_recovery_level 1 OK/WARN 集群 use_check_disk on OK/WARN 集群 见续表 111 第7章 日常运维管理 表 7.13.2 – 续表 检查项 推荐值 检查结果 备注 max_standby_streaming_delay 0 OK/WARN 集群 trust_server 已配置/能 ping OK/ERROR 集群 OK/WARN 集群 通 能 ping 通 VIP vip 只能在主节点上 7.13.2.5 数据库健康检查(-d) do_database_chk.sh 脚 本 检 查 数 据 库 状 态, 可 通 过 KBchk.sh -d 调 用, 也 可 以 单 独 调 用。 单 独 调 用 ‘do_database_chk.sh‘进行检查时,无论传入的 data 是单机还是集群,只会检查当前节点。data 是单机还是集 群,只会检查当前节点。 usage: ./do_database_chk.sh options options: -D: kingbase data absolute path. 检查项: 7.13.2.6 检查项 推荐值 检查结果 备注 表和索引膨胀 正常 OK/WARN 单机/集群 距离上次 checkpoint 有多久时间 正常 OK/WARN 单机/集群 数据库时间和本地时间/时区是否统一 正常 OK/WARN 单机/集群 备库 WAL 日志应用是否有延迟 正常 OK/WARN 集群 复制槽检查 正常 OK/ERROR 单机/集群 慢 SQL 无 OK/WARN 单机/集群 文件检查(-f) do_file_chk.sh 脚本检查文件是否存在,文件权限是否正确等。可通过 KBchk.sh -f 调用,也可以单独调用。单 独调用 ‘do_file_chk.sh‘进行检查时,无论传入的 data 是单机还是集群,只会检查当前节点。可通过修改 chk.conf 中 的配置增减需要检查的文件。 112 第7章 usage: 日常运维管理 ./do_file_chk.sh options options: -D: kingbase data absolute path. 检查项: 表 7.13.3: 文件检查项 检查项 推荐值 检查结果 备注 控制文件副本 存在 OK/WARN 单机/集群 es_server 密钥文件 存在 OK/WARN 集群 license 文件 存在 OK/ERROR 单机/集群 控制文件 存在 OK/ERROR 单机/集群 配 置 的 存在 OK/ERROR 集群 repmgr.conf 配置的 sys_bindir 存在 OK/ERROR 集群 repmgr.conf 配置的 ping_path 存在 OK/ERROR 集群 repmgr.conf data_directory 如果配置了 ping_path 则检查配置的值,如果 没有配置则检查/bin 目录下是否存在 ping 可执 行程序,权限是否正确(kingbase 用户是否有 执行权限) repmgr.conf 配 置 的 存在 OK/ERROR 集群 如果配置了 ipaddr_path 则检查配置的值,如 ipaddr_path 果没有配置则检查/sbin 目录下是否存在 ip 可 执行程序,权限是否正确(kingbase 用户有执 行权限,需要有 u+s 权限) repmgr.conf 配置的 arp- 存在 OK/ERROR 集群 1. 配置了 virtual_ip 才需要检查 arping_path ing_path 2. 如果配置了 ipaddr_path 则检查配置的值 3. 如果没有配置则检查/ usr/ sbin 目录下是否 存在 arping 可执行程,序权限是否正确(kingbase 用户有执行权限,需要有 u+s 权限) 归档进度 正常 OK/WARM 单机/集群 如果配置了归档, 则检查归档是否完成 见续表 113 第7章 日常运维管理 表 7.13.3 – 续表 检查项 推荐值 检查结果 备注 sys_wal 目录大小 正常 OK/WARM 单机/集群 在某些情况下 sys_wal 的文件数量会超过配置 的数量,输出告警信息 7.13.2.7 校验和检查(-k) do_checksum_chk.sh 脚本检查数据文件、WAL 文件、备份集等校验和是否正确。可通过 KBchk.sh -k 调用, 也可以单独调用。单独调用 do_checksum_chk.sh 进行检查时,无论传入的 data 是单机还是集群,只会检查当前节 点。 usage: ./do_checksum_chk.sh options options: -D: kingbase data absolute path. 检查项: 表 7.13.4: 校验和检查项 检查项 推荐值 检查结果 备注 数据文件校验和 正常 OK/ERROR 单机/集群 WAL 文件校验和 正常 OK/ERROR 单机/集群 备份集数据文件和归档文件等 正常 OK/ERROR 单机/集群 备份集文件检查只针对存在备份集的集群节 点,如采用集群外部备份方式,集群节点上不 存在备份集 7.13.2.8 进程状态检查(-p) do_process_chk.sh 脚本检查数据库及所依赖的进程状态。可通过 KBchk.sh -p 调用,也可以单独调用。单独调 用 ‘do_process_chk.sh‘进行检查时,无论传入的 data 是单机还是集群,只会检查当前节点。 usage: ./do_process_chk.sh options options: -D: kingbase data absolute path. 检查项: 114 第7章 检查项 推 荐 检查结果 备注 OK/ 集群 ERROR 调用 repmgr 接口 OK/ 集群 日常运维管理 值 集群状态 正常 es_server 进程 正常 状态 ERROR es_server 高可 正常 用 repmgr 进程状 正常 态 OK/ 集群 ERROR 默认情况通用机是 service OK/ 集群 ERROR kbha 进程状态 正常 集群 OK/ ERROR Kbha 高可用 正常 OK/ 集群 ERROR 凝思需要检查/etc/crontab 文件, 其他操作系统检查 /etc/cron.d/KINGBASECRON 7.13.2.9 系统资源检查(-r) 可通过 KBchk.sh -r 调用 do_resource_chk.sh 脚本检查系统资源,也可以直接调用 do_resource_chk.sh 脚本。 单独调用 do_resource_chk.sh 进行检查时,无论传入的 data 是单机还是集群,只会检查当前节点。 usage: ./do_resource_chk.sh options options: -D: kingbase data absolute path. 检查项: 表 7.13.5: 系统资源检查项 检查项 推荐值 检查结果 备注 CPU 使用率 小于 70% OK/WARN 单机/集群 MEMERY 使用率 小于 70% OK/WARN 单机/集群 MEMERY 剩余大小 大于 1G OK/WARN 单机/集群 磁盘剩余空间大小 大于 1G OK/WARN 单机/集群 见续表 115 第7章 日常运维管理 表 7.13.5 – 续表 检查项 推荐值 检查结果 备注 data 目录所在磁盘剩余大小 大于 1G OK/WARN 单机/集群 data 目录权限 正常 OK/ERROR 单机/集群 data 目录磁盘读写 正常 OK/ERROR 单机/集群 tablespace 目录所在磁盘剩余 大于 1G OK/WARN 单机/集群 大小 目录无权限时不检查 tablespace 目录权限 正常 OK/ERROR 单机/集群 tablespace 目录磁盘读写 正常 OK/ERROR 单机/集群 目录无权限时不检查 sys_wal 目录所在磁盘剩余大 1G OK/WARN 小 单机/集群 目录无权限时不检查 sys_wal 目录权限 正常 OK/ERROR 单机/集群 sys_wal 目录磁盘读写 正常 OK/ERROR 单机/集群 目录无权限时不检查 自定义文件 文件存在 OK/ERROR 单机/集群 可通过配置文件配置需要检查的文件列表 详 细 请 查 看 配 置 文 件 配 置 项 注 释:cluster_file_in_home、single_file_in_home、 cluster_file_in_data、single_file_in_data 7.13.2.10 无人值守(-s) 可通过 KBchk.sh -s 配置无人值守,要求在 chk.conf 中配置月、天、时、分、周等间隔值,规则同 crontab 保持 一致。无人值守依赖于 crontab 服务,在配置前需要检查 crontab 服务是否正常。 # 初始化无人值守参数 # 单机版配置无人值守时,会要求输入数据库登录密码,登录用户名、dbname 等信息可在 chk.conf 中修改 KBchk.sh -s init # 启动无人值守 # 会在/etc/cron.d/KINGBASECRON(凝思系统为/etc/crontab)文件中添加自动执行规则 KBchk.sh -s start # 停止无人值守 # 会删除/etc/cron.d/KINGBASECRON(凝思系统为/etc/crontab)文件中的自动执行规则 KBchk.sh -s stop 116 第7章 7.13.3 日常运维管理 输出 屏幕输出结果如下: Start resource check ... check CPU usage OK check Memory usage OK check Memory WARNING check disk free space of data dir OK check attr of data dir OK check owner of data dir OK check write to data dir OK check read from data dir OK check disk free space of sys_wal dir OK check attr of sys_wal dir OK check owner of sys_wal dir OK check write to sys_wal dir OK check read from sys_wal dir OK 如果 chk.conf 中配置了 result_save_path The free should > 1024 M 则 会 在 该 目 录 下 保 存 结 果 文 件。 结 果 文 件 名 为 one_step_check_result${time}.log 7.14 日志收集分析工具 针对集群中守护进程日志的收集分析工具,可以一键收集各个节点的日志文件,可对日志进行过滤并将结果输出 到文件。在 bin 目录下已带有 halog_analyse.sh、halog_analyse、halog_collect,share 目录带有 halog_analyse.conf 配置文件。 配置文件 halog_analyse.conf 表 7.14.1: 配置文件 配置项 参考值 描述 loga_port 65432 日志收集通信端口 begin_time 2021-03-15 16:33:00 需要分析的日志开始时间点,会根据本 机和各节点的时间差计算出各节点各自 的真实时间范围。 end_time 2021-03-15 16:34:00 需要分析的日志结束时间点,会根据本 机和各节点的时间差计算出各节点各自 的真实时间范围。 见续表 117 第7章 日常运维管理 表 7.14.1 – 续表 配置项 参考值 配置系统工具 ip 所在的目录 ip_path ssh_path 描述 /usr/bin 配置系统工具 ssh 所在的目录 配 置 远 程 执 行 工 具 端 口 号, 默 认 为 ssh_or_scmd_port 空, 此 时 自 动 使 用 工 具 的 默 认 端 口。 当 use_ssh=true 时,使用 ssh,其默 认端口为 22;当 use_ssh=false 时, 使用 sys_securecmdd,其默认端口为 8890。 use_ssh true 为 true 时使用 ssh, 否 则 使 用 sys_securecmdd。 kb_bin_path / home/ kingbase/ cluster/ test/ test/ 目标节点 Kingbase bin 目录绝对路径 kingbase/bin network_speed_limit (暂不 1024(单位 KB) 支持) memory_limit (暂不支持) 设置单个进程的最大网络传输速度,单 位 KB,0 不做限制。 10(单位 MB) 设置单个进程最大内存使用量,单位 MB,0 不做限制。 local_ip 10.10.10.10 本机 IP 地址(不能使用 127.0.0.1) anal_file_save_path /home/kingbase/anal_files 日志收集后,保存到本地目录。 result_file /home/kingbase/halog_analyse.result 日志分析结果文件 log_file /home/kingbase/halog_analyse.log 日志收集分析过程中的日志输出文件 log_level DEBUG, INFO, NOTICE, WARNING, 日志输出等级 ERROR, ALERT, CRIT or EMERG log_facility STDERR,LOCAL0, LOCAL1, ..., LO- 日志输出位置 CAL7, USER node_ips 192.168.28.128,192.168.28.129 配置需要做日志分析的节点 IP 列表 remote_user root 登录远端节点的用户名 file_name_* / home/ kingbase/ cluster/ test/ test/ 需要做分析的日志文件列表,’*’ 为文件 kingbase/hamgr.log 编号,从 1 开始,需要修改为该文件正 确的路径。 见续表 118 第7章 日常运维管理 表 7.14.1 – 续表 配置项 参考值 描述 fname_format_* hamgr-%Y-%m-%d-%H%M%S 文件名格式,编号需要跟 file_name 保 kbha.log-%Y%m%d 持一致, 默认格式已填好,不需要修 改。 time_reg_* [0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0- 9]{1,2}:[0-9]{1,2}:[0-9]{1,2} 日志文件中解析时间字符串的正则表达 式,’*’ 必须跟 file_name 保持一致默认 正则已填好,不需要修改。 time_format_* %Y-%m-%d %H:%M:%S 日 志 文 件 中 的 时 间 格 式,’*’ 必须跟 file_name 保持一致默认的时间格式已 填好,不需要修改。 file_keyword_* ERROR,error,FAILED,failed 需 要 收 集 的 日 志 关 键 字,’*’ 必须跟 file_name 保持一致默认已支持集群切 换、节点自动恢复场景的日志过滤持续 补全中。 其中,kb_bin_path、local_ip、node_ips、remote_user 必须配置后,才能使用此工具。 使用方法 约束: 1. 必须配置本机到各节点的免密登录。 2. remote_user 对需要收集的文件有读取权限。 3. 本地用户对 anal_file_save_path 和 result_file 有读写权限。 4. 所配置的端口号没有被占用。 配置 halog_analyse.conf 文件后,执行以下命令开始收集和分析日志: halog_analyse.sh halog_analyse.conf 119 第7章 日常运维管理 图 7.14.1: 日志收集及分析 如果日志文件已收集,可以执行以下命令来分析日志: halog_analyse.sh halog_analyse.conf -a 120 第7章 日常运维管理 图 7.14.2: 分析已收集的日志 分析后,所有符合条件的日志会根据时间线排序,全部输出到结果文件中。 图 7.14.3: 排序后的日志 在分析过程中,会以本机的时区和系统时间自动对每个节点进行时间校准。在日志文件收集过程中,会收集每个 节点的系统时间,然后和本机系统时间计算一个时间差,保存到 anal_file_save_path 目录下。结果文件中会自动加 上已校准的时间。 121 第7章 日常运维管理 图 7.14.4: 添加已校准时间后的日志 122 版权声明 版权声明 北京人大金仓信息技术股份有限公司(简称:人大金仓)版权所有,并保留对本手册及本声明的一切权利。 未得到人大金仓的书面许可,任何人不得以任何方式或形式对本手册内的任何部分进行复制、摘录、备份、修 改、传播、翻译成其他语言、将其全部或部分用于商业用途。 免责声明 本手册内容依据现有信息制作,由于产品版本升级或其他原因,其内容有可能变更。人大金仓保留在没有任何通 知或者提示的情况下对手册内容进行修改的权利。 本手册仅作为使用指导,人大金仓在编写本手册时已尽力保证其内容准确可靠,但并不确保手册内容完全没有错 误或遗漏,本手册中的所有信息也不构成任何明示或暗示的担保。 技术支持 • 人大金仓官方网站:http://www.kingbase.com.cn/ • 人大金仓文档中心:http://help.kingbase.com.cn/ • 全国服务热线:400-601-1188 • 人大金仓技术支持与反馈信箱:support@kingbase.com.cn 123 服务周期承诺 服务周期承诺 由于市场需求在不断变化,技术创新和发展的进程不断加剧,产品的版本更迭不可避免。人大金仓对于产品版本 生命周期的有效管理,有助于您提前规划项目,更好地从产品服务终止上过渡。 表 2: KingbaseES 产品生命周期里程碑 关键里程碑点 定义 产品发布日期 产品正式发布版本,即 GA(general availability)版本的发布日期。 停止销售日期 正式停止销售的日期,版本停止接受订单日。该日之后,产品将不再销售。 停止功能升级日期 在该日期之后,不再提供新特性和新硬件支持。但依旧提供错误修复、安全修复、功 能维护等服务。 停止功能维护日期 在该日期之后,不再维护功能,修复问题。但依旧提供安全修复等服务 停止安全维护日期 在该日期之后,不再发布补丁版本修复中高风险漏洞,仅提供有限的支持。 产品服务终止日期 停止提供产品服务和支持的日期。包括软件维护版本,缺陷修复,以及针对该产品的 所有服务支持(包括服务热线和远程/现场支持)。 服务周期策略 金仓数据库管理系统 KingbaseES 产品确保以下的服务周期: 1)产品自发布之日起至产品停止功能升级(包含新特性、新硬件支持)之日不少于 5 年。 2)产品停止功能升级之日起至产品停止功能维护(主要包括问题修复)之日不少于 4 年。 3)产品功能维护停止之日起至产品停止安全维护(包括中高风险漏洞修复)之日不少于 2 年。 服务终止策略 金仓数据库管理系统 KingbaseES 产品确保在销售后,至少提供 6 年的服务支持。 注意: 人大金仓将会综合各方因素来确定产品服务终止日期。并将在实际产品服务终止日期之前至少 90 天,通过公 124 服务周期承诺 开方式宣布产品服务终止日期。 125