Skip to content

集群安装

本文讲述如何在集群环境下进行 HENGSHI SENSE 安装的操作过程。

在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。

准备工作

集成安装前,请完成下面的准备工作。

环境准备

请按如下步骤进行环境准备。

  1. 首先参考安装环境文档准备安装环境。
  2. 请确保安装设备满足以下条件。
    • 每台设备上都安装有 sudo 命令。
    • 每台设备上建立可以无密码 ssh 登录的运行用户。
    • 每台设备上运行用户配置无密码 sudo 权限。
    • 每台设备 hostname 不同。
    • 各设备间防火墙开放端口限制,内网间互通。
    • 保证当前执行集群安装机器安装 ansible。

如果您已经完成了步骤1和步骤2中的环境准备,请忽略下面的提示直接跳到配置用户与安装目录继续进行安装操作。如果您不清楚步骤2中的条件如何配置时,可以参考下面的提示进行设置。

  1. 安装 sudo 命令。 该命令需要在 root 用户下执行。
    shell
    yum install -y sudo
  2. 在每台设备上都建立执行用户。示例中以 hengshi 用户为例。 该操作需要在 root 用户下执行。
    shell
    useradd -m hengshi
    passwd hengshi #设置 hengshi 登录密码
  3. 为执行用户设置无密码 sudo 权限。该操作需要在 root 用户下执行。
    shell
    visudo
    在其中输入, 保存并退出
    shell
    hengshi ALL=(ALL)       NOPASSWD: ALL
  4. 每台设备上 hostname 不同。 如果 hostname 有相同情况,如 localhost, 则需要设置。直接编辑 hostname 文件进行修改。
    shell
    sudo vim /etc/hostname
  5. 每台机器可以用 hostname 通信。编辑 /etc/hosts 文件,如存在127.0.0.1 本地 ip 信息,删除并重启服务器。
    shell
    a.b.c.d1 Node-A
    a.b.c.d2 Node-B
    a.b.c.d3 Node-C
  6. 配置运行用户,保证每台机器无密码 ssh 登录。 假设集群为三台机器 Node-A, Node-B, Node-C, 以用户 hengshi 在每台机器运行。
    • 期间按照提示输入 hengshi 密码
    • 提示如下信息输入 yes。 "Are you sure you want to continue connecting (yes/no)?" 输入 yes
    • 需要对本机 ip 执行 ssh-copy-id 操作,如在 Node-A 上需要执行 'ssh-copy-id hengshi@Node-A'
    shell
    test -e ~/.ssh/id_rsa || { yes "" | ssh-keygen -t rsa -q -P ''; }
    ssh-copy-id hengshi@localhost
    ssh-copy-id hengshi@127.0.0.1
    ssh-copy-id hengshi@Node-A
    ssh-copy-id hengshi@Node-B
    ssh-copy-id hengshi@Node-C
  7. 在执行安装部署的机器上安装 ansible。
    shell
    sudo yum install -y epel-release
    sudo yum install -y ansible

配置用户与安装目录

下面的操作请在 sudo 或 root 权限下执行。

示例中演示如何在集群上配置用户和安装目录,用户名为 hengshi,安装目录为/opt/hengshi,三个节点分别为 Node-A Node-B Node-C,用户在不同节点上执行下列操作。

shell
for x in Node-A Node-B Node-C; do
    ssh $x "grep hengshi /etc/passwd > /dev/null || sudo useradd -m hengshi"
    #建立 henghsi 用户, 设置安装目录及权限
    ssh $x "sudo mkdir -p /opt/hengshi && sudo chown hengshi:hengshi /opt/hengshi"
done

ssh 登录确认

假如三台机器 Node-A Node-B Node-C,执行下面代码进行登录确认。

shell
nodes=(Node-A Node-B Node-C)
for host in ${nodes[@]}; do
  ssh $host "for x in ${nodes[@]}; do ssh-keygen -R \$x; ssh-keyscan -H \$x >> ~/.ssh/known_hosts; done"
done

服务端 sshd 监听非22端口

