跳到主要内容

如何将数据集成服务独立部署

数据集成是 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.3
environment: &app-environment
ENV_ADDRESS_MAIN: "https://hap.domain.com"
ENV_APP_VERSION: "5.8.3"
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 重启微服务生效

数据集成服务部署

  1. 初始化 swarm 环境

    docker swarm init
  2. 创建目录

    mkdir -p /data/hap/script/volume/data
  3. 创建配置文件

    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
  4. 配置启动脚本

    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
  5. 启动数据集成服务

    bash /data/hap/script/startflink.sh
    • 数据集成服务容器启动后,进程需要5分钟左右才会启动完成
    • 停止命令: docker stack rm flink

其他注意事项

数据集成服务需要在文件存储 bucket 下创建两个目录 checkpoints、recovery 用于存储相关数据

启用了外部对象存储,文件存储会切换到 S3 模式,数据集成使用会有问题,且数据集成服务目前尚不支持直接使用 S3 协议的对象存储

因此,如果启用了外部对象存储,目前需要新部署一个文件服务供数据集成服务使用

部署文件存储

  1. 新建 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
  2. 下载 file 服务镜像

    docker pull nocoly/hap-file:1.6.0
  3. 创建 file-flink 服务的持久化存储目录

    mkdir -p /data/hap/script/volume/data/file-flink/volume
  4. 启动 file-flink 文件存储服务

    docker stack deploy -c file-flink.yaml file-flink
  5. 进入 file-flink 容器中创建所需 bucket

    docker exec -it xxx bash
    • xxx 为 file-flink 的容器 id
  6. 创建 bucket

    # mc 命令配置
    mc config host add file-flink http://127.0.0.1:9000 storage ITwWPDGvSLxxxxxxM46XiSEmEdF4 # 注意修改为自定义认证密钥

    # 创建所需 bucket:mdoc
    mc mb file-flink/mdoc
  7. 数据集成服务中修改相关变量,指定连接 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"
  8. 重启 flink 服务

docker stack rm flink
sleep 30
bash /data/hap/script/startflink.sh