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作为基于SpringBoot和Vue的前后端分离权限管理系统,需要可靠的数据库容灾机制保障业务连续性。本文将详细介绍如何通过主从复制实现数据备份,结合故障转移机制构建高可用数据库架构。

主从复制实现指南

环境准备

  1. 安装MySQL数据库(推荐8.0+版本)
  2. 准备至少两台服务器(主库:192.168.1.100,从库:192.168.1.101)
  3. 确保服务器间网络互通,开放3306端口

主库配置

修改主库MySQL配置文件my.cnf

[mysqld]
server-id=1
log_bin=mysql-bin
binlog_format=row
expire_logs_days=7
binlog_do_db=ry_vue  # 仅同步ry_vue数据库

重启MySQL服务使配置生效:

systemctl restart mysqld

创建复制用户并授权:

CREATE USER 'repl'@'192.168.1.101' IDENTIFIED BY 'Replication@123';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.101';
FLUSH PRIVILEGES;

从库配置

修改从库MySQL配置文件my.cnf

[mysqld]
server-id=2
relay_log=mysql-relay-bin
read_only=1  # 设置从库为只读模式

重启MySQL服务后,配置主从连接:

CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='Replication@123',
MASTER_LOG_FILE='mysql-bin.000001',  # 主库当前binlog文件
MASTER_LOG_POS=154;  # 主库当前binlog位置

启动从库复制进程:

START SLAVE;

验证主从同步状态:

SHOW SLAVE STATUS\G

Slave_IO_RunningSlave_SQL_Running均为Yes,则表示主从复制配置成功。

应用层适配改造

动态数据源配置

RuoYi-Vue-fast已内置动态数据源支持,通过修改framework/datasource/DynamicDataSource.java实现读写分离:

public class DynamicDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        return DynamicDataSourceContextHolder.getDataSourceType();
    }
}

数据源切换注解

使用framework/aspectj/lang/annotation/DataSource.java注解实现方法级数据源切换:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataSource {
    String value() default DataSourceType.MASTER;
}

在Service层方法上添加注解实现读写分离:

@Service
public class SysUserServiceImpl implements ISysUserService {
    @Override
    @DataSource(DataSourceType.SLAVE)
    public List<SysUser> selectUserList(SysUser user) {
        return userMapper.selectUserList(user);
    }
    
    @Override
    @DataSource(DataSourceType.MASTER)
    public int insertUser(SysUser user) {
        // 数据插入逻辑
    }
}

故障转移机制实现

健康检查组件

通过定时任务监控数据库状态,实现类位于framework/task/RyTask.java

@Component
public class RyTask {
    @Autowired
    private ISysJobService jobService;
    
    @Scheduled(cron = "0/30 * * * * ?")
    public void checkDbHealth() {
        // 数据库健康检查逻辑
        if (!isMasterAlive()) {
            switchToSlave();
        }
    }
}

自动切换流程

  1. 主库故障检测
  2. 从库提升为主库
  3. 应用数据源切换
  4. 通知管理员

mermaid

系统配置与验证

数据库脚本准备

初始化数据库使用sql/ry_20250522.sqlsql/quartz.sql脚本,主从环境需确保两个数据库都完成初始化。

应用配置修改

修改application.yml配置文件,添加多数据源配置:

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    master:
      url: jdbc:mysql://192.168.1.100:3306/ry_vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
      username: root
      password: password
    slave:
      url: jdbc:mysql://192.168.1.101:3306/ry_vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
      username: root
      password: password

验证方法

  1. 正常情况下,写操作走主库,读操作走从库
  2. 手动停止主库MySQL服务,观察应用是否自动切换到从库
  3. 恢复主库后,检查数据同步情况和应用是否切回主库

最佳实践与注意事项

性能优化

  • 合理设置从库数量,分担读压力
  • 调整binlog格式,推荐使用ROW格式保证数据一致性
  • 定期清理过期日志,避免磁盘空间不足

监控告警

结合RuoYi-Vue-fast的监控模块:

配置数据库监控告警任务,及时发现并处理异常。

灾备演练

定期进行故障演练,验证容灾方案有效性:

  1. 模拟主库宕机
  2. 验证故障转移时间
  3. 检查数据一致性
  4. 恢复主库并重新配置主从

总结与展望

通过主从复制与故障转移方案,RuoYi-Vue-fast实现了数据库层面的高可用,有效保障了系统稳定性。未来可进一步引入数据库集群、数据分片等技术,应对更大规模的业务需求。

完整的容灾方案实现还需结合具体业务场景进行调整,建议参考官方文档doc/若依环境使用手册.docx和系统配置文件src/main/java/com/ruoyi/framework/config/DruidConfig.java进行深入配置。

【免费下载链接】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、付费专栏及课程。

余额充值