如何将数据集成服务独立部署
数据集成是 HAP 系统中的扩展模块,用户可自主选择是否启用,快速部署可参考启用数据集成功能
快速部署是将数据集成服务部署在与 HAP 微服务同一台服务器上,对硬件的可用资源要求较高,如果单台服务器无法满足,可以参考此文档将数据集成服务独立部署在一台新服务器上,服务器配置可参考单机数据集成服务器配置
安装 Docker
安装 Docker,可参考官方对不同 Linux 版本的 安装说明 或 参考部署示例中的 Docker 安装章节
微服务调整
数据集成服务需要用到文件存储与 Kafka 组件,这时需要映射出单机模式 sc 服务中的这两个组件访问入口
如果你的 HAP 私有部署环境为集群模式则不需要调整,后续配置数据集成服务直接连接件存储与 Kafka 组件即可
单机模式映射文件存储与 Kafka 组件的端口需要修改 docker-compose.yaml 文件,添加环境变量、端口映射。新增信息如下
app:
environment:
ENV_FLINK_URL: http://192.168.10.30:58081 # 新增,填写 Flink 服务的地址,注意修改为实际的 IP 地址
sc:
ports:
- 9000:9000 # 新增端口映射
- 9092:9092 # 新增端口映射
docker-compose.yaml 配置文件示例
version: '3'
services:
app:
image: nocoly/hap-community:5.8.0
environment: &app-environment
ENV_ADDRESS_MAIN: "https://hap.domain.com"
ENV_APP_VERSION: "5.8.0"
ENV_API_TOKEN: "******"
ENV_FLINK_URL: http://192.168.10.30:58081 # 新增,填写 Flink 服务的地址,注意修改为实际的 IP 地址
ports:
- 8880:8880
volumes:
- ./volume/data/:/data/
- ../data:/data/hap/data
sc:
image: nocoly/hap-sc:3.0.0
environment:
<<: *app-environment
volumes:
- ./volume/data/:/data/
ports:
- 9000:9000 # 新增端口映射
- 9092:9092 # 新增端口映射
volumes:
- ./volume/data/:/data/
修改后在安装管理器目录下执行 bash service.sh restartall
重启微服务生效
数据集成服务部署
-
初始化 swarm 环境
docker swarm init
-
创建目录
mkdir -p /data/hap/script/volume/data
-
创建配置文件
cat > /data/hap/script/flink.yaml <<EOF
version: '3'
services:
flink:
image: nocoly/hap-flink:1.17.1.530
entrypoint: ["/bin/bash"]
command: ["/run.sh"]
environment:
ENV_FLINK_S3_ACCESSKEY: "mdstorage"
ENV_FLINK_S3_SECRETKEY: "eBxExGQJNhGosgv5FQJiVNqH"
ENV_FLINK_S3_SSL: "false"
ENV_FLINK_S3_PATH_STYLE_ACCESS: "true"
ENV_FLINK_S3_ENDPOINT: "sc:9000" # 5.1.0(不包含5.1.0)以前的版本填 app,5.1.0+(包含5.1.0)的版本填sc
ENV_FLINK_S3_BUCKET: "mdoc"
ENV_FLINK_LOG_LEVEL: "INFO"
ENV_FLINK_JOBMANAGER_MEMORY: "2000m"
ENV_FLINK_TASKMANAGER_MEMORY: "10000m"
ENV_FLINK_TASKMANAGER_SLOTS: "50"
ENV_KAFKA_ENDPOINTS: "sc:9092" # 5.1.0(不包含5.1.0)以前的版本填 app,5.1.0+(包含5.1.0)的版本填sc;如果kafka使用的是外部组件,则填实际Kafka的ip即可
ports:
- 58081:8081
volumes:
- ./volume/data/:/data/
extra_hosts:
- "sc:192.168.10.28" # 这里是 sc 服务 Host 解析(对应 ENV_KAFKA_ENDPOINTS 值中填写的是 "sc:9092"),注意修改为实际的 IP 地址
#- "app:192.168.10.28" # 这里是 app 服务 Host 解析(对应 ENV_KAFKA_ENDPOINTS 值中填写的是 "app:9092"),注意修改为实际的 IP 地址
EOF -
配置启动脚本
cat > /data/hap/script/startflink.sh <<-EOF
docker stack deploy -c /data/hap/script/flink.yaml flink
EOF
chmod +x /data/hap/script/startflink.sh -
启动数据集成服务
bash /data/hap/script/startflink.sh
- 数据集成服务容器启动后,进程需要5分钟左右才会启动完成
- 停止命令: docker stack rm flink
其他注意事项
数据集成服务需要 在文件存储 bucket 下创建两个目录 checkpoints、recovery 用于存储相关数据
如启用了外部对象存储,文件存储会切换到 S3 模式,数据集成使用会有问题,且数据集成服务目前尚不支持直接使用 S3 协议的对象存储
因此,如果启用了外部对象存储,目前需要新部署一个文件服务供数据集成服务使用
部署文件存储
-
新建
file-flink.yaml
version: '3'
services:
file-flink:
image: nocoly/hap-file:1.6.0
volumes:
- /usr/share/zoneinfo/Etc/GMT-8:/etc/localtime
- ./volume/data/file-flink/volume:/data/storage
environment:
MINIO_ACCESS_KEY: storage
MINIO_SECRET_KEY: ITwWPDGvSLxxxxxxM46XiSEmEdF4 # 注意自定义认证密钥
command: ["./main", "server", "/data/storage/data"]
ports:
- 9000:9000 -
下载 file 服务镜像
docker pull nocoly/hap-file:1.6.0
-
创建 file-flink 服务的持久化存储目录
mkdir -p /data/hap/script/volume/data/file-flink/volume
-
启动 file-flink 文件存储服务
docker stack deploy -c file-flink.yaml file-flink
-
进入 file-flink 容器中创建所需 bucket
docker exec -it xxx bash
- xxx 为 file-flink 的容器 id
-
创建 bucket
# mc 命令配置
mc config host add file-flink http://127.0.0.1:9000 storage ITwWPDGvSLxxxxxxM46XiSEmEdF4 # 注意修改为自定义认证密钥
# 创建所需 bucket:mdoc
mc mb file-flink/mdoc -
数据集成服务中修改相关变量,指定连接 file-flink 服务
ENV_FLINK_S3_ACCESSKEY: "storage"
ENV_FLINK_S3_SECRETKEY: "ITwWPDGvSLxxxxxxM46XiSEmEdF4" # 注意修改为自定义认证密钥
ENV_FLINK_S3_ENDPOINT: "192.168.10.30:9000" # 注意替换为 file-flink 服务的实际IP
ENV_FLINK_S3_BUCKET: "mdoc" -
重启 flink 服务
docker stack rm flink
sleep 30
bash /data/hap/script/startflink.sh