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 V10openEuler 等主流 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 → rootroot → 部署用户 的本机免密

调整内核参数、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=仅部署用户

提示: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 环境变量配置(默认输出到终端)

技术支持:请联系数据库团队