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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值