spring读写分离已经有很多博文了,在此不再赘述。这里是使用的AbstractRoutingDataSource进行干预的。
问题:
一主一从无法满足高可用,如果主挂了,从是无写入的,写入也无法同步到主上,后面问题很多。
思路:
1.数据库层实现主主复制,为了保证数据不冲突,在应用层读写分离,保证一个主是写入的,另外一个是读的。
2.灾难恢复,任何一个主挂掉,起来以后可用从另外一台同步数据。
3.应用层监听数据库是否正常,如果有一个挂机,读写都转移到另外一台主机上。对业务层透明,继续使用读写分离,但数据源转到一个源上。反之也一样。
4.如果主机挂机恢复,应用层重新设置数据源,读写数据源再次分离,对业务层透明。两台机器重新都得到使用。
实验成功。
挂机,数据源切换到另外一个主机上;
恢复主机,数据源重新读写分离。
核心代码
private void resetDataSource(String masterDataSourceBean,String slaveDataSourceBean){ Map<Object,Object> map = new HashMap<Object,Object>(); map.put("master", SpringContextUtil.getBean(masterDataSourceBean)); map.put("slave", SpringContextUtil.getBean(slaveDataSourceBean)); dynamicDataSource.setTargetDataSources(map); dynamicDataSource.setDefaultTargetDataSource(SpringContextUtil.getBean(masterDataSourceBean)); dynamicDataSource.afterPropertiesSet(); }
后记
起一个线程定期连接数据库,如果数据库变化就进行数据源重新设置。
两台主数据库基本满足一般使用,灾难自动切换数据源。当然还可以再一拖N个从,那是后话。两台主同时挂了,那就悲催了。
参考:http://blog.csdn.net/huoyunshen88/article/details/36674861
相关推荐
通过使用SpringMVC,开发者可以将业务逻辑、视图渲染和用户请求分离开来,从而实现松耦合和高可维护性的应用。 MyBatis则是一个轻量级的Java持久层框架,它解决了传统JDBC操作数据库时的繁琐代码问题。MyBatis允许...
综上所述,ShardingSphere 是一个强大的分布式数据库解决方案,其核心功能包括分库分表、读写分离等,旨在帮助开发者构建高可扩展、高性能的数据库架构。通过理解 ShardingSphere 的各个组件和概念,开发者可以更好...
这个系统充分利用了微服务架构的优势,实现了高可扩展性和灵活性,为用户提供了一流的用户体验。 首先,Vue.js作为当前热门的前端JavaScript框架,以其轻量级、易于学习和强大的功能而备受开发者喜爱。Vue.js的核心...
3. **数据库优化**:面对海量数据,传统的单机数据库难以胜任,需要考虑分布式数据库、分库分表、读写分离等策略,如ShardingSphere、MyCat等中间件。同时,对SQL查询进行优化,减少全表扫描,使用索引提高查询效率...
它提供了一个模型-视图-控制器(MVC)架构,使得开发者可以清晰地分离业务逻辑、数据处理和用户界面。Spring MVC通过DispatcherServlet处理HTTP请求,并通过拦截器、控制器、视图解析器等组件协同工作。 2. **...
Struts2 负责提供 MVC 模型,将界面、业务逻辑和数据分离,并提供一个高可扩展的架构。Spring 作为核心,向上整合 MVC 框架,使用 Spring 的 IoC 容器来管理各组件之间之间的依赖关系,Spring 的声明事务将负责逻辑...
后端则是一个强大的技术组合,包括Redis作为缓存,MySQL作为主数据库,SSM(Spring、SpringMVC、MyBatis)作为基础的Java Web开发框架,Kafka作为消息队列,Elasticsearch用于全文搜索引擎,Quartz负责任务调度,...
在现代的Web开发中,Spring MVC框架以其强大的功能和灵活性被广泛采用,而MongoDB作为NoSQL数据库的代表,因其非关系型、高可扩展性的特点也备受青睐。本文将深入探讨如何将MongoDB与Spring MVC进行有效集成,构建...
- **MySQL**: 作为主数据库,支持读写分离,提升数据读取效率。 #### 三、关键组件使用方法详解 - **Dubbo使用方法**: - 服务发布: 使用Spring容器发布服务。 - 服务调用: 同样通过Spring容器调用服务。 - 注册...
主从复制则是为了提高系统的可用性和数据安全性,通过将主节点的数据实时同步到从节点,实现读写分离和故障切换。哨兵(Sentinel)系统进一步增强了主从复制的自动化和稳定性,可以监控主从节点的状态,并在主节点...
- **主从复制**:通过主从复制机制,实现数据的冗余备份和读写分离。 ##### Redis 的应用场景 - **高速缓存**:配合关系型数据库使用,作为缓存层提高数据访问速度。 - **频繁访问数据存储**:存储热点数据,减少对...
9. **分布式数据库**:对于大型分布式系统,单个数据库可能无法满足需求,这时可以采用分片、读写分离、分布式数据库如Cassandra、MongoDB等来解决。 10. **Distributed Tracing**:在复杂的分布式环境中,追踪请求...
Struts 作为表现层 MVC 框架,提供了一个高可扩展的架构,使用控制器和定制标签库将应用中的模型和视图分离,达到了层间松散耦合的效果,提高了系统的灵活性、重用性和维护性。Spring 作为核心,向上整合 MVC 框架,...
5. **读写分离**:采用主从复制策略,将读操作和写操作分离到不同的服务器,以减轻主库压力,确保数据的一致性,同时提高读取速度。 6. **负载均衡**:通过负载均衡器如Nginx,将用户的请求分发到不同的服务器,...
- NoSQL数据库:弱一致性,高可扩展性,适用于大数据量和高并发场景。 2. **数据库事务ACID特性** - **原子性**(Atomicity):事务作为一个整体被执行,要么全部完成,要么完全不做。 - **一致性**...