# DMShellInstall **Repository Path**: hnyuanzj/DMShellInstall ## Basic Information - **Project Name**: DMShellInstall - **Description**: 达梦数据库一键安装 - **Primary Language**: Shell - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: https://eco.dameng.com/community/post/20221213152007ROVL69MSE2Z6ISHFOJ - **GVP Project**: No ## Statistics - **Stars**: 127 - **Forks**: 70 - **Created**: 2023-01-11 - **Last Updated**: 2026-09-16 ## Categories & Tags **Categories**: dbmanager **Tags**: DM数据库 ## README # DMShellInstall — 达梦数据库自动化部署工具 > 当前版本:**V5.3.0**(更新时间:2026-09-12)| 适配 **DM8 / DM9** | 作者:Lucifer / yuanzijian / xiefenfen ## 一、目录与文件构成 | 脚本/文件 | 功能 | 使用场景 | |------|------|----------| | **DMShellInstall** | 达梦数据库全自动安装部署脚本(V5.3.0) | 单机 / 数据守护(DataWatch)/ AFC / DMDSC 集群部署、OS 环境配置、数据库初始化、参数优化、备份与统计作业下发 | | **SSHTrust** | SSH 免密互信配置工具(V1.0.0) | 集群节点间建立 SSH 互信(依赖 expect) | | **README.md** | 本说明文档 | 人工查阅 | ## 二、功能概述 在首节点执行一次,脚本即自动完成以下全部工作(支持远端节点免登录批量重放): 1. **操作系统环境配置**:主机名/`/etc/hosts`、防火墙、SELinux、swap、GRUB(关闭 THP/NUMA 并按需配置 IO 调度)、sysctl、limits、systemd 参数、NTP/时间同步、dmdba 用户创建与用户环境、每日清缓存、safe-rm 目录保护等(完全遵循《达梦数据库项目上线规范》); 2. **数据库软件安装**:本地 YUM 源配置、ISO 挂载、静默安装(DM8 用 `-q`、DM9 用 `-s`)、授权文件(`-kp`)部署,支持自动识别并复用已安装软件; 3. **数据库实例初始化**:dminit 建库(页大小/簇大小/字符集/大小写敏感/兼容模式等),参数按内存自动计算优化(BUFFER/SORT/UNDO 等),归档、备份作业(全备/增备/检查)、统计信息自动收集作业(V9.0)、大页配置等; 4. **高可用/集群部署**: - **数据守护 DataWatch**:一主多备,备库支持同步(`-spi`)/异步(`-api`)混布,支持独立监视器实现**自动切换**(`-dmoi`,监视器数量 0/1/3/5/7/9),主备自动完成脱机备份/恢复/建库/守护注册; - **AFC 集群**(Raft 心跳自动故障切换,xmal 通信,奇数节点 3/5/7/9); - **DMDSC 共享存储集群**:DCR/VOTE/REDO/ARCH/DATA 磁盘规划、udev 规则、ASM/第三方服务注册、支持单盘多分区、多路径聚合(`-mtp`)、ASM 镜像(DSCM); 5. **部署报告**:自动生成部署信息文件 `dmData.js`(含各节点系统信息、数据库配置与管理员密码汇总,供配套 HTML 报告渲染),并归档至安装目录 `log/` 下; 6. **安全与规范**:禁止使用默认数据库密码(自动生成 12 位随机强密码并回显一次)、目录保护 safe-rm、配置文件变更前自动备份(追加时间戳/`.original`)。 ## 三、支持的部署形态与模式选择 ### 3.1 部署形态对照 | `-dim` | 模式 | 说明 | 必选关键参数 | |---|---|---|---| | `1` | **single** | 单机部署 | 无集群参数 | | `2` | **datawatch** | 数据守护主备(同步/异步备库、监视器自动切换) | `-dpi`、`-dmi`(备角色再按需 `-api/-spi`,自动切换加 `-dmoi`) | | `3` | **afc** | AFC 自动故障切换集群(Raft 心跳) | `-dpi`、`-dxi` | | `4` | **dsc** | DMDSC 共享存储集群 | `-dpi`、`-dmi`、`-dcd`、`-vod`、`-dad` | | `5` | **dscm** | DSC 的 ASM 镜像部署(不需要 `-vod`,VOTE 由 ASM 镜像冗余承担) | `-dpi`、`-dmi`、`-dcd`、`-dad`(传 `-vod` 会报错) | ### 3.2 交互式选择与命令行指定 - 需要**无人值守**执行时请显式指定 `-dim 1~5`(部署模式)与 `-dbv 8|9`(数据库版本,默认 `8`;仅配置 OS 的 `-st 1` 无需 `-dbv`); - 未传 `-dim` 时:**所有阶段(含 `-st 1` 仅配置 OS)**都会**交互式提示**选择部署类型;除 `-st 1` 外,还会提示选择数据库版本(版本还可直接输入 `0` 退出); - 远端节点不需传 `-dim/-dbv`,脚本会在首节点配置完成后自动带相同模式与版本参数重放。 - 集群模式下节点角色由脚本按 IP 归属自动判定(同步备库 `-spi/-smi`、异步备库 `-api/-ami`、独立监视器 `-dmoi`),并自动完成远端节点重放,无需手工指定节点序号。 ### 3.3 节点规模约束(脚本前置校验) | 模式 | 节点数 | 备注 | |---|---|---| | 数据守护 | 2 ~ 24 | 监视器数量必须为 0/1/3/5/7/9 中的一种 | | AFC | 3 / 5 / 7 / 9 | 奇数节点 | | DSC / DSCM | 2 ~ 16 | 磁盘须集群内各节点一致可见 | > 共享盘参数(`-dcd`/`-vod`/`-dad`)仅在**含初始化实例的阶段**(`-st 0/3/5/6`)强制校验;`-st 1/2/4` 不涉及 DCR/VOTE/ASM 初始化,无需传入。 ## 四、快速开始 ### 4.1 使用前准备 1. **操作系统**:已装好的干净 Linux(RHEL/CentOS 6~10、麒麟 Kylin、UOS、openEuler 等;脚本按 glibc 版本自动识别 OS 主版本); 2. **网络**:节点互通,IP/主机名已规划(生产建议公网 + 内网/心跳双网); 3. **存储**:按第八节比例规划各目录磁盘空间;DSC 需规划共享盘; 4. **安装介质**:达梦安装 ISO 镜像与脚本放**同一目录**,执行时用 `-di` 指定 ISO 文件名。 ### 4.2 最小一键部署(单机,无人值守) ```bash # 在 /soft 目录放置脚本 + ISO 后执行(推荐目录) cd /soft ./DMShellInstall -dim 1 -dbv 8 -di dm8_20250910_x86_centos7_64.iso ``` > 说明:默认执行完整流程「配置 OS → 安装软件 → 初始化实例」。安装介质需与脚本同目录,可任选其一:`-di` 指定 ISO 镜像,或直接放置达梦安装包 `DMInstall.bin`(仅纯 OS 配置 `-st 1` 时两者都不需要)。 ### 4.3 辅助命令 ```bash ./DMShellInstall -h # 主帮助(参数分组速查) ./DMShellInstall -v # 查看脚本版本 ``` ## 五、分段执行(`-st` 流程阶段) 流程阶段由**单一参数 `-st`** 控制,取值即场景(纯数值 `0~6`,不传按 `0` 完整流程),它是唯一的流程控制变量,不再派生任何阶段开关: | `-st` | 场景 | 行为 | |---|---|---| | `0`(默认/不传) | 完整流程 | 配置 OS → 安装软件 → 初始化实例 | | `1` | 仅配置 OS | 只做 OS 环境配置(主机名/hosts/防火墙/内核/用户/YUM 源等),不装软件、不建库、不挂载 ISO;`-dim` 可选任意架构(`1~5`),集群模式按 `-dpi/-dmi/-dxi` 等把 OS 配置分发到各节点,无需安装包与 `-dbv` | | `2` | 仅安装软件 | 只安装数据库软件(挂载 ISO → 静默安装 → 配置 glogin → 解析版本),不建库 | | `3` | 仅初始化实例 | 复用 `-d` 目录软件(自动探测并打印软件版本),软件目录无效时自动补装,然后建库 | | `4` | 配置 OS + 安装软件 | 不建库 | | `5` | 配置 OS + 初始化实例 | 复用 `-d` 目录软件,软件目录无效时自动补装 | | `6` | 安装软件 + 初始化实例 | 不配置 OS(仅补建 `dmdba` 用户与 root/dmdba 环境变量),安装软件后建库 | ```bash # 场景示例 ./DMShellInstall -dim 1 -st 1 # 仅配置OS(单机,无需安装包) ./DMShellInstall -dim 2 -st 1 -dpi 192.168.31.181,192.168.31.182 -dmi 10.0.0.181,10.0.0.182 -rp 'P@ssw0rd123' # 仅配置OS(数据守护两节点,无需安装包) ./DMShellInstall -dim 1 -st 2 -di dm8_20250910_x86_centos7_64.iso # 仅安装软件 ./DMShellInstall -dim 1 -st 3 -d /home/dmdba/dmdbms -dd /dmdata ... # 仅初始化实例 ./DMShellInstall -dim 1 -st 6 -di dm8_20250910_x86_centos7_64.iso # 装软件+初始化(不配置OS) ``` > `-st 2/3/6` 不含 OS 配置阶段,脚本会自动**补齐** `dmdba` 用户(`create_os_user`)与 root/dmdba 的环境变量(`conf_root_env`/`conf_dmdba_env`:`DM_HOME`、`PATH`、`sd` 别名等),避免 `su - dmdba` 取不到 `DM_HOME`、部署报告的 `rootEnv`/`dmdbaEnv` 为空;相关操作幂等,可重复执行。 > > **DSC/DSCM 场景**下 `-st 3/6` 还会调用 `conf_hosts` 配置 `/etc/hosts` 主机别名:`dmdcr_cfg.ini`(`DCR_EP_HOST`/`CSSM_CSS_IP`)、`dmasvrmal.ini`(`MAL_HOST`)以及初始化用的 `dminit.ini` 各节点段都取自 `malip_host_arr`,而该数组只在 `conf_hosts` 中赋值(`-ari N` 也走这里,只是取值退化为心跳 IP);缺这一步会造成这些配置段整段缺失,DSC/DSCM 初始化直接失败。 ## 六、参数说明 > 参数按作用域分组:**全局通用** | **数据守护 / AFC 集群** | **DMDSC 集群**。 > 带默认值的参数可省略;数据库管理员密码(SYSDBA/SYSAUDITOR/SYSSSO)建议不传,脚本自动生成 12 位随机强密码(需自定义时请满足:≥9 位且含大写、小写、数字、特殊字符)。 ### 6.1 全局通用参数(适用于所有部署模式) | 参数 | 说明 | 默认值 | 示例 | |------|------|--------|------| | `-di` | DM 安装镜像文件(与脚本同目录;也可直接放置 `DMInstall.bin`) | 含安装/初始化阶段必填(仅配置 OS 时不需要) | `-di dm8_20250910_x86_centos7_64.iso` | | `-kp` | 授权文件路径 | 无 | `-kp /tmp/dm.key` | | `-d` | 软件安装目录 | `/home/dmdba/dmdbms` | `-d /home/dmdba/dmdbms` | | `-dd` | 数据目录 | `/dmdata` | `-dd /dmdata` | | `-ad` | 归档目录 | `/dmarch` | `-ad /dmarch` | | `-bd` | 备份目录 | `/dmbak` | `-bd /dmbak` | | `-cd` | core dump 目录 | `/dmbak/dmcore` | `-cd /dmbak/core` | | `-dn` | 数据库名 | `DAMENG` | `-dn DAMENG` | | `-in` | 实例名 | `DMSERVER` | `-in DMSERVER` | | `-pn` | 监听端口 | `5236` | `-pn 5236` | | `-es` | 簇大小(16/32/64 页) | `32` | `-es 32` | | `-ps` | 页大小(4/8/16/32 K) | `32` | `-ps 32` | | `-cs` | 大小写敏感(1/Y:敏感,0/N:不敏感) | `Y` | `-cs 1` | | `-c` | 字符集(0:GB18030 / 1:UTF-8 / 2:EUC-KR) | `1` | `-c 1` | | `-cm` | 兼容模式(0~8) | `0` | `-cm 0` | | `-bpm` | 空格填充模式(0/1,=1 默认兼容 Oracle -cm 2) | `0` | `-bpm 0` | | `-sp` | SYSDBA 密码 | 自动生成 | `-sp 'Sysdba@123456'` | | `-sap` | SYSAUDITOR 密码 | 自动生成 | `-sap 'Sysauditor@123456'` | | `-ssp` | SYSSSO 密码(安全版) | 自动生成 | `-ssp 'Syssso@123456'` | | `-ls` | 日志文件大小(256~2048 M) | `1024` | `-ls 1024` | | `-rpn` | redo 日志文件后缀(≤10 字符) | `rlog` | `-rpn rlog` | | `-er` | 启用归档(Y/N) | `Y` | `-er Y` | | `-sl` | 归档空间上限(M) | `102400` | `-sl 102400` | | `-bm` | 备份模式(1:每日全备 / 2:周六全备+平日增备) | `2` | `-bm 2` | | `-bds` | 备份保留天数(≥15) | `15` | `-bds 15` | | `-mp` | 内存分配占比(%) | `80` | `-mp 80` | | `-om` | 并发优化(0:一般和 OLAP / 1:高并发 OLTP) | `0` | `-om 0` | | `-opd` | 自动优化参数(Y/N) | `Y` | `-opd Y` | | `-osa` | 配置 OS 认证(Y/N) | `Y` | `-osa Y` | | `-hf` | 配置大页(Y/N) | `N` | `-hf Y` | | `-no` | 关闭 NUMA(Y/N) | `N` | `-no Y` | | `-srm` | 配置目录保护 safe-rm(Y/N) | `Y` | `-srm Y` | | `-hn` | 主机名:单机直接使用该值;集群/守护为前缀并自动补两位序号(`dw01`/`dw02`…),监视器节点为 `dwmon` | 不传(不修改主机名) | `-hn dmdb01` | | `-dp` | dmdba 用户密码 | `Dameng@123` | `-dp 'Dameng@123'` | | `-iso` | 自动配置 YUM 源(Y/N) | `Y` | `-iso N` | | `-ti` | NTP 时间服务器 IP | 无 | `-ti 192.168.1.100` | ### 6.2 数据守护(DataWatch)集群参数 | 参数 | 说明 | 默认值 | 示例 | |------|------|--------|------| | `-osp` | 节点 SSH 端口 | `22` | `-osp 22` | | `-np` | 节点连通性检查(Y/N) | `Y` | `-np Y` | | `-rp` | 当前用户密码(root,远程执行/互信用;与 `-skp` 二选一) | 无 | `-rp 'Dameng@123'` | | `-skp` | 已有 SSH 互信目录 | 无 | `-skp /root/.ssh` | | `-dpi` | 主备公网 IP(逗号分隔) | 无 | `-dpi 192.168.31.181,192.168.31.182` | | `-dmi` | 主备私网 IP(MAL 通信,逗号分隔) | 无 | `-dmi 10.0.0.181,10.0.0.182` | | `-api` | 异步备库公网 IP(逗号分隔) | 无 | `-api 192.168.31.183` | | `-ami` | 异步备库私网 IP(逗号分隔) | 无 | `-ami 10.0.0.183` | | `-spi` | 同步备库公网 IP(逗号分隔) | 无 | `-spi 192.168.31.184` | | `-smi` | 同步备库私网 IP(逗号分隔) | 无 | `-smi 10.0.0.184` | | `-dmoi` | 监视器主机 IP(配置后守护为自动切换 AUTO) | 无 | `-dmoi 192.168.31.185` | | `-dmop` | 监视器端口(多实例自动 +1) | `8330` | `-dmop 8330` | | `-dgn` | 守护组名 | `GRP1` | `-dgn GRP1` | | `-mpn` | 私网 MAL 监听端口 | `5336` | `-mpn 5336` | | `-mdpn` | 守护进程端口 | `5436` | `-mdpn 5436` | | `-midpn` | 实例监听守护端口 | `5536` | `-midpn 5536` | | `-at` | 归档模式(0:REALTIME / 1:TIMELY) | `0` | `-at 1` | | `-awa` | 高性能/事务一致(0:高性能 / 1:事务一致) | `1` | `-awa 0` | | `-ri` | 归档发送间隔(s) | `60` | `-ri 30` | | `-art` | 同步备库异步恢复间隔(s) | `1` | `-art 5` | ### 6.3 AFC 集群参数(Raft 心跳) | 参数 | 说明 | 默认值 | 示例 | |------|------|--------|------| | `-dpi` | 节点公网 IP(逗号分隔) | 无 | `-dpi 192.168.31.181,192.168.31.182,192.168.31.183` | | `-dxi` | 节点 xmal 通信私网 IP(逗号分隔) | 无 | `-dxi 10.0.0.1,10.0.0.2,10.0.0.3` | | `-dxp` | xmal 监听端口(首节点,后续 +1) | `10006` | `-dxp 10006` | | `-rhi` | 组心跳间隔(ms) | `150` | `-rhi 200` | | `-rvi` | 基础投票间隔(ms) | `3000` | `-rvi 3000` | | `-xhi` | xmal 心跳间隔(s) | `5` | `-xhi 5` | > `-osp/-np/-hn/-rp/-skp` 等通用集群参数同 6.2。 ### 6.4 DMDSC / DSCM 集群参数 | 参数 | 说明 | 默认值 | 示例 | |------|------|--------|------| | `-dpi` | 公网 IP(逗号分隔) | 无 | `-dpi 192.168.1.101,192.168.1.102` | | `-dmi` | 私网 IP(逗号分隔) | 无 | `-dmi 172.16.1.101,172.16.1.102` | | `-lci` | 第三方确认公网 IP | 无 | `-lci 192.168.1.200` | | `-ddn` | DB_NAME(覆盖全局 `-dn`) | `DSC` | `-ddn DMDSC` | | `-den` | 实例名前缀(覆盖全局 `-in`,自动 +01/+02…) | `DSC` | `-den DSC` | | `-apd` | ASM 密码 | `Dm@ASM12321` | `-apd 'Dm@ASM12321'` | | `-cdp` | CSS 通信端口 | `9341` | `-cdp 9341` | | `-adp` | ASM 通信端口 | `9351` | `-adp 9351` | | `-dcp` | DCR 检查端口(首节点,后续 +1) | `9361` | `-dcp 9361` | | `-amp` | ASM 私网端口 | `9451` | `-amp 9451` | | `-dmp` | DB 私网端口 | `9461` | `-dmp 9461` | | `-ess` | ASM 共享内存(M) | `512` | `-ess 512` | | `-dcd` | DCR 磁盘(dsc:1 块 / dscm:1~5 块) | 无 | `-dcd /dev/sdb` | | `-vod` | VOTE 磁盘(dsc 必选 / dscm 禁用) | 无 | `-vod /dev/sdc` | | `-lod` | REDO 磁盘(可选) | 无 | `-lod /dev/sdd,/dev/sde` | | `-ard` | ARCH 磁盘(可选) | 无 | `-ard /dev/sdf,/dev/sdg` | | `-dad` | DATA 磁盘(≥1 块) | 无 | `-dad /dev/sdh,/dev/sdi` | | `-rr` | REDO 冗余(1/2/3) | `1` | `-rr 1` | | `-ar` | ARCH 冗余(1/2/3) | `1` | `-ar 1` | | `-dr` | DATA 冗余(1/2/3) | `1` | `-dr 1` | | `-lgm` | REDO 副本数(1/2/3) | `1` | `-lgm 1` | | `-aam` | ARCH 副本数(1/2/3) | `1` | `-aam 1` | | `-dtm` | 表空间副本数(1/2/3) | `1` | `-dtm 1` | | `-ctm` | 控制文件副本数(1/2/3) | `1` | `-ctm 1` | | `-lst` | REDO 条带化(0/32/64/128/256 KB) | `64` | `-lst 64` | | `-aas` | ARCH 条带化(0/32/64/128/256 KB) | `64` | `-aas 64` | | `-dst` | DATA 条带化(0/32/64/128/256 KB) | `32` | `-dst 32` | | `-as` | AU 大小(1/2/4/8/16/32/64 B) | `4` | `-as 4` | | `-rs` | ASM 日志大小(0/32/64/128/256 M) | `128` | `-rs 128` | | `-fld` | 排除系统盘(逗号分隔,用于过滤) | 无 | `-fld sda,sdb` | | `-fmd` | 格式化共享盘(Y/N) | `Y` | `-fmd Y` | | `-mtp` | 多路径聚合(Y/N) | `N` | `-mtp Y` | | `-la` | 本地归档(Y/N) | `N` | `-la Y` | > `-osp/-np/-hn/-rp/-skp` 通用集群参数同 6.2。 ## 七、典型部署场景 > 以下命令默认执行完整流程。无人值守请显式指定 `-dim <模式>`(并可按需 `-dbv 8/9`);缺省会交互询问。 > 命令较长时用 `\` 换行续写,`#` 后为行内注释,整段可直接复制到终端执行。 ### 7.1 单机 ```bash # 1) 单机全自动一键安装 ./DMShellInstall -dim 1 -di dm8_20250910_x86_centos7_64.iso \ -d /dmdbms -dd /dmdata -ad /dmarch -bd /dmbak \ -cs 1 -c 1 # 大小写敏感、字符集 UTF-8 # 2) 单机 + 大页内存优化 ./DMShellInstall -dim 1 -di dm8_20250910_x86_centos7_64.iso \ -d /dmdbms -dd /dmdata -ad /dmarch -bd /dmbak -hf Y # 3) 单机 + 关闭 NUMA ./DMShellInstall -dim 1 -di dm8_20250910_x86_centos7_64.iso \ -d /dmdbms -dd /dmdata -ad /dmarch -bd /dmbak -no Y # 4) 单机 + 指定授权文件 ./DMShellInstall -dim 1 -di dm8_20250910_x86_centos7_64.iso \ -d /dmdbms -dd /dmdata -ad /dmarch -bd /dmbak \ -kp /home/dmdba/dm20250101.key ``` ### 7.2 数据守护(DataWatch,手动切换) 不带 `-dmoi` 即为手动切换(守护进程 `MANUAL`)。备库角色由 IP 归属决定:普通主备写在 `-dpi/-dmi`;**同步备库**加 `-spi/-smi`;**异步备库**加 `-api/-ami`。任意"一主 N 备(含同步/异步混合)"均可按下表组合参数: | 节点角色 | 公网参数 | 私网参数 | |---|---|---| | 主库 + 同步/普通备库 | `-dpi` | `-dmi` | | 同步备库(追加) | `-spi` | `-smi` | | 异步备库(追加) | `-api` | `-ami` | ```bash # 例:一主四备(手动切换) ./DMShellInstall -dim 2 -di dm8_20250910_x86_centos7_64.iso \ -dpi 192.168.31.170,192.168.31.171,192.168.31.172,192.168.31.173,192.168.31.174 \ -dmi 192.168.31.170,192.168.31.171,192.168.31.172,192.168.31.173,192.168.31.174 \ -rp 'Dameng@123' -hn dw \ -d /dmdbms -dd /dmdata -ad /dmarch -bd /dmbak \ -cs 1 -c 1 -iso N # 例:一主两备两同步(手动切换) ./DMShellInstall -dim 2 -di dm8_20250910_x86_centos7_64.iso \ -dpi 192.168.31.170,192.168.31.171,192.168.31.172 \ -dmi 192.168.31.170,192.168.31.171,192.168.31.172 \ -spi 192.168.31.173,192.168.31.174 -smi 192.168.31.173,192.168.31.174 \ -rp 'Dameng@123' -hn dw \ -d /dmdbms -dd /dmdata -ad /dmarch -bd /dmbak \ -cs 1 -c 1 -iso N # 例:一主一异步三同步(手动切换) ./DMShellInstall -dim 2 -di dm8_20250910_x86_centos7_64.iso \ -dpi 192.168.31.170 -dmi 192.168.31.170 \ -api 192.168.31.171 -ami 192.168.31.171 \ -spi 192.168.31.172,192.168.31.173,192.168.31.174 \ -smi 192.168.31.172,192.168.31.173,192.168.31.174 \ -rp 'Dameng@123' -hn dw \ -d /dmdbms -dd /dmdata -ad /dmarch -bd /dmbak \ -cs 1 -c 1 -iso N ``` ### 7.3 数据守护(DataWatch,自动切换) 增加 `-dmoi`(独立确认监视器主机)即自动切换(守护进程 `DW_MODE=AUTO`,确认监视器 + 多实例 dmmonitor.ini)。监视器主机无需列入 `-dpi`。注意:仅 **GLOBAL 远程主备架构**下确认监视器才生效为 AUTO;单节点 LOCAL 架构(`-dpi` 仅 1 个主库 IP)即使配置监视器仍为 MANUAL,请改用多节点部署实现自动切换。 ```bash # 例:一主三备 + 确认监视器(自动切换) ./DMShellInstall -dim 2 -di dm8_20250910_x86_centos7_64.iso \ -dpi 192.168.31.170,192.168.31.171,192.168.31.172,192.168.31.173 \ -dmi 192.168.31.170,192.168.31.171,192.168.31.172,192.168.31.173 \ -dmoi 192.168.31.174 \ -rp 'Dameng@123' -hn dw \ -d /dmdbms -dd /dmdata -ad /dmarch -bd /dmbak \ -cs 1 -c 1 -iso N # 例:一主两备一异步 + 监视器(自动切换) ./DMShellInstall -dim 2 -di dm8_20250910_x86_centos7_64.iso \ -dpi 192.168.31.170,192.168.31.171,192.168.31.172 \ -dmi 192.168.31.170,192.168.31.171,192.168.31.172 \ -api 192.168.31.173 -ami 192.168.31.173 \ -dmoi 192.168.31.174 \ -rp 'Dameng@123' -hn dw \ -d /dmdbms -dd /dmdata -ad /dmarch -bd /dmbak \ -cs 1 -c 1 -iso N ``` ### 7.4 AFC 集群(Raft 心跳自动切换) 3/5/7/9 奇数节点,`-dxi` 指定 xmal 通信 IP: ```bash # 例:三节点 AFC 集群 ./DMShellInstall -dim 3 -di dm8_20250910_x86_centos7_64.iso \ -dpi 192.168.31.170,192.168.31.171,192.168.31.172 \ -dxi 192.168.31.170,192.168.31.171,192.168.31.172 \ -rp 'Dameng@123' -hn dw \ -d /dmdbms -dd /dmdata -ad /dmarch -bd /dmbak \ -cs 1 -c 1 -iso N ``` ### 7.5 DMDSC 集群 DSC 磁盘使用设备绝对路径(如 `/dev/sdb`);多路径设备只需写名称(如 `mpatha`),配合 `-mtp Y`。可指定 `-fld` 排除系统盘,`-fmd N` 禁止格式化已有共享盘。 **模式与 VOTE 盘的关系**:`-dim 4`(DSC)在**含初始化实例的阶段**(`-st 0/3/5/6`)**必须指定 `-vod`**(VOTE 磁盘,且 `-dcd`、`-dad` 同为必填),`-st 1/2/4` 不下发 DCR/VOTE/ASM 初始化,无需共享盘参数;`-dim 5`(DSCM,ASM 镜像)**任何阶段都不能指定 `-vod`**(传了会报错退出),VOTE 功能由 ASM 镜像冗余替代,DCR 磁盘支持单盘多分区(`-dcd` 可 1~5 块)。 ```bash # 例 1:两节点 DSC(DCR + VOTE + REDO + ARCH + DATA 独立盘) ./DMShellInstall -dim 4 -di dm8_20250910_x86_centos7_64.iso \ -dpi 192.168.31.170,192.168.31.171 -dmi 192.168.31.170,192.168.31.171 \ -dcd /dev/sdb -vod /dev/sdc -lod /dev/sdd -ard /dev/sde -dad /dev/sdf \ -hn dsc -rp 'Dameng@123' \ -d /dmdbms -dd /dmdata -ad /dmarch -bd /dmbak \ -cs 1 -c 1 -iso N # 例 2:两节点 DSCM(单盘分区:DCR 多副本分区 + REDO/ARCH/DATA 分离,无 VOTE) ./DMShellInstall -dim 5 -di dm8_20260507_x86_kylin10_sp1_64.iso \ -dpi 192.168.31.171,192.168.31.172 -dmi 192.168.31.171,192.168.31.172 \ -dcd /dev/sdb1,/dev/sdb2,/dev/sdb3,/dev/sdb4,/dev/sdb5 \ -lod /dev/sdb6,/dev/sdb7,/dev/sdb8 \ -ard /dev/sdb9,/dev/sdb10,/dev/sdb11 \ -dad /dev/sdb12 \ -hn dsc -rp 'Dameng@123' \ -d /home/dmdba/dmdbms -dd /dmdata -ad /dmarch -bd /dmbak \ -cs 1 -c 1 -iso N # 例 3:两节点 DSC(已有 SSH 互信,高冗余 + 条带化) ./DMShellInstall -dim 4 -di dm8_20260507_x86_kylin10_sp1_64.iso \ -dpi 192.168.31.171,192.168.31.172 -dmi 192.168.31.171,192.168.31.172 \ -hn dsc -skp '/root/.ssh' \ -dcd /dev/sdb -vod /dev/sdc \ -ard /dev/sde,/dev/sdf,/dev/sdg -lod /dev/sdj -dad /dev/sdh,/dev/sdi \ -d /dmdbms -dd /dmdata -ad /dmarch -bd /dmbak \ -cs 1 -c 1 -iso N # 例 4:两节点 DSCM(多路径聚合 + ASM 镜像,DCR 单盘,无 VOTE 盘) ./DMShellInstall -dim 5 -di dm8_20241203_x86_rh7_64.iso \ -dpi 192.168.2.31,192.168.2.32 -dmi 192.168.2.31,192.168.2.32 \ -dcd /dev/sdr \ -lod /dev/sdl,/dev/sdm,/dev/sdp -ard /dev/sdi,/dev/sdf,/dev/sdk -dad /dev/sde \ -mtp Y -hn dsc -rp 'Dameng@123' \ -d /dmdbms -dd /dmdata -ad /dmarch -bd /dmbak \ -cs 1 -c 1 -ddn DMDSC -den DMDSC ``` ### 7.6 SSHTrust 独立使用 SSHTrust(V1.0.0)批量建立节点间 SSH 互信,**依赖 expect**: ```bash bash SSHTrust -u <用户> -p <密码> -i [-P 端口] [-d] ``` | 参数 | 说明 | 必填 | |------|------|------| | `-u, --user` | SSH 登录用户名 | 是 | | `-p, --password` | SSH 登录密码 | 是 | | `-i, --ip` | 节点 IP 列表(逗号分隔,将本机公钥分发至各节点) | 是 | | `-P, --port` | SSH 端口 | 否(默认 22) | | `-d, --debug` | 调试模式 | 否 | | `-h, --help` | 显示帮助 | 否 | ```bash # 在 192.168.31.170 上执行,与 192.168.31.171 建立互信 ./SSHTrust -u root -p 'Dameng@123' -i 192.168.31.171 # 多节点批量互信 ./SSHTrust -u root -p 'Dameng@123' -i 192.168.31.170,192.168.31.171,192.168.31.172,192.168.31.173 # 指定 SSH 端口 ./SSHTrust -u root -p 'Dameng@123' -i 192.168.31.170,192.168.31.171 -P 2222 ``` > 建立了 SSH 互信后,执行 DMShellInstall 集群安装可用 `-skp /root/.ssh` 免输 root 密码。 ### 7.7 组合流程示例 ```bash # Step 1:建立 SSH 互信(所有 DSC 节点) ./SSHTrust -u root -p 'Dameng@123' -i 192.168.31.170,192.168.31.171 # Step 2:安装 DSC 集群(复用互信,免 root 密码) ./DMShellInstall -dim 4 -di dm8_20250910_x86_centos7_64.iso \ -dpi 192.168.31.170,192.168.31.171 -dmi 192.168.31.170,192.168.31.171 \ -dcd /dev/sdb -vod /dev/sdc -lod /dev/sdd -ard /dev/sde -dad /dev/sdf \ -hn dsc -skp '/root/.ssh' \ -d /dmdbms -dd /dmdata -ad /dmarch -bd /dmbak \ -cs 1 -c 1 -iso N -mtp Y ``` ## 八、磁盘空间比例参考 安装前建议按以下比例规划各目录磁盘空间(x 为数据量基准值): | 目录 | 建议大小 | 说明 | |---|---|---| | `data` | x | 数据量基准值 | | `dmdata`(`-dd`) | 4.5x | 数据目录 | | `dmarch`(`-ad`) | x | 归档目录(如关闭归档 `-er N` 可酌情减小) | | `dmbak`(`-bd`) | 4.5x | 备份目录 | ## 九、运行产物与后续维护 | 内容 | 路径 / 说明 | |---|---| | 执行日志 | 脚本所在目录 `print_dm_install_.log`(每次运行自动清理历史日志,实时 `tee` 落盘) | | 部署信息报告 | `dmData.js`(脚本运行目录生成,含各节点信息与密码汇总,供配套 HTML 报告渲染),并归档到安装目录 `log/dmData.js<时间戳>` | | 实例配置文件 | `dm.ini`、`dmarch.ini`、`dmmal.ini`、`dmtimer.ini`(异步备)、`dmwatcher.ini`、`dmmonitor_<组名>.ini`、`sqllog.ini`、`dm_svc.conf`;DSC 另含 `dmdcr_cfg.ini`、`dmdcr.ini`、`dmasvrmal.ini`、`dmcss.ini`、`dmcssm.ini`、`dminit.ini` 等 | | 运维 SQL | `/home/dmdba/scripts/`:`dmini.sql`(参数优化)、`dmini_other.sql`(其它参数项)、`query_dmini.sql`(优化结果查询)、`com_mod.sql`(兼容模式)、`arch.sql`(归档)、`fullbackup.sql`/`incrbackup.sql`/`chkbackup.sql`(备份与备份检查)、`statistics.sql`(统计信息)、`basic_info.sql`(基础信息巡检)、`para_other.sql`;另有 `glogin.sql`(dmdba 登录配置) | | 备份作业 | 按 `-bm` 模式创建:周六全备、平日增备、每日备份检查;归档按 `-er/-sl` 配置 | | 统计信息作业 | `statistics.sql`(V9.0,更新 2026-09-04):每晚 23:50 管理作业、23:55 分组并行自动收集(DM_STAT_* 系列对象:`DM_STAT_PARAM/CFG/LOG` 表 + `DM_STAT_SYNC/GATHER/REBUILD_JOB` 过程) | | 管理员密码 | 建库用临时密码,安装结束自动改为随机强密码并在终端回显一次(`alter_sysdba.sql/alter_sysaud.sql/alter_syssso.sql`),请立即妥善保存 | | 配置备份 | 每次修改系统/实例关键配置前自动备份(追加时间戳或 `.original`) | | 目录保护 | `/usr/local/bin/safe-rm` + 配置 `/etc/safe-rm.conf`(自动保护安装目录/数据/归档/备份/core 目录),并在 `/etc/profile.d/rm_protect.sh`、`/root/.bashrc`、`/home/dmdba/.bashrc` 中注入 `rm` 别名(`-srm N` 可关闭) | 关闭目录保护(如需): ```bash # 删除以下文件中的 alias rm 配置 vi /etc/profile.d/rm_protect.sh vi /root/.bashrc vi /home/dmdba/.bashrc unalias rm # 取消当前终端别名 ``` ## 十、注意事项 1. **运行用户**:root 或拥有 sudo NOPASSWD 权限的用户;脚本名称必须为 `DMShellInstall`,建议与安装介质统一放在 `/soft` 目录执行。 2. **安装介质**:`-di` 指定 ISO 与脚本同一目录,或同目录直接放置 `DMInstall.bin`;建议 `-iso Y`(默认)自动配置 YUM 源(集群首节点、多路径、指定 `-ti` 时触发);离线/已有源环境可用 `-iso N` 跳过。仅纯 OS 配置(`-st 1`)可不带安装介质。 3. **集群认证**:集群部署必须提供 `-rp`(root 密码)或 `-skp`(已有 SSH 互信目录)之一,脚本会自动安装 sshpass 并批量分发;SSH 端口非 22 时用 `-osp` 指定。 4. **管理员密码**:SYSDBA/SYSAUDITOR/SYSSSO(安全版)不传即自动生成 12 位随机强密码;自定义密码需 ≥9 位且含大写、小写、数字、特殊字符,禁止使用默认密码。 5. **dmdba/root 密码**:`-dp`(dmdba)默认 `Dameng@123`,生产请通过 `-dp` 修改;`-rp` 为执行机 root 密码。 6. **磁盘参数**:DSC 磁盘用设备绝对路径(`/dev/sdb`);多路径设备写名称(`mpatha`)并配 `-mtp Y`;格式化共享盘默认开启(`-fmd Y`),对已有数据磁盘务必确认后使用,必要时 `-fmd N`。 7. **分段与复用**:`-st 3`(或 `-st 5`)可复用 `-d` 目录已装软件仅初始化实例(自动探测并打印软件版本;软件不可用时用随身安装包自动补装);`-st 6` 在不做 OS 配置的前提下装软件+建库(仅补建 `dmdba` 用户与环境变量);`-st 1/2/4` 不建库。流程阶段由 `-st` 统一控制,旧的 `-m/-ud/-oid` 自 V5.2.0 起已取消。 8. **交互与无人值守**:未传 `-dim` 时一律交互询问部署模式(含 `-st 1`);除 `-st 1` 外还会询问数据库版本。自动化平台调用请显式传 `-dim`,需要装软件/建库时再传 `-dbv`。 9. **版本适配**:脚本适配 DM8 / DM9(`-dbv 8/9`),并对 DM8/DM9 使用对应静默安装方式与参数。 10. **端口占用**:脚本会校验端口重复与占用,冲突即退出,请勿复用既有实例端口(如多实例 5236+1 递增,由脚本自动规划)。 11. **重启提示**:安装完成脚本会提示择机重启服务器(关闭 THP 等内核参数生效);数据守护/集群安装完成后请检查守护与监视器状态。 12. **大页/NUMA**:`-hf Y` 会配置大页并需同步预留内存;`-no Y` 关闭 NUMA(含 GRUB 层),影响全局请评估后使用。 ## 十一、更新历史 | 日期 | 版本/内容 | |------|-----------| | 2022/11/03 | 创建 DMShellInstall 脚本 | | 2022/11~2022/12 | 补充功能与传参判断;增加数据守护 1 主 1~8 备部署;兼容 Linux 6;增加 DSC 部署与多链路聚合;自定义 db_name/ep_name | | 2022/12/21 | 内置达梦数据库优化脚本,新增 `-sm`(--sort_mode,后废弃);适配复杂密码与单盘多分区 DSC | | 2023/01~2023/06 | 增加本地归档/ASM 归档混合、AutoParaAdj 系列优化脚本、创建用户/分区脚本重写、实例名自定义、指定 SSH 端口、`-cm/-bmp/-dmp` 参数、已安装检测跳过 | | 2023/10/13 | 新增脚本输入参数命令 | | 2024/04/16 | 删除 length_in_char 参数;新增 ASM 镜像方式部署 DSC(DSCM)及相应参数 | | 2024/04~2024/11 | 新增异步备库、`-lci` 第三方确认、修复 core_dir BUG、同步备库及参数优化 | | 2025/01/03 | 密码策略禁止默认密码;禁止 OS 认证登录数据库;安装完成提示重启 | | 2025/05/15 | 新增 AFC(Raft)主备集群;支持 DM9;支持达梦 9 大页内存 | | 2025/07/30 | 新增 `-rpn`(redo 日志后缀);增加部署报告 `dmData.js`(单机/数据守护/AFC,DSC 同步) | | 2025/10/21 | DSC 适配 nvme 共享盘 | | 2026/02/06 | V4.9 新增 `-no`(关闭 NUMA,默认 N) | | 2026/06/08 | 端口校验 `validate_ports`;sysctl/limits 遵循《达梦数据库项目上线规范 V4.4》;OS 层 ASM 磁盘配置优化;优化参数脚本 AutoParaAdj5.6_dm8 | | 2026/06/15 | 新增目录保护(safe-rm)功能 | | 2026/07/23 | 新增 SSHTrust 脚本;优化 ssh_trust 配置 | | 2026/08/12 | 新增配置 NUMA 亲和 | | 2026/09/01 | **V5.2.0 发版**(`-st` 分段语义重构、复用软件自动探测版本/自动补装、统计信息收集脚本 V9.0) | | 2026/09/04 | 更新数据库统计信息收集脚本(DM_STAT_* 系列)至 V9.0 | | 2026/09/11 | 不含 OS 配置的阶段(`-st 2/3`)自动补齐 `dmdba` 用户与 root/dmdba 环境变量(`conf_root_env`/`conf_dmdba_env` 拆分复用),部署报告 `rootEnv`/`dmdbaEnv` 不再为空 | | 2026/09/11 | 文档与脚本对齐:移除已取消的 `-m/-ud/-oid`,修正 `-cs` 说明与运行产物清单 | | 2026/09/11 | 新增 `-st 6`(安装软件 + 初始化实例,不配置 OS)场景 | | 2026/09/12 | **V5.3.0 发版**:`-st 1`(仅配置 OS)支持用 `-dim` 选择任意架构(单机/数据守护/AFC/DSC/DSCM)批量配置各节点 OS,不再强制兜底单机;未传 `-dim` 时与其它阶段一致改为交互选择;该阶段不装软件、无需数据库版本与安装包 | | 2026/09/12 | DSC/DSCM 的 `-st 3/6` 补齐 `conf_hosts`:`dmdcr_cfg.ini`(`DCR_EP_HOST`/`CSSM_CSS_IP`)、`dmasvrmal.ini`(`MAL_HOST`)与 `dminit.ini` 节点段依赖 `malip_host_arr`(仅 `conf_hosts` 中赋值),缺失会导致 DSC/DSCM 初始化失败 |