安装所涉及的机器包括本机以及 HS_ENGINE_SEGMENTS 变量中配置的机器,如有非 ssh 22端口的情况,需要在部署用户 ~/.ssh/config 中配置各个 host 的实际端口。

本机需要配置 localhost 和 hostname 命令返回域名的端口。

例如: 本机配置 hostname 为 localhost,并且 HS_ENGINE_SEGMENTS=(Node-A Node-B Node-C),对应的监听端口都为122。

在.ssh/config 配置文件中需要包含以下配置,并同步到每台机器上的.ssh/config。

Host localhost
  Port 122
Host Node-A
  Port 122
Host Node-B
  Port 122
Host Node-C
  Port 122

设置集群信息

在需要执行部署命令的机器上设置集群信息。

  • 建立集群配置目录,该目录建议与安装包解压目录同一层级,方便升级时复用配置。可以参考下面示例,示例中安装包解压目录为 hengshi-sense-[version]。

    shell
    mkdir hengshi-sense-[version]/../cluster-conf
    cd hengshi-sense-[version]
    cp ansible/hosts.sample ../cluster-conf/hosts
    cp ansible/vars.yml.sample ../cluster-conf/vars.yml
  • 配置 hosts。按照示例中的提示进行操作。

    [metadb] #内部元数据库
    Node-A
    
    #[metaslave] #metadb 数据库从库(选填)可用于主库 down 机 备用库使用
    #Node-B
    
    [engine] #指定一台为 master
    Node-A master=true
    Node-B
    Node-C
    
    #注意 doris-fe 数量需要配置奇数台
    [doris-fe] # 建议使用 ip 信息配置,hostname 配置可能存在启动失败问题
    Node-A master=true
    Node-B
    Node-C
    
    [doris-be] # 建议使用 ip 信息配置,hostname 配置可能存在启动失败问题
    Node-A
    Node-B
    Node-C
    
    [minio]
    Node-A
    
    
    [gateway]
    Node-A
    
    [zookeeper] #需要保证机器间的 zkid 各不相同
    #注意只需配置三个节点 (1,2,4个节点都不行)
    Node-A zkid=1
    Node-B zkid=2
    Node-C zkid=3
    
    [redis]
    Node-A
    
    [flink]
    Node-A
    
    [hengshi]
    Node-A
    Node-B
    Node-C
  • 配置 vars.yaml。按照下面示例中的提示配置 vars.yaml。

    yaml
    temp_work_dir_root: "/tmp"   #临时目录,一般不需要改
    install_path: "/opt/hengshi"  #安装目标目录
    gateway_port: 8080
    hengshi_sense_port: 8081
    metadb_port: 54320
    zookeeper_client_port: 2181
    engine_master_port: 15432
    engine_segment_base_port: 25432

安装

按照以下指导完成安装过程。

  1. 设置环境变量 ANSIBLE_PLAYBOOK。
    shell
    export ANSIBLE_PLAYBOOK="ansible-playbook -v"
  2. 切换到执行安装的用户,示例中用户名为 hengshi。
    shell
    sudo su - hengshi
  3. 进入安装包解压后的目标目录。
    shell
    cd ~/pkgs/hengshi-sense-[version]
  4. 执行集群安装命令。
    shell
    ./hs_install -m cluster -c ../cluster-conf    #执行集群安装
    安装过程会显示提示信息,当各个节点状态均为[unreachable=0,failed=0],表示安装成功。
    shell
    PLAY RECAP ****************************************************************
    Node-A : ok=18   changed=3    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
    Node-B : ok=18   changed=3    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
    Node-C : ok=18   changed=3    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0

配置系统

启动服务前,请阅读配置文件对相关的配置进行设置。 如内置引擎类型要求为 Doris,请阅读Doris 引擎配置

启动服务

