集群部署
集群部署提供高可用性和负载均衡,适用于生产环境。
此文档主要说明流程引擎的集群部署,数据库和 Redis 是否使用集群,根据项目实际情况选择。
准备工作
此文档步骤说明基于流程引擎开发环境更新,建议本地先部署开发环境,再进行集群配置修改。
开发环境部署步骤参考:开发环境部署
架构设计
负载均衡层
├── Nginx / LVS
应用层
├── Node 1 (流程引擎)
├── Node 2 (流程引擎)
└── Node 3 (流程引擎)
数据层
├── MySQL (可做主从复制)
└── Redis (可做集群)节点配置
服务器配置建议(200并发)
| 节点类型 | CPU | 内存 | 磁盘 | 用途 |
|---|---|---|---|---|
| 应用节点 | 32核 | 64GB | 200GB | 运行流程引擎应用 |
| 数据库节点 | 16核 | 32GB | 1TB | 存储流程数据 |
| Redis节点 | 4核 | 8GB | 100GB | 缓存和Session存储 |
修改步骤
第一步:开启工作流的集群模式
修改 hzwf_config.properties 文件:
从 JAR 包中提取配置文件,路径:
/horizon-workflow-pub-8.X.jar/hzwf_config.properties将文件复制到工程的
src/main/resources/目录下,修改IsCluster=true

第二步:修改缓存模式
开启集群之后,需要修改成能支持集群的缓存模式,本方案选用 Redis。
修改步骤查看:集成 Redis
第三步:开启 Spring Session
3.1 添加依赖
修改 pom.xml 文件,增加 Spring Session 的依赖包:
<!-- Spring Session 与 Redis 集成配置 -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>3.2 配置 Spring Session
修改 application.properties 配置文件,增加 Spring Session 的配置:
# Spring Session 配置 - 处理集群模式下的 Session 一致性
spring.session.store-type=redis
# Redis 连接配置
spring.redis.host=127.0.0.1
spring.redis.password=
spring.redis.port=6379
第四步:更新补丁文件
更新附件中的两个 Java 文件到项目环境:
| 文件 | 说明 |
|---|---|
ContextListener.java | 上下文监听器 |
HorizonDomainFilter.java | 域名过滤器(平台环境需改名为 HorizonPlatFormDomainFilter) |
注意:项目需根据自身 JDK 版本进行编译。
第五步:修改 Spring 注册类加载顺序
拷贝源码:将jar包中的源码:/horizon/horizon-workflow-conf-8.2.3.jar!/com/horizon/boot/web/HorizonMvcConfigAdapter.java
拷贝到src下:src/main/java/com/horizon/boot/web/HorizonMvcConfigAdapter.java
修改说明:通过 setOrder() 方法修改过滤器优先级,使其执行顺序位于 SessionRepositoryFilter 之后。
修改 1:Session 一致性过滤器
/**
* 保持 Session 一致性过滤器
* @return
*/
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
HorizonDomainFilter horizonDomainFilter = new HorizonDomainFilter();
registrationBean.setFilter(horizonDomainFilter);
registrationBean.setOrder(SessionRepositoryFilter.DEFAULT_ORDER + 1);
List<String> urlPatterns = new ArrayList<String>();
urlPatterns.add("/*");
registrationBean.setUrlPatterns(urlPatterns);
return registrationBean;
}
修改 2:请求过滤器
/**
* 请求过滤器
* @return
*/
@Bean
public FilterRegistrationBean registrationBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
WorkflowContextFilter wcf = new WorkflowContextFilter();
registrationBean.setOrder(SessionRepositoryFilter.DEFAULT_ORDER + 3);
registrationBean.setFilter(wcf);
registrationBean.addUrlPatterns("*.wf");
return registrationBean;
}
说明:Session 一致性过滤器优先级为
+1,请求过滤器优先级为+3,预留+2用于单点登录过滤器。
打包发布
将修改后的开发环境重新打包,发布到多个应用服务器中。
扩展说明
生产环境下,application.properties文件中springsession的增加以下配置,参数值和workflow-conf/properties/cache.properties里的redis值一致
#Redis连接池的最大连接数
spring.redis.jedis.pool.max-active=300
#Redis连接池中最大空闲连接数
spring.redis.jedis.pool.max-idle=100
#连接池最小空闲连接数
spring.redis.jedis.pool.min-idle=20
#连接池的最大阻塞等待时间,默认为-1,表示没有时间限制
spring.redis.jedis.pool.max-wait=10000msredis哨兵模式时,application.properties文件中springsession的配置方式:
spring.session.store-type=redis
#springsession 中 读取的redis信息配置
#哨兵主节点ip
spring.redis.host=192.168.3.170
#哨兵主节点端口
spring.redis.port=6379
spring.redis.password=123456
spring.redis.sentinel.master=mymaster
#哨兵的ip和端口
spring.redis.sentinel.nodes=192.168.3.170:26001,192.168.3.170:26002,192.168.3.170:26003集群验证
部署完成后,通过以下方式验证集群是否正常工作:
- 启动多个节点:确保所有应用节点都能正常启动
- Session 共享测试:在一个节点登录后,切换到其他节点验证 Session 是否共享
- 负载均衡测试:通过负载均衡器访问应用,验证请求是否均匀分发
- 故障转移测试:停止其中一个节点,验证其他节点能否正常处理请求
