集群安装
本文讲述如何在集群环境下进行 HENGSHI SENSE 安装的操作过程。
在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。
准备工作
集成安装前,请完成下面的准备工作。
环境准备
请按如下步骤进行环境准备。
- 首先参考安装环境文档准备安装环境。
- 请确保安装设备满足以下条件。
- 每台设备上都安装有 sudo 命令。
- 每台设备上建立可以无密码 ssh 登录的运行用户。
- 每台设备上运行用户配置无密码 sudo 权限。
- 每台设备 hostname 不同。
- 各设备间防火墙开放端口限制,内网间互通。
- 保证当前执行集群安装机器安装 ansible。
如果您已经完成了步骤1和步骤2中的环境准备,请忽略下面的提示直接跳到配置用户与安装目录继续进行安装操作。如果您不清楚步骤2中的条件如何配置时,可以参考下面的提示进行设置。
-
安装 sudo 命令。 该命令需要在 root 用户下执行。shell
yum install -y sudo
-
在每台设备上都建立执行用户。示例中以 hengshi 用户为例。 该操作需要在 root 用户下执行。shell
useradd -m hengshi passwd hengshi #设置 hengshi 登录密码
-
为执行用户设置无密码 sudo 权限。该操作需要在 root 用户下执行。shell
visudo
在其中输入, 保存并退出
shellhengshi ALL=(ALL) NOPASSWD: ALL
-
每台设备上 hostname 不同。 如果 hostname 有相同情况,如 localhost, 则需要设置。直接编辑 hostname 文件进行修改。shell
sudo vim /etc/hostname
-
每台机器可以用 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
-
配置运行用户,保证每台机器无密码 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
-
在执行安装部署的机器上安装 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
安装
按照以下指导完成安装过程。
-
设置环境变量 ANSIBLE_PLAYBOOK。shell
export ANSIBLE_PLAYBOOK="ansible-playbook -v"
1
-
切换到执行安装的用户,示例中用户名为 hengshi。shell
sudo su - hengshi
-
进入安装包解压后的目标目录。shell
cd ~/pkgs/hengshi-sense-[version]
-
执行集群安装命令。shell
./hs_install -m cluster -c ../cluster-conf #执行集群安装
安装过程会显示提示信息,当各个节点状态均为[unreachable=0,failed=0],表示安装成功。
shellPLAY 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 引擎配置。
启动服务
请按照如下步骤启动服务。
-
初始化 OS。
初始化时请检查执行用户有 sudo 权限,初始化完成后可以关闭 sudo 权限。 进入执行用户,在安装目录下,执行初始化 OS 命令。可以参考如下示例,示例中执行用户为 hengshi,安装目录是/opt/hengshi。
shellsudo su - hengshi cd /opt/hengshi bin/hengshi-sense-bin init-os all #初始化 os
查看提示信息,当各个节点状态显示[unreachable=0,failed=0]时表示 OS 初始化成功。
shTASK [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
-
初始化 HENGSHI SENSE。
在执行用户下进入安装目录,执行初始化 HENGSHI SENSE 命令。可以参考以下示例,示例中执行用户为 hengshi,安装目录为/opt/hengshi。
shsudo su - hengshi cd /opt/hengshi bin/hengshi-sense-bin init all #初始化衡石系统
查看提示信息,当各个节点状态显示[unreachable=0 failed=0]时表示 HENGSHI SENSE 初始化成功。
shTASK [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
-
未输入 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";
-
参考软件授权,输入 license。
-
授权成功后,正常启动 HENGSHI SENSE。
在执行用户下进入安装目录,执行启动 HENGSHI SENSE 命令。请参考下面的示例,示例中执行用户为 hengshi,安装目录是/opt/hengshi。
shsudo su - hengshi cd /opt/hengshi #进入安装目标目录 bin/hengshi-sense-bin restart hengshi #重新启动 hengshi 服务
查看提示信息,当各个节点状态显示[unreachable=0 failed=0]时表示 HENGSHI SENSE 启动成功。
shPLAY 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
-
可以通过浏览器访问服务地址,使用 HENGSHI SENSE 服务。如果不能访问,请检查配置文件 conf/hengshi-sense-env.sh 中的服务端口 HS_HENGSHI_PORT 是否对外开放。
启动服务后相关操作
当 HENGSHI SENSE 服务运行时,需要定时备份数据防止数据丢失,及时清理无用日志释放存储空间。
-
定时备份数据。
建议每日对数据库 metadb 进行备份,可以备份到本地设备也可以备份到远程设备。定时备份建议在非业务高峰期进行,比如凌晨,避免影响用户使用服务。 下面示例是每日零时将数据备份到远程设备的执行命令,参数详细说明请参考数据备份。
sh0 0 * * * /opt/hengshi/bin/dbbackup.sh -m metadb -l /BACKUP/PATH -h $REMOTE_IP -r /BACKUP/PATH
1
-
定时清理日志。
运行过程中,HENGSHI SENSE 会产生运行日志,这些日志需要定时清理释放存储空间。下面示例是每日定时清理内部数据库的滚动日志的命令。
sh0 0 * * * /opt/hengshi/bin/clean_engine.sh -t -r -c -g -p */5 * * * * /opt/hengshi/bin/clean_engine.sh -l
-
公网情况下端口开放须知。
在公网环境下,非必要场景中不暴露衡石整体的服务端口,避免因组件原因造成被攻击的情况。在特殊情况下,可通过 IP+端口访问的形式使用 web 服务的端口。
停止服务
通过下面命令停止集群服务。
shell
bin/hengshi-sense-bin stop all
1
当提示信息中各个节点状态都为[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]