请按照如下步骤启动服务。

  1. 初始化 OS。

    初始化时请检查执行用户有 sudo 权限,初始化完成后可以关闭 sudo 权限。 进入执行用户,在安装目录下,执行初始化 OS 命令。可以参考如下示例,示例中执行用户为 hengshi,安装目录是/opt/hengshi。

    shell
    sudo su - hengshi
    cd /opt/hengshi
    bin/hengshi-sense-bin init-os all  #初始化 os

    查看提示信息,当各个节点状态显示[unreachable=0,failed=0]时表示 OS 初始化成功。

    sh
    TASK [deploy : init-os kernel] ********************************************************************************************************************************************************************************************************************************
    changed: [Node-A]
    changed: [Node-B]
    changed: [Node-C]
    
    TASK [deploy : init-os deps] **********************************************************************************************************************************************************************************************************************************
    changed: [Node-A]
    changed: [Node-B]
    changed: [Node-C]
    
    PLAY RECAP ****************************************************************************************************************************************************************************************************************************************************
    Node-A              : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    Node-B              : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    Node-C              : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
  2. 初始化 HENGSHI SENSE。

    在执行用户下进入安装目录,执行初始化 HENGSHI SENSE 命令。可以参考以下示例,示例中执行用户为 hengshi,安装目录为/opt/hengshi。

    sh
    sudo su - hengshi
    cd /opt/hengshi
    bin/hengshi-sense-bin init all   #初始化衡石系统

    查看提示信息,当各个节点状态显示[unreachable=0 failed=0]时表示 HENGSHI SENSE 初始化成功。

    sh
    TASK [operations : metadb init] *******************************************************************************************************************************************************************************************************************************
    skipping: [Node-A]
    skipping: [Node-B]
    skipping: [Node-C]
    
    TASK [operations : engine init] *******************************************************************************************************************************************************************************************************************************
    skipping: [Node-A]
    skipping: [Node-B]
    skipping: [Node-C]
    
    PLAY RECAP ****************************************************************************************************************************************************************************************************************************************************
    Node-A              : ok=1    changed=0    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
    Node-B              : ok=1    changed=0    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
    Node-C              : ok=2    changed=1    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0
  3. 未输入 license 前,启动服务。  未输入 license 前,系统不支持多机运行。需要先要启动一个实例的服务(比如 Node-A),等更新 license 后,再启动所有实例的服务。

    shell
    cd /opt/hengshi
    bin/hengshi-sense-bin start metadb
    bin/hengshi-sense-bin start engine
    bin/hengshi-sense-bin start zookeeper
    bin/hengshi-sense-bin start minio
    bin/hengshi-sense-bin start redis
    bin/hengshi-sense-bin start flink
    ansible-playbook ansible/site.yml -i ansible/hosts --tags start-hengshi -e "target=hengshi"  --limit "Node-A";
  4. 参考软件授权,输入 license。

  5. 授权成功后,正常启动 HENGSHI SENSE。

    在执行用户下进入安装目录,执行启动 HENGSHI SENSE 命令。请参考下面的示例,示例中执行用户为 hengshi,安装目录是/opt/hengshi。

    sh
    sudo su - hengshi
    cd /opt/hengshi                 #进入安装目标目录
    bin/hengshi-sense-bin restart hengshi    #重新启动 hengshi 服务

    查看提示信息,当各个节点状态显示[unreachable=0 failed=0]时表示 HENGSHI SENSE 启动成功。

    sh
    PLAY RECAP ***********************************************************************
    Node-A              : ok=4    changed=3    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
    Node-B              : ok=3    changed=2    unreachable=0    failed=0    skipped=3    rescued=0    ignored=0
    Node-C              : ok=3    changed=2    unreachable=0    failed=0    skipped=3    rescued=0    ignored=0
  6. 可以通过浏览器访问服务地址,使用 HENGSHI SENSE 服务。如果不能访问,请检查配置文件 conf/hengshi-sense-env.sh 中的服务端口 HS_HENGSHI_PORT 是否对外开放。

启动服务后相关操作

