1. 集群安装

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

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

1.1. 准备工作

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

1.1.1. 环境准备

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

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

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

  1. 安装sudo命令。 该命令需要在root用户下执行。
     yum install -y sudo
    
  2. 在每台设备上都建立执行用户。示例中以hengshi用户为例。 该操作需要在root用户下执行。
     useradd -m hengshi
     passwd hengshi #设置hengshi登录密码
    
  3. 为执行用户设置无密码sudo权限。该操作需要在root用户下执行。
     visudo
    
    在其中输入, 保存并退出
     hengshi ALL=(ALL)       NOPASSWD: ALL
    
  4. 每台设备上hostname不同。 如果hostname有相同情况,如localhost, 则需要设置。直接编辑hostname文件进行修改。
     sudo vim /etc/hostname
    
  5. 每台机器可以用hostname通信。编辑 /etc/hosts文件,如存在127.0.0.1 本地ip信息,删除并重启服务器。
     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'
      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。
     sudo yum install -y epel-release
     sudo yum install -y ansible
    

1.1.2. 配置用户与安装目录

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

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

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

1.1.3. ssh登录确认

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

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

1.1.4. 服务端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

1.1.5. 设置集群信息

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

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

      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

    2. [metaslave] #metadb 数据库从库(选填)可用于主库down机 备用库使用

    3. Node-B

    [engine] #指定一台为master Node-A master=true Node-B Node-C

    4. 注意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。

      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
    

4.1. 安装

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

  1. 设置环境变量ANSIBLE_PLAYBOOK。
     export ANSIBLE_PLAYBOOK="ansible-playbook -v"
    
  2. 切换到执行安装的用户,示例中用户名为hengshi。
     sudo su - hengshi
    
  3. 进入安装包解压后的目标目录。
     cd ~/pkgs/hengshi-sense-[version]
    
  4. 执行集群安装命令。
     ./hs_install -m cluster -c ../cluster-conf    #执行集群安装
    
    安装过程会显示提示信息,当各个节点状态均为[unreachable=0,failed=0],表示安装成功。
     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
    

4.2. 配置系统

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

4.3. 启动服务

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

  1. 初始化OS。

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

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

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

     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。

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

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

     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后,再启动所有实例的服务。
     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。

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

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

     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是否对外开放。

4.4. 启动服务后相关操作

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

  1. 定时备份数据。

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

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

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

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

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

4.5. 停止服务

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

bin/hengshi-sense-bin stop all

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

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

4.6. 检查服务运行状态

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

bin/hengshi-sense-bin status all

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

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]

results matching ""

    No results matching ""

    单机安装 容器部署