cli一键部署集群使用手册
1. 文档简介
1.1 适用读者
数据库管理员
系统运维工程师
应用开发人员
1.2 功能概述
本工具提供以下核心能力:
支持 x86 与 ARM 架构服务器
支持非 root 用户部署(去 root 化)
支持 IP地址 及 域名部署
支持三种操作:部署(install)、扩容(expand)、缩容(shrink)
内置高可用监控(monitor),支持自动故障切换与恢复
一键配置 SSH 跨节点免密(通过 ud_trust_ssh.sh 脚本)
支持密码复杂度校验及加密存储
1.3 手册约定
| 图标 | 说明 |
|---|---|
| 注意 | 提醒用户注意可能影响操作结果的重要信息 |
| 提示 | 提供实用建议或技巧 |
| 示例 | 命令或配置示例 |
2. 环境准备
2.1 操作系统要求
支持 Kylin V10、openEuler 等主流 Linux 发行版
所有节点需保持 相同 CPU 架构(x86_64 或 aarch64)
2.2 硬件要求
服务器数量:至少 2 台(monitor + 数据节点)
存储容量:建议数据目录容量为业务数据容量的 1.5 倍
内存:建议 4GB 以上,最少 1GB
2.3 端口规划
| 端口类型 | 默认值 | 说明 |
|---|---|---|
| 数据库端口 | 5678 | 可通过配置文件修改 |
| monitor 端口 | 数据库端口 - 1 | 自动计算,例如 5677 |
| SSH 端口 | 22 | 可通过配置文件修改 |
注意:部署前请确保以上端口在各节点上 未被占用,且已在防火墙中放行。
2.4 用户与权限
本工具要求 部署脚本必须以非 root 用户执行,且配置文件 ud_cluster_install.conf、安装包 db.zip 的属主 不能是 root。
2.5 系统环境预处理
在集群 每个节点 上,使用 root 用户执行预处理脚本 ud_pre_install.sh:
| sh /path/to/ud_pre_install.sh -W '数据库密码' |
|---|
其中 -W 指定的密码为 数据库复制用户和部署创建的用户数据库(例如 unvdb)的密码,需满足复杂度要求:
长度 ≥ 12 字符
包含大写字母、小写字母、数字
不能包含用户名
预处理脚本自动完成:
创建部署用户(若不存在)
配置 root → root、root → 部署用户 的本机免密
调整内核参数、ulimit、systemd、SSH 配置
设置 crontab 权限
为 ping/ping6 添加 setuid 权限
提示:预处理脚本建议在 所有节点(包括部署节点自身)上执行,且必须在免密配置脚本 之前或之后 执行均可,但推荐先执行预处理再执行免密配置,因为免密脚本可能需要创建部署用户。
2.6 配置 SSH 免密(一键脚本)
2.6.1 概述
ud_trust_ssh.sh 脚本用于一键配置集群所有节点之间的 SSH 免密登录。它会根据配置文件 ud_cluster_install.conf 中的参数自动:
生成 SSH 密钥对(若不存在)
将公钥分发到所有目标节点
根据 install_with_root =0的值配置 仅部署用户免密
自动创建部署用户(若部署用户不存在)
2.6.2 配置文件参数说明
在运行免密脚本前,请确保 ud_cluster_install.conf 中已正确设置以下参数:
| 参数 | 说明 | 示例 |
|---|---|---|
| node_ip | 集群所有节点的 IP 或域名列表(空格分隔) | (192.168.1.10 192.168.1.11 192.168.1.12) |
| execute_user | 执行部署的部署用户名 | unvdb |
| super_user | 超级用户名(通常为 root) | root |
| ssh_port | SSH 端口(默认 22) | 22 |
| install_with_root | 是否允许 root 参与免密:0=仅部署用户 | 0 |
提示:install_with_root=0 时,脚本会配置部署用户 ↔ 部署用户 之间的免密。
2.6.3 执行免密配置脚本
以 非root用户 在 部署节点 上执行脚本:
当 install_with_root=0:使用 部署用户(如 unvdb) 执行
su - unvdb sh /path/to/ud_trust_ssh.sh |
|---|
执行后,脚本会自动完成跨节点免密配置,并测试连通性。输出示例:
[INFO] set password-free between root and unvdbconnect to "192.168.1.11" from current node by 'ssh' unvdb:0 ..... OK connect to "192.168.1.12" from current node by 'ssh' unvdb:0 ..... OK ...check ssh connection success! |
|---|
注意:
脚本依赖 ssh、scp 命令,请确保目标节点已安装并启动 SSH 服务。
若目标节点尚未创建部署用户,脚本会自动创建(密码为默认值 MTIzCg== 解码后的 123,建议部署后立即修改)。
执行免密脚本前,请确保 部署节点能够通过密码 SSH 登录其他节点(脚本首次连接可能需要输入密码)。
2.6.4 免密配置验证
脚本执行成功后,可手工验证:
| ssh unvdb@目标节点IP "date" |
|---|
无需输入密码即表示配置成功。
2.7 互信配置总览
| 脚本 | 作用 | 执行用户 | 执行范围 | 说明 |
|---|---|---|---|---|
| ud_pre_install.sh | 单节点环境准备、本机免密 | root | 每个节点单独执行 | 创建用户、调整系统参数、配置本机免密 |
| ud_trust_ssh.sh | 跨节点免密分发 | 部署用户 | 仅部署节点执行一次 | 根据配置将公钥分发到所有节点 |
完成以上两步后,集群所有节点间的 SSH 免密已就绪。
3. 获取软件包
| 文件名 | 说明 |
|---|---|
| ud_pre_install.sh | 预处理脚本(需 root 执行) |
| ud_trust_ssh.sh | 跨节点免密配置脚本 |
| ud_cluster_install.sh | 主控脚本(部署/扩容/缩容) |
| ud_cluster_install.conf | 配置文件模板 |
| db.zip | 数据库安装包(bin、lib、share 等目录) |
将上述文件上传到 部署节点 的同一目录下,例如 /home/unvdb/install/。
注意:安装包解压后必须直接包含 bin、lib、share 等目录,不能多一层父目录。
4. 部署集群
4.1 修改配置文件 ud_cluster_install.conf
配置文件采用 标签(section) 结构,必须包含 [install] 标签。
4.1.1 全局必填参数
| 参数名 | 说明 | 示例 |
|---|---|---|
| node_ip | 集群所有节点的 IP 或域名列表,空格分隔 | (192.168.1.10 192.168.1.11 192.168.1.12) |
| install_dir | 安装根目录(脚本会自动追加 /unvdb) | /home/unvdb/cluster/install |
| zip_package | 安装包的绝对路径 | /home/unvdb/install/db.zip |
| db_user | 数据库超级用户名 | unvdb |
| db_port | 数据库端口 | 5978 |
| db_formation | 集群分区名称(用于 monitor 区分) | dev |
| archive_mode | 归档模式 | on |
4.1.2 可选参数
| 参数名 | 默认值 | 说明 |
|---|---|---|
| db_auth | scram-sha-256 | 认证方式:md5、scram-sha-256、scram-sm3、sm4 |
| ssh_port | 22 | SSH 端口 |
| use_service | 1 | 拉起方式:1=crond(默认) |
| install_with_root | 0 | 是否允许 root 部署(0=不允许)。需与免密脚本配置一致 |
| execute_user | unvdb | 执行用户(必须与预处理创建的用户一致) |
| ipaddr_path | /sbin | ip 命令路径 |
| ping_path | /bin | ping/ping6 命令路径 |
4.1.3 配置文件示例
[install] node_ip=(192.168.137.130 192.168.137.132 192.168.137.134) install_dir="/home/unvdb/cluster/install1" zip_package="/home/unvdb/install/db.zip" db_user="unvdb" db_port="5978" db_formation="dev1" archive_mode="on" ssh_port="22" use_service=1 install_with_root=0 |
|---|
注意:
install_dir 的最后一层目录末尾 不能加斜杠
node_ip 列表中 第一个 IP/域名 将作为 monitor 节点
脚本会自动在 install_dir 后追加 /unvdb,实际数据目录为 ${install_dir}/unvdb/data
4.2 执行部署
在 部署节点 上,以 非 root 部署用户 执行:
| sh /path/to/ud_cluster_install.sh -W '数据库密码' install |
|---|
或者省略操作名(默认为 install):
| sh /path/to/ud_cluster_install.sh -W '数据库密码' |
|---|
其中 -W 指定的密码为 数据库复制用户和部署创建的用户数据库(例如 unvdb)的密码,同样需满足复杂度要求。
4.3 部署流程
脚本将依次执行:
校验配置文件参数
检查节点间 SSH 连通性(利用已配置的免密)
检查端口是否被占用、安装目录是否为空
在第一个节点上初始化 monitor
依次在其他节点上初始化 primary和standby
配置流复制、归档、白名单
拉起数据库服务及 crond 监控任务
4.4 部署后验证
查看集群状态:
source ~/.bash_profile ud_autoctl show state --uddata /home/unvdb/cluster/install1/unvdb/data --formation dev1 #在primary节点检查流复制: #ud_sql SELECT client_addr, state FROM pg_stat_replication; |
|---|
5. 扩容操作
5.1 准备新节点
在新节点上执行 预处理脚本(root 执行,-W 指定部署用户数据库密码)
如果新节点不在原始 node_ip 列表中,需重新运行 ud_trust_ssh.sh 将其加入免密配置(或手动 ssh-copy-id)
确保新节点的 install_dir 与集群一致,且 目录不存在(脚本自动创建)
5.2 修改配置文件
在 ud_cluster_install.conf 中修改 [expand] 标签下面内容:
[expand] primary_ip="192.168.137.130" # 集群中primary数据节点 IP expand_ip="192.168.137.140" # 新 standby 节点 IP install_dir="/home/unvdb/cluster/install1" ssh_port="22" db_formation="dev1" |
|---|
提示:primary_ip 需为集群中已存在的节点(primary节点)。
expand_ip 为新节点。
5.3 执行扩容
| sh ud_cluster_install.sh -W '数据库密码' expand |
|---|
脚本会自动:
从集群读取端口、认证方式等配置
在新节点上部署 standby 节点
加入流复制
更新 monitor 配置
5.4 验证
再次执行 ud_autoctl show state,应能看到新节点状态为 secondary。
6. 缩容操作
6.1 修改配置文件
在 ud_cluster_install.conf 中修改 [shrink] 标签下的内容:
[shrink] primary_ip="192.168.137.130" # 集群中primary数据节点 IP shrink_ip="192.168.137.140" # 待移除的 standby 节点 IP install_dir="/home/unvdb/cluster/install1" ssh_port="22" |
|---|
6.2 执行缩容
| sh ud_cluster_install.sh shrink |
|---|
注意:缩容操作 不需要 -W 密码参数。shrink_ip 对应的节点必须是 standby 节点,不支持直接缩容 primary 节点。
6.3 缩容后验证
执行集群状态命令,确认节点已被移除。
7. 高可用功能说明
monitor 节点:负责检测集群健康状态,当 primary 宕机时自动提升一个 standby 为新的 primary。
自动恢复:故障节点重启后会自动以 standby 身份重新加入集群(原 primary 降级为 standby)。
监控方式:脚本支持通过 crond 每分钟拉起 ud_autoctl run,确保 monitor 与数据库进程常驻。
流复制:默认使用异步流复制,支持配置同步复制(需手工修改 synchronous_standby_names)。
8. 常见问题
问题 1:执行部署脚本时提示 must be executed by non-root
原因:脚本强制要求非 root 用户执行。 解决:切换到部署用户(如 unvdb)再执行。
问题 2:配置文件或安装包属主为 root 导致报错
原因:脚本检查文件属主,禁止 root。 解决:使用 chown unvdb:unvdb ud_cluster_install.conf db.zip 修改属主。
问题 3:预处理脚本提示密码复杂度不满足
原因:-W 指定的密码长度不足 12,或缺少大小写/数字。 解决:使用符合要求的密码。
问题 4:扩容时提示 install_dir already exist
原因:新节点的安装目录已存在。 解决:删除新节点的 install_dir 目录,或修改配置指定其他空目录。
问题 5:部署时提示 unzip: command not found
原因:节点未安装 unzip。 解决:yum install -y unzip 或 apt install -y unzip。
问题 6:免密配置脚本执行失败
可能原因:
部署节点无法通过密码 SSH 登录其他节点(首次连接需要密码)
目标节点 SSH 服务未启动或端口错误
install_with_root 设置与执行脚本的用户不匹配
解决:
确认所有节点的 SSH 服务已启动:systemctl status sshd
手工测试 SSH 连接:ssh root@目标节点IP,确保能输入密码登录
检查 ud_cluster_install.conf 中的 ssh_port 是否正确
若使用 install_with_root=0,必须以 部署用户执行 ud_trust_ssh.sh;若 install_with_root=0,则以 部署用户 执行
问题 7:跨节点免密配置后仍然提示输入密码
原因:可能是 ~/.ssh/authorized_keys 权限不正确,或 SSH 配置禁止公钥登录。 解决:
在目标节点上执行:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys |
|---|
检查 /etc/ssh/sshd_config 中 PubkeyAuthentication yes 配置,并重启 SSH 服务。
9. 附录
9.1 完整部署示例(三节点,使用一键免密)
第一步:各节点执行预处理脚本(root)
for ip in 192.168.1.10 192.168.1.11 192.168.1.12; do ssh root@$ip "sh /root/ud_pre_install.sh -W '数据库密码'" Done |
|---|
第二步:配置跨节点免密(在部署节点一次执行)
# 假设部署节点为 192.168.1.10,且配置文件 install_with_root=0
su - unvdb cd /home/unvdb/install sh ud_trust_ssh.sh |
|---|
# 输出 “check ssh connection success!” 表示成功
第三步:编写配置文件
[install] node_ip=(192.168.1.10 192.168.1.11 192.168.1.12) install_dir="/home/unvdb/cluster/install" zip_package="/home/unvdb/db.zip" db_user="unvdb" db_port="5678" db_formation="prod" archive_mode="on" ssh_port="22" use_service=1 install_with_root=0 |
|---|
第四步:执行部署
| sh /home/unvdb/ud_cluster_install.sh -W '数据库密码' |
|---|
9.2 支持的认证方式
| 认证方式 | 说明 |
|---|---|
| md5 | MD5 哈希 |
| scram-sha-256 | SCRAM-SHA-256(推荐) |
| scram-sm3 | 国密 SM3 哈希 |
| sm4 | 国密 SM4 加密 |
9.3 日志文件
部署日志:${install_dir}/unvdb/log/auto-failover-init.log
脚本运行日志:根据 LOG_FILE 环境变量配置(默认输出到终端)
技术支持:请联系数据库团队