当 HENGSHI SENSE 服务运行时,需要定时备份数据防止数据丢失,及时清理无用日志释放存储空间。

  1. 定时备份数据。

    建议每日对数据库 metadb 进行备份,可以备份到本地设备也可以备份到远程设备。定时备份建议在非业务高峰期进行,比如凌晨,避免影响用户使用服务。 下面示例是每日零时将数据备份到远程设备的执行命令,参数详细说明请参考数据备份

    sh
    0 0 * * * /opt/hengshi/bin/dbbackup.sh -m metadb -l /BACKUP/PATH -h $REMOTE_IP -r /BACKUP/PATH
  2. 定时清理日志。

    运行过程中,HENGSHI SENSE 会产生运行日志,这些日志需要定时清理释放存储空间。下面示例是每日定时清理内部数据库的滚动日志的命令。

    sh
    0 0 * * * /opt/hengshi/bin/clean_engine.sh -t -r -c -g -p
    */5 * * * * /opt/hengshi/bin/clean_engine.sh -l
  3. 公网情况下端口开放须知。

    在公网环境下,非必要场景中不暴露衡石整体的服务端口,避免因组件原因造成被攻击的情况。在特殊情况下,可通过 IP+端口访问的形式使用 web 服务的端口。

停止服务

通过下面命令停止集群服务。

shell
bin/hengshi-sense-bin stop all

当提示信息中各个节点状态都为[unreachable=0 failed=0]时表示停止服务成功。

sh
PLAY RECAP ****************************************************************
Node-A : ok=18   changed=3    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
Node-B : ok=18   changed=3    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
Node-C : ok=18   changed=3    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0

检查服务运行状态

执行以下命令时,可以查看服务运行状态。

shell
bin/hengshi-sense-bin status all

在显示信息中可以查看 metadb、engine、zookeeper、gateway、minio、redis、flink 等 HENGSHI 模块的运行信息,其中"IS ACTIVE"表示对应模块运行中,"NOT ACTIVE"表示对应模块已停止,"skipping"表示节点没有安装相应的模块。

sh
TASK [operations : metadb status msg] ******************************************************************************************
ok: [Node-A] => {
    "msg": [
        "[metadb]: NOT ACTIVE"
    ]
}
skipping: [Node-B]
skipping: [Node-C]

TASK [operations : engine status msg] ******************************************************************************************
ok: [Node-B] => {
    "msg": [
        "[engine]: NOT ACTIVE"
    ]
}

TASK [operations : zookeeper status msg] ***************************************************************************************
ok: [Node-A] => {
    "msg": [
        "[zookeeper]: NOT ACTIVE"
    ]
}
ok: [Node-B] => {
    "msg": [
        "[zookeeper]: NOT ACTIVE"
    ]
}
ok: [Node-C] => {
    "msg": [
        "[zookeeper]: NOT ACTIVE"
    ]
}

TASK [operations : gateway status msg] *****************************************************************************************
ok: [Node-A] => {
    "msg": [
        "[gateway]: NOT ACTIVE"
    ]
}
skipping: [Node-B]
skipping: [Node-C]


TASK [operations : hengshi sense status msg] **********************************************************************************
ok: [Node-A] => {
    "msg": [
        "[syslog]: NOT ACTIVE",
        "[hengshi]: NOT ACTIVE",
        "[watchdog]: NOT ACTIVE"
    ]
}
ok: [Node-B] => {
    "msg": [
        "[syslog]: NOT ACTIVE",
        "[hengshi]: NOT ACTIVE",
        "[watchdog]: NOT ACTIVE"
    ]
}
skipping: [Node-C]

TASK [operations : redis status msg] *****************************************************************************************
ok: [Node-A] => {
    "msg": [
        "[redis]: NOT ACTIVE"
    ]
}
skipping: [Node-B]
skipping: [Node-C]

TASK [operations : minio status msg] *****************************************************************************************
ok: [Node-A] => {
    "msg": [
        "[minio]: NOT ACTIVE"
    ]
}
skipping: [Node-B]
skipping: [Node-C]

TASK [operations : flink status msg] *****************************************************************************************
ok: [Node-A] => {
    "msg": [
        "[flink]: NOT ACTIVE"
    ]
}
skipping: [Node-B]
skipping: [Node-C]

衡石分析平台使用手册