四、高可用部署

1. HA 节点角色

角色 部署内容
node1 全量中间件、全量业务服务、MariaDB、Redis、RabbitMQ、Keepalived、监控组件
node2 全量中间件、全量业务服务、MariaDB、Redis、RabbitMQ、Keepalived、监控组件
node3 仅 Redis、Redis Sentinel 和 RabbitMQ,作为仲裁节点

具体 HA 关系如下:

  • MariaDB:node1 与 node2 使用 GTID 双主互从;
  • Redis:初始 node1 为主,node2、node3 为从,三节点 Sentinel 自动故障切换;
  • RabbitMQ:三节点组成集群;
  • Nacos:node1、node2 分别以 standalone 模式运行,不组成 Nacos 集群,不连接数据库;
  • VIP:仅 node1、node2 运行 Keepalived,node3 不参与 VIP;
  • 业务服务:部署到 node1、node2,node3 不部署;
  • 监控:node1、node2 共同组成监控高可用架构,通过 vmagent 双写、双 vmalert 和 Alertmanager 集群保证监控与告警可用性;node3 不运行监控组件。

2. 节点规划示例

项目 示例值
node1 192.168.10.11
node2 192.168.10.12
node3 192.168.10.13
VIP 192.168.10.20
SSH 用户 root
SSH 端口 22

部署前在 node1 验证:

ping -c 2 192.168.10.12
ping -c 2 192.168.10.13
ssh root@192.168.10.12 hostname
ssh root@192.168.10.13 hostname
arping -D -I <业务网卡> 192.168.10.20

3. 交互式 HA 部署

在 node1 执行:

bash /root/cmp/ZStack-CMP-installer-<版本>.bin --ha

安装程序完成基础准备后,会提示按 Enter 打开 vi。编辑 node1、node2、node3、VIP、SSH 密码和 options,保存退出后自动校验 JSON 并开始部署。

vi 常用操作:

i       进入编辑模式
Esc     退出编辑模式
:wq     保存并退出
:q!     放弃修改并退出

HA 部署由同一个安装包一次完成,不需要先执行单节点安装。

4. 无人值守 HA 部署

创建 /root/cmp-ha.json

{
  "type": "cmp_ha_install",
  "host": {
    "node": [
      {
        "host": "192.168.10.11",
        "user": "root",
        "password": "节点SSH密码",
        "port": "22"
      },
      {
        "host": "192.168.10.12",
        "user": "root",
        "password": "节点SSH密码",
        "port": "22"
      },
      {
        "host": "192.168.10.13",
        "user": "root",
        "password": "节点SSH密码",
        "port": "22"
      }
    ]
  },
  "env": [
    {
      "name": "vip",
      "value": "192.168.10.20",
      "label": "Virtual IP"
    },
    {
      "name": "node1",
      "value": "192.168.10.11",
      "label": "node1"
    },
    {
      "name": "node2",
      "value": "192.168.10.12",
      "label": "node2"
    },
    {
      "name": "node3",
      "value": "192.168.10.13",
      "label": "node3"
    },
    {
      "name": "issync",
      "value": "true",
      "label": "Enable file synchronization"
    },
    {
      "name": "options",
      "value": "-Izh_CN -TAsia/Shanghai --root-dir /cmp",
      "label": "Installation options"
    }
  ]
}

设置文件权限:

chmod 600 /root/cmp-ha.json

执行部署:

bash /root/cmp/ZStack-CMP-installer-<版本>.bin \
  -Izh_CN \
  -TAsia/Shanghai \
  --root-dir /cmp \
  --ha /root/cmp-ha.json

host.node 中三个节点的顺序必须依次对应 node1、node2、node3,env 中的节点 IP 必须与其完全一致。

options 用于 node2、node3 安装时传递安装参数。node1 命令行参数和 JSON 中的 options 应保持一致,否则可能出现节点间国际化、时区或安装路径不一致。

包含密码的 JSON 属于敏感文件,部署结束后应按现场安全规范归档或删除。

5. HA 安装日志

安装过程中会显示 Task ID 和 Ansible 原始任务日志。发生失败时检查:

less /tmp/cmp.log
less /tmp/cmp_ha.log
less ${CMP_INSTALL_ROOT}cmpactuator/resources/<TaskID>text

最终 PLAY RECAP 中三台节点均应满足:

unreachable=0
failed=0

6. HA 访问

部署完成后统一通过 VIP 访问:

http://<VIP>:8100

node1、node2 的业务服务均运行,但正常使用时不要绕过 VIP 固定访问某个业务节点。许可证按项目授权策略在 node1、node2 分别确认。

运维手册 | ZStack CMP · ZCF | ZStack 资源中心