最近在CentOS 7.x系统上部署SeaTunnel Web时遇到了不少坑,这里把完整的安装过程和问题解决方案整理出来。SeaTunnel作为一款开源的数据集成工具,其Web界面提供了可视化操作能力,但在实际部署中,从环境准备到服务启动,每一步都可能遇到各种"惊喜"。
首先确认系统版本和基础环境:
bash复制cat /etc/redhat-release # 确认是CentOS 7.x
free -h # 内存建议≥4GB
df -h # 磁盘空间建议≥20GB
注意:SeaTunnel Web对Java环境有特定要求,官方推荐使用JDK 8或11。实测发现OpenJDK 11兼容性最好。
必须安装的依赖包:
bash复制yum install -y epel-release
yum install -y wget unzip git python3 python3-pip
Python环境需要额外安装以下包:
bash复制pip3 install psutil
推荐使用OpenJDK 11:
bash复制yum install -y java-11-openjdk-devel
配置环境变量:
bash复制echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
验证安装:
bash复制java -version
下载最新版本(以2.3.3为例):
bash复制wget https://download.seatunnel.org/2.3.3/seatunnel-web-2.3.3-bin.tar.gz
tar -zxvf seatunnel-web-2.3.3-bin.tar.gz -C /opt/
mv /opt/seatunnel-web-2.3.3 /opt/seatunnel-web
SeaTunnel Web需要MySQL 5.7+或PostgreSQL 9+。以MySQL为例:
bash复制yum install -y mariadb-server mariadb
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation
创建数据库:
sql复制CREATE DATABASE seatunnel_web CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'seatunnel'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON seatunnel_web.* TO 'seatunnel'@'%';
FLUSH PRIVILEGES;
进入安装目录:
bash复制cd /opt/seatunnel-web/conf
修改application.yml:
yaml复制server:
port: 8801
spring:
datasource:
url: jdbc:mysql://localhost:3306/seatunnel_web?useSSL=false&serverTimezone=UTC
username: seatunnel
password: your_password
driver-class-name: com.mysql.jdbc.Driver
首次启动需要初始化数据库:
bash复制cd /opt/seatunnel-web/bin
./startup.sh init
正常启动:
bash复制./startup.sh start
检查日志:
bash复制tail -f /opt/seatunnel-web/logs/seatunnel-web.log
如果8801端口被占用:
bash复制netstat -tlnp | grep 8801
kill -9 [PID]
或者修改application.yml中的server.port配置。
检查要点:
bash复制systemctl status mariadb
firewall-cmd --list-ports
修改启动脚本:
bash复制vim /opt/seatunnel-web/bin/startup.sh
调整JVM参数:
bash复制JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m"
停止服务:
bash复制./shutdown.sh
重启服务:
bash复制./shutdown.sh
./startup.sh start
日志文件位置:
code复制/opt/seatunnel-web/logs/
建议配置日志轮转:
bash复制vim /etc/logrotate.d/seatunnel-web
添加内容:
code复制/opt/seatunnel-web/logs/*.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
copytruncate
}
开放必要端口:
bash复制firewall-cmd --zone=public --add-port=8801/tcp --permanent
firewall-cmd --reload
建议使用Nginx做反向代理:
nginx复制server {
listen 80;
server_name seatunnel.example.com;
location / {
proxy_pass http://127.0.0.1:8801;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
根据服务器配置调整:
bash复制vim /opt/seatunnel-web/bin/startup.sh
建议配置(8GB内存服务器):
bash复制JAVA_OPTS="-Xms2g -Xmx4g -XX:MaxPermSize=512m"
MySQL配置建议:
ini复制[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 200
bash复制mysqldump -u root -p seatunnel_web > seatunnel_web_backup.sql
bash复制cp -r /opt/seatunnel-web/conf /backup/seatunnel-conf
使用Prometheus监控JVM:
yaml复制- job_name: 'seatunnel-web'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['localhost:8801']
示例告警规则:
yaml复制groups:
- name: seatunnel-alerts
rules:
- alert: HighHeapUsage
expr: sum(jvm_memory_used_bytes{area="heap"}) by (instance) / sum(jvm_memory_max_bytes{area="heap"}) by (instance) > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: "High heap usage on {{ $labels.instance }}"
description: "Heap usage is {{ $value }}%"
使用Nginx做负载均衡:
nginx复制upstream seatunnel_web {
server 192.168.1.101:8801;
server 192.168.1.102:8801;
}
server {
listen 80;
server_name seatunnel.example.com;
location / {
proxy_pass http://seatunnel_web;
}
}
配置Redis共享会话:
yaml复制spring:
session:
store-type: redis
redis:
host: redis.example.com
port: 6379
建议备份脚本:
bash复制#!/bin/bash
DATE=$(date +%Y%m%d)
mysqldump -u root -p seatunnel_web > /backup/seatunnel-db-$DATE.sql
tar -czvf /backup/seatunnel-conf-$DATE.tar.gz /opt/seatunnel-web/conf
建议维护检查清单:
| 检查项 | 频率 | 检查方法 |
|---|---|---|
| 服务状态 | 每日 | systemctl status |
| 磁盘空间 | 每周 | df -h |
| 日志异常 | 每日 | grep ERROR /opt/seatunnel-web/logs/*.log |
| 备份有效性 | 每周 | 验证备份文件可恢复性 |
排查步骤:
常见原因:
排查命令:
bash复制curl -v http://localhost:8801
使用JMeter进行测试:
bash复制wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.4.1.tgz
tar -xzf apache-jmeter-5.4.1.tgz
配置MySQL主从复制:
ini复制[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
使用Keepalived实现VIP:
bash复制yum install -y keepalived
配置示例:
conf复制vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
}
}
创建Dockerfile:
dockerfile复制FROM openjdk:11-jre
COPY seatunnel-web /opt/seatunnel-web
EXPOSE 8801
CMD ["/opt/seatunnel-web/bin/startup.sh", "start"]
构建镜像:
bash复制docker build -t seatunnel-web:2.3.3 .
创建Deployment:
yaml复制apiVersion: apps/v1
kind: Deployment
metadata:
name: seatunnel-web
spec:
replicas: 2
selector:
matchLabels:
app: seatunnel-web
template:
metadata:
labels:
app: seatunnel-web
spec:
containers:
- name: seatunnel-web
image: seatunnel-web:2.3.3
ports:
- containerPort: 8801
| SeaTunnel Web版本 | SeaTunnel引擎版本 | JDK要求 |
|---|---|---|
| 2.3.x | 2.3.x | 8/11 |
| 2.2.x | 2.2.x | 8 |
| 2.1.x | 2.1.x | 8 |
实际部署中发现,合理配置JVM参数和数据库连接池大小对性能影响很大。建议在正式上线前进行充分的压力测试,根据测试结果调整配置参数。