docs: 补充运维文档

This commit is contained in:
v-zhangjc9
2024-03-07 18:06:39 +08:00
parent 9124b92838
commit f61c72164c
14 changed files with 1291 additions and 26 deletions

336
README.md
View File

@@ -1,14 +1,46 @@
# Hudi Service
<!-- TOC -->
* [概述](#概述)
* [部署](#部署)
* [配置准备](#配置准备)
* [主机规划](#主机规划)
* [外部资源确认](#外部资源确认)
* [Hadoop配置](#hadoop配置)
* [外部组件部署](#外部组件部署)
* [Victoria Metrics](#victoria-metrics)
* [启动脚本](#启动脚本)
* [采集配置](#采集配置)
* [Loki](#loki)
* [配置文件](#配置文件)
* [Grafana](#grafana)
* [数据源配置](#数据源配置)
* [配置数据库](#配置数据库)
* [部署配置](#部署配置)
* [接口机目录规划](#接口机目录规划)
* [脚本生成](#脚本生成)
* [启动上传服务](#启动上传服务)
* [编译打包项目](#编译打包项目)
* [运维](#运维)
* [命令行](#命令行)
* [Web](#web)
* [模块](#模块)
* [Hudi 运行代码](#hudi-运行代码)
* [sync](#sync)
* [运维服务](#运维服务)
* [部署工具](#部署工具)
* [开发](#开发)
<!-- TOC -->
# 概述
围绕Hudi同步和压缩流程建立了一整套的工具和流程。
## 部署
# 部署
> 由于部份配置需要在源码增删,无法通过配置文件修改,**如果部署新集群建议对master建立分支进行操作避免配置混淆**
### 配置准备
## 配置准备
#### 主机规划
### 主机规划
通常来说,应用部署需要逻辑上规划有
@@ -20,18 +52,33 @@
组件机上规划有指标和日志汇聚hudi任务多的情况下对IO和磁盘有一定的负载要求建议单独部署。
#### 外部资源确认
### 外部资源确认
- 可用的Zookeeper集群增删改查
- 可用的Hadoop3集群HDFS增删改查
- 可用的Yarn集群(任务提交)
- 可用的应用部署主机Kerberos、JDK
- 部署主机到配置数据库的网络连通
- 部署主机到Pulsar集群的网络连通admin、client连通
- Yarn集群节点到组件机的网络连通
- Yarn集群节点到Pulsar集群的网络连通client
- Hadoop3
用于存放Hudi数据、Flink任务业务jar包等
- Yarn集群节点到HDFS的增删改查权限
- 应用部署主机到HDFS的增删改查权限
- Zookeeper
用于hudi同步压缩服务注册通常可以使用Hadoop3集群附带的zookeeper
- Yarn集群节点到zookeeper的网络连通
- 应用部署主机到zookeeper的网络连通
- Yarn
用于运行hudi同步压缩任务
- 应用部署主机提交任务的权限
- MySQL
配置数据库;目前和汇聚平台配置库耦合,不能改,只能直接使用汇聚配置数据库
- 应用部署节点到MySQL的访问连通
- Pulsar
数据源
- Yarn集群节点到pulsar的读取连通
- 应用部署主机到pulsar的client连通和admin连通
- 应用部署主机
部署配套应用服务
- JDK 1.8实现OpenJDK标准即可
- Kerberos
- 接口机到应用机的ssh免密用于服务启停部署
##### Hadoop配置
#### Hadoop配置
`config`目录下以「hudi数据所有集群名称+hudi同步运行集群名称」的格式建立配置文件夹`b2b12`,并将下列配置文件放在这里
@@ -40,34 +87,271 @@
- yarn-site.xml
- viewfs-mount-table.xml如果需要使用联邦core-site.xml也需要将引用改为相对路径引用
#### 外部组件部署
### 外部组件部署
##### Victoria Metrics
_组件安装包放在研发云制品库:[汇聚平台项目-制品库](https://www.srdcloud.cn/artifact/26151/project#generic)_
odcp-snapshot-generic-local/cluster-tools下面
##### Loki
#### Victoria Metrics
##### Grafana
Victoria Metrics是一款替代Prometheus的开源指标采集应用支持分布式部署和指标主动推送完全兼容Prometheus
API提供了接近数倍于Prometheus的性能。
#### 部署配置
_目前项目采用单节点模式部署,性能还有富裕,后期可根据性能需求,改为分布式部署。_
```
victoria_metrics-1.98
├── prometheus.yml 配置文件
├── start_victoria_metrics.sh 启动脚本
├── stop_victoria_metrics.sh 停止脚本
├── version
├── victoria-metrics-prod-amd64 x86架构
└── victoria-metrics-prod-arm64 arm架构
```
##### 启动脚本
启动脚本需要根据部署的主机区分CPU架构修改脚本内容引用合适的可执行文件。
用户名为`EsCFVuNkiDWv7PKmcF`,密码为`Abf%x9ocS^iKr3tgrd`用于保护Victoria Metrics的Web页面。
```Bash
nohup $current_path/victoria-metrics-prod-amd64 \
-search.maxQueryLen=1MB \
-promscrape.maxScrapeSize=100MB \
-loggerLevel=ERROR \
-storageDataPath=$current_path/data \
-retentionPeriod=7d \
-httpAuth.username=EsCFVuNkiDWv7PKmcF \
-httpAuth.password=Abf%x9ocS^iKr3tgrd \
-httpListenAddr=":35710" \
-promscrape.config=$current_path/prometheus.yml \
-promscrape.httpSDCheckInterval=15s \
> $current_path/victoria-metrics.log 2>&1 &
```
启动完成后可以通过脚本指定的端口`35710`访问Web页面即为启动成功。
![](assets/victoria_metrics_web.png)
##### 采集配置
Victoria Metrics的配置文件完全兼容Prometheus可以直接替换使用。
```yaml
global:
scrape_interval: 15s
scrape_timeout: 15s
scrape_configs:
# Victoria Metrics 本身的指标
- job_name: 'Victoria Metrics Single Cluster'
metrics_path: '/metrics'
basic_auth:
username: EsCFVuNkiDWv7PKmcF
password: Abf%x9ocS^iKr3tgrd
static_configs:
- targets:
- '132.126.207.34:35710'
# Loki日志采集
- job_name: 'Loki'
metrics_path: '/metrics'
static_configs:
- targets:
- '132.126.207.34:33100'
# 集群主机管理,根据需要启用
- job_name: 'Node Exporter'
metrics_path: '/metrics'
static_configs:
- targets:
- '132.126.207.124:20110'
# 应用服务的指标采集部署Victoria Metrics的时候可以注释等应用部署完成后再打开
- job_name: 'Service'
metrics_path: '/actuator/prometheus'
basic_auth:
username: AxhEbscwsJDbYMH2
password: cYxg3b4PtWoVD5SjFayWxtnSVsjzRsg4
# 可以通过service-cloud-query模块动态获取各个服务节点的IP
http_sd_configs:
- url: http://132.126.207.34:35690/hudi_services/service_cloud_query/cloud/targets
basic_auth:
username: AxhEbscwsJDbYMH2
password: cYxg3b4PtWoVD5SjFayWxtnSVsjzRsg4
```
#### Loki
Loki是一款日志汇聚工具Grafana公司出品可以通过Grafana直接查询日志相比ELK更为轻量级不需要额外的日志采集组件支持应用直接推送日志对简单的分布式应用更友好。
_根据规划Loki分为服务日志和Hudi日志选择两台机器分别部署Hudi日志较多如果所有日志划分到一个Loki可能会影响服务日志查询_
```
loki-2.9
├── stop_loki.sh 停止脚本
├── version
├── loki-linux-amd64 x86架构
├── loki-linux-arm64 arm架构
├── loki-config.yml 配置文件
├── start_loki.sh 启动脚本
└── logs
```
##### 配置文件
```yaml
# Loki不支持直接配置访问控制官方建议使用Nginx来实现
auth_enabled: false
query_range:
parallelise_shardable_queries: false
server:
# 日志推送端口
http_listen_port: 33100
grpc_listen_port: 39096
log_level: error
grpc_server_max_recv_msg_size: 1572864000
grpc_server_max_send_msg_size: 1572864000
common:
# 指向规划好的数据盘
path_prefix: /data/datalake/data/loki
storage:
filesystem:
chunks_directory: /data/datalake/data/loki/chunks
rules_directory: /data/datalake/data/loki/rules
replication_factor: 1
ring:
instance_addr: 127.0.0.1
kvstore:
store: inmemory
table_manager:
retention_deletes_enabled: true
retention_period: 72h
schema_config:
configs:
- from: 2023-12-06
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
```
#### Grafana
根据CPU架构选择`grafana-amd64-10.3`或者`grafana-arm64-10.3`部署包。
```
grafana-amd64-10.3
├── data
├── start_grafana.sh
├── stop_grafana.sh
├── npm-artifacts
├── packaging
├── plugins-bundled
├── public
├── bin
├── conf
├── storybook
├── tools
├── VERSION
├── LICENSE
├── NOTICE.md
├── README.md
└── Dockerfile
```
##### 数据源配置
根据部署的组件新增数据源其中Loki区分服务日志和Hudi日志如果没有部署两个可以不区分
![](assets/grafana_datasource.png)
### 配置数据库
`database`路径下,有数据库初始化脚本,其中`tb_app_hudi_job_config``tb_app_yarn_job_config`两张表提供了预设配置。
_建议为每一个环境创建一个单独的database避免不同集群的配置混在一起。_
```
database
├── tb_app_collect_table_info.sql
├── tb_app_collect_table_version.sql
├── tb_app_flink_job_config.sql
├── tb_app_global_config.sql
├── tb_app_hudi_compaction_job.sql
├── tb_app_hudi_compaction_metrics.sql
├── tb_app_hudi_event.sql
├── tb_app_hudi_job_config.sql
├── tb_app_hudi_sync_state.sql
└── tb_app_yarn_job_config.sql
```
### 部署配置
`service-cli/service-cli-runner/src/main/resources/application-b12.yml`为模版,补全应用部署信息
`service-web/src/main/resources/static/common/info.js#commonInfo`为模板补全web页面相关信息
## 运维
### 接口机目录规划
## 模块
选择一个空白目录作为根目录(下文简称「根目录」),创建下列子目录。
```
.
├── cloud 服务管理脚本
├── command 应用命令行
├── data 应用数据
├── extra 外部组件
├── logs 应用日志
└── uploader 上传服务
```
## 脚本生成
`bin/generate`
脚本复制到根目录下根据实际情况改动脚本中指向的一些目录、jdk和jar包路径执行脚本正常情况下脚本将会为`cloud``command``uploader`
目录生成脚本。
## 启动上传服务
_如果使用其他文件服务如YTP则不需要操作这一步直接使用其他文件服务即可。_
```
uploader
├── start.sh 启动脚本
├── stop.sh 停止脚本
└── update.sh 更新脚本
```
执行`start.sh`启动上传服务,默认端口为`36800`
## 编译打包项目
将文件服务的url补充到`bin/library.sh`中,执行`bin/build-all.sh`,打包编译全部模块并上传到文件服务。
# 运维
## 命令行
## Web
# 模块
模块主要分为三部分,包含 Hudi 运行代码、运维服务和部署工具。
### Hudi 运行代码
## Hudi 运行代码
#### sync
### sync
sync 模块包含 Hudi 运行的全部业务逻辑Hudi on flink 的运行模式为
### 运维服务
## 运维服务
### 部署工具
## 部署工具
## 开发
# 开发