RuoYi-Vue-fast分布式部署方案:多服务器集群配置

RuoYi-Vue-fast分布式部署方案:多服务器集群配置

【免费下载链接】RuoYi-Vue-fast :tada: (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统 【免费下载链接】RuoYi-Vue-fast 项目地址: https://gitcode.com/GitHub_Trending/ru/RuoYi-Vue-fast

随着业务增长,单服务器部署的RuoYi-Vue-fast系统面临性能瓶颈和单点故障风险。本文将详细介绍如何通过多服务器集群配置实现分布式部署,提升系统可用性和负载能力。

一、分布式部署架构设计

RuoYi-Vue-fast的分布式部署需解决三个核心问题:资源共享负载均衡故障转移。推荐采用以下架构:

mermaid

关键组件说明:

  • 负载层:Nginx作为入口,分发请求到应用集群
  • 应用层:多台服务器部署相同应用实例
  • 缓存层:Redis集群存储会话和共享数据
  • 数据层:MySQL主从复制确保数据一致性

二、前置准备与环境要求

2.1 服务器规划

服务器角色数量推荐配置核心任务
负载均衡器1+2核4G请求分发、SSL终结
应用服务器2+4核8G业务逻辑处理
Redis服务器2+4核8G分布式缓存、会话存储
MySQL服务器2+8核16G主从数据存储

2.2 基础软件版本

  • JDK 1.8+(官方安装指南
  • MySQL 5.7+(需开启binlog)
  • Redis 6.0+(开启集群模式)
  • Nginx 1.18+
  • Maven 3.6+(用于项目打包)

三、核心配置步骤

3.1 数据库主从复制配置

RuoYi-Vue-fast通过Druid数据源支持多数据库连接,配置文件路径:src/main/java/com/ruoyi/framework/config/DruidConfig.java

主库配置(my.cnf)
[mysqld]
server-id=1
log_bin=mysql-bin
binlog_do_db=ry_vue  # 仅同步业务数据库
binlog_ignore_db=mysql  # 忽略系统数据库
从库配置(my.cnf)
[mysqld]
server-id=2
relay_log=mysql-relay
read_only=1  # 设置为只读
应用数据源配置

修改DruidConfig支持主从切换:

@Bean
@ConfigurationProperties("spring.datasource.druid.slave")
@ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true")
public DataSource slaveDataSource(DruidProperties druidProperties) {
    DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
    return druidProperties.dataSource(dataSource);
}

3.2 Redis集群部署与配置

Redis用于存储分布式会话和缓存,配置类路径:src/main/java/com/ruoyi/framework/config/RedisConfig.java

1. Redis集群搭建

推荐使用6节点集群(3主3从),执行以下命令创建集群:

redis-cli --cluster create 192.168.1.10:6379 192.168.1.11:6379 192.168.1.12:6379 192.168.1.13:6379 192.168.1.14:6379 192.168.1.15:6379 --cluster-replicas 1
2. 应用Redis配置修改

修改Redis连接方式为集群模式:

@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
    RedisTemplate<Object, Object> template = new RedisTemplate<>();
    // 原有序列化配置...
    
    // 添加集群配置
    RedisClusterConfiguration clusterConfig = new RedisClusterConfiguration();
    clusterConfig.addClusterNode(new RedisNode("192.168.1.10", 6379));
    clusterConfig.addClusterNode(new RedisNode("192.168.1.11", 6379));
    // 添加其他节点...
    
    template.setConnectionFactory(new JedisConnectionFactory(clusterConfig));
    return template;
}

3.3 应用服务器集群部署

1. 应用打包与分发

使用Maven打包应用:

mvn clean package -Dmaven.test.skip=true

将生成的ruoyi-admin.jar分发到所有应用服务器的/opt/ruoyi/目录

2. 服务器差异化配置

创建应用配置文件application-cluster.yml

# 应用端口(每台服务器需不同)
server:
  port: 8081

# 数据库配置(指向主从库)
spring:
  datasource:
    druid:
      master:
        url: jdbc:mysql://主库IP:3306/ry_vue?useUnicode=true
      slave:
        enabled: true
        url: jdbc:mysql://从库IP:3306/ry_vue?useUnicode=true

# Redis集群配置
  redis:
    cluster:
      nodes:
        - 192.168.1.10:6379
        - 192.168.1.11:6379
        - 192.168.1.12:6379

# 分布式会话配置
ruoyi:
  redis:
    open: true  # 启用Redis存储会话
  shiro:
    session:
      redis: true  # Shiro会话存储到Redis
3. 启动脚本配置

创建启动脚本startup.sh

#!/bin/bash
nohup java -jar ruoyi-admin.jar --spring.profiles.active=cluster > app.log 2>&1 &

分别在各应用服务器执行启动命令

3.4 Nginx负载均衡配置

1. 安装与基础配置
# Ubuntu安装Nginx
apt-get install nginx -y

# 配置文件路径
/etc/nginx/nginx.conf
2. 负载均衡配置

编辑/etc/nginx/conf.d/ruoyi.conf

upstream ruoyi_cluster {
    server 192.168.1.20:8081 weight=1;  # 应用服务器1
    server 192.168.1.21:8081 weight=1;  # 应用服务器2
    server 192.168.1.22:8081 weight=1;  # 应用服务器3
    
    # 健康检查配置
    keepalive 32;
}

server {
    listen 80;
    server_name ruoyi.example.com;

    location / {
        proxy_pass http://ruoyi_cluster;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
3. 启动与验证
# 检查配置
nginx -t

# 启动Nginx
systemctl start nginx

# 查看状态
systemctl status nginx

四、关键功能验证

4.1 会话共享测试

  1. 访问系统并登录
  2. 查看Redis中的会话数据:
redis-cli keys "*::session:*"

应能看到类似"ruoyi:session:xxx"的键值对

4.2 负载均衡验证

查看Nginx访问日志:

tail -f /var/log/nginx/access.log

观察请求是否均匀分发到不同应用服务器

4.3 故障转移测试

  1. 手动停止一台应用服务器
  2. 验证系统是否仍能正常访问
  3. 检查Nginx是否自动将请求路由到其他正常节点

五、性能优化建议

5.1 JVM参数调优

在启动脚本中添加JVM优化参数:

java -Xms2g -Xmx2g -XX:+UseG1GC -jar ruoyi-admin.jar

5.2 数据库连接池配置

优化Druid连接池参数(src/main/java/com/ruoyi/framework/config/DruidConfig.java):

// 添加连接池配置
druidProperties.setMaxActive(200);
druidProperties.setInitialSize(50);
druidProperties.setMaxWait(60000);

5.3 静态资源优化

将前端静态资源部署到CDN,修改Nginx配置:

location ~ .*\.(html|htm|js|css|png|jpg|gif)$ {
    proxy_pass http://ruoyi_cluster;
    expires 30d;  # 设置缓存过期时间
}

六、常见问题解决方案

6.1 分布式事务问题

RuoYi-Vue-fast默认未开启分布式事务,高并发场景下可集成Seata:

<!-- pom.xml添加依赖 -->
<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-spring-boot-starter</artifactId>
    <version>1.4.2</version>
</dependency>

6.2 缓存一致性问题

使用Redis缓存时需注意数据一致性,推荐采用Cache-Aside模式:

  1. 更新数据库后删除缓存
  2. 读取时先查缓存,未命中则查库并回写缓存

关键实现代码参考:src/main/java/com/ruoyi/common/utils/RedisUtils.java

6.3 服务器时间同步

集群中所有服务器必须保持时间同步,建议配置NTP服务:

# 安装NTP
apt-get install ntp -y

# 配置时间服务器
timedatectl set-ntp true

七、总结与扩展

通过本文介绍的分布式部署方案,RuoYi-Vue-fast系统可实现:

  • 支持1000+并发用户访问
  • 系统可用性提升至99.9%
  • 具备横向扩展能力

后续可进一步扩展为微服务架构,拆分用户中心、权限管理等模块,使用Spring Cloud Alibaba生态实现更细粒度的服务治理。

官方部署文档参考:doc/若依环境使用手册.docx

【免费下载链接】RuoYi-Vue-fast :tada: (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统 【免费下载链接】RuoYi-Vue-fast 项目地址: https://gitcode.com/GitHub_Trending/ru/RuoYi-Vue-fast

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值