`
rain010101
  • 浏览: 10525 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring下高可用数据库架构(读写分离+主主复制)

 
阅读更多

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

0
0
分享到:
评论

相关推荐

    springmvc+mybatis+redis

    通过使用SpringMVC,开发者可以将业务逻辑、视图渲染和用户请求分离开来,从而实现松耦合和高可维护性的应用。 MyBatis则是一个轻量级的Java持久层框架,它解决了传统JDBC操作数据库时的繁琐代码问题。MyBatis允许...

    shardingsphere_docs_cn.pdf

    综上所述,ShardingSphere 是一个强大的分布式数据库解决方案,其核心功能包括分库分表、读写分离等,旨在帮助开发者构建高可扩展、高性能的数据库架构。通过理解 ShardingSphere 的各个组件和概念,开发者可以更好...

    毕业设计:基于Vue+SpringCloud博客的设计与实现-微服务-分布式.zip

    这个系统充分利用了微服务架构的优势,实现了高可扩展性和灵活性,为用户提供了一流的用户体验。 首先,Vue.js作为当前热门的前端JavaScript框架,以其轻量级、易于学习和强大的功能而备受开发者喜爱。Vue.js的核心...

    亿级流量架构核心技术-架构学习

    3. **数据库优化**:面对海量数据,传统的单机数据库难以胜任,需要考虑分布式数据库、分库分表、读写分离等策略,如ShardingSphere、MyCat等中间件。同时,对SQL查询进行优化,减少全表扫描,使用索引提高查询效率...

    Hibernate OGM redis项目与Spring MVC集成.zip

    它提供了一个模型-视图-控制器(MVC)架构,使得开发者可以清晰地分离业务逻辑、数据处理和用户界面。Spring MVC通过DispatcherServlet处理HTTP请求,并通过拦截器、控制器、视图解析器等组件协同工作。 2. **...

    javaee电子商城系统课程设计.docx

    Struts2 负责提供 MVC 模型,将界面、业务逻辑和数据分离,并提供一个高可扩展的架构。Spring 作为核心,向上整合 MVC 框架,使用 Spring 的 IoC 容器来管理各组件之间之间的依赖关系,Spring 的声明事务将负责逻辑...

    基于 springboot 开发的论坛源码.zip

    后端则是一个强大的技术组合,包括Redis作为缓存,MySQL作为主数据库,SSM(Spring、SpringMVC、MyBatis)作为基础的Java Web开发框架,Kafka作为消息队列,Elasticsearch用于全文搜索引擎,Quartz负责任务调度,...

    spring-mongo-mvc:MongoDB和Spring MVC之间的简单集成

    在现代的Web开发中,Spring MVC框架以其强大的功能和灵活性被广泛采用,而MongoDB作为NoSQL数据库的代表,因其非关系型、高可扩展性的特点也备受青睐。本文将深入探讨如何将MongoDB与Spring MVC进行有效集成,构建...

    淘淘商城面试总结文档

    - **MySQL**: 作为主数据库,支持读写分离,提升数据读取效率。 #### 三、关键组件使用方法详解 - **Dubbo使用方法**: - 服务发布: 使用Spring容器发布服务。 - 服务调用: 同样通过Spring容器调用服务。 - 注册...

    redis_windows.doc

    主从复制则是为了提高系统的可用性和数据安全性,通过将主节点的数据实时同步到从节点,实现读写分离和故障切换。哨兵(Sentinel)系统进一步增强了主从复制的自动化和稳定性,可以监控主从节点的状态,并在主节点...

    redis6笔记,写的相当详细的笔记

    - **主从复制**:通过主从复制机制,实现数据的冗余备份和读写分离。 ##### Redis 的应用场景 - **高速缓存**:配合关系型数据库使用,作为缓存层提高数据访问速度。 - **频繁访问数据存储**:存储热点数据,减少对...

    Javafbyy.rar

    9. **分布式数据库**:对于大型分布式系统,单个数据库可能无法满足需求,这时可以采用分片、读写分离、分布式数据库如Cassandra、MongoDB等来解决。 10. **Distributed Tracing**:在复杂的分布式环境中,追踪请求...

    javaee电子商城系统课程设计.pdf

    Struts 作为表现层 MVC 框架,提供了一个高可扩展的架构,使用控制器和定制标签库将应用中的模型和视图分离,达到了层间松散耦合的效果,提高了系统的灵活性、重用性和维护性。Spring 作为核心,向上整合 MVC 框架,...

    蚂蚁金服、支付宝、海量账单、高并发查询、存储、容灾解决方案

    5. **读写分离**:采用主从复制策略,将读操作和写操作分离到不同的服务器,以减轻主库压力,确保数据的一致性,同时提高读取速度。 6. **负载均衡**:通过负载均衡器如Nginx,将用户的请求分发到不同的服务器,...

    代码编程 Java 中高级难度 笔试题(附答案)

    - NoSQL数据库:弱一致性,高可扩展性,适用于大数据量和高并发场景。 2. **数据库事务ACID特性** - **原子性**(Atomicity):事务作为一个整体被执行,要么全部完成,要么完全不做。 - **一致性**...

Global site tag (gtag.js) - Google Analytics