mySql数据库如果采用复制(Replication)方式的群集,在程序中进行读写分离的处理办法有如下几种:
自动主从管理方案有: MHA 官方介绍:https://code.google.com/p/mysql-master-ha/
1、采用 MySql提供的 ReplicationDriver 驱动程序, 简单的过程如下:
缺点: 无法集成到 Spring 进行读写分离操作。
public static void main(String[] args) throws Exception {
ReplicationDriver driver = new ReplicationDriver();
Properties props = new Properties();
// We want this for failover on the slaves
props.put("autoReconnect", "true");
// We want to load balance between the slaves
props.put("roundRobinLoadBalance", "true");
props.put("user", "foo");
props.put("password", "bar");
//
// Looks like a normal MySQL JDBC url, with a
// comma-separated list of hosts, the first
// being the 'master', the rest being any number
// of slaves that the driver will load balance against
//
Connection conn =
driver.connect("jdbc:mysql://master,slave1,slave2,slave3/test",
props);
//
// Perform read/write work on the master
// by setting the read-only flag to "false"
//
//这个节点应该是通过spring的事务管理来设置,同时这个conn对象应该不是一个真正的connection,
//而是一个代理类,通过设置readonly,代理类会去使用不同的connection,
//那么问题是它该代理类使用的connection是哪里取的,抑或说难道它每次都会新开一个connection?,需要看源代码
conn.setReadOnly(false);
conn.setAutoCommit(false);
conn.createStatement().executeUpdate("UPDATE some_table ....");
conn.commit();
//
// Now, do a query from a slave, the driver automatically picks one
// from the list
//
conn.setReadOnly(true);
ResultSet rs =
conn.createStatement().executeQuery("SELECT a,b FROM alt_table");
.......
}
2、采用 多数据源方式配置, 如:配置写数据源, 读数据源, 在程序中选择使用。
#读数据源
DBDriver=com.mysql.jdbc.Driver
url=jdbc\:mysql\:loadbalance\://slave1,slave2,slave3\:3306/test?roundRobinLoadBalance\=true&characterEncoding\=UTF-8
name=test
pass=test
characterEncoding=utf8
#写数据源
DBDriver=com.mysql.jdbc.Driver
url=jdbc\:mysql\:loadbalance\://master\:3306/test?roundRobinLoadBalance\=true&characterEncoding\=UTF-8
name=test
pass=test
characterEncoding=utf8
3、Mysql Router
MySQL Proxy 是非 GPL 的, 所以选择 MySql Router ,
MySQL Router是一个轻量级的中间件,提供了应用程序与后端数据库的透明路由,是mysql用来实现负载均衡和高可用功能。
同时router也提供了使用fabric 高可用的方式。
配置中:
mode = read-only时,
客户端请求将被循环分发给配置列表,当配置列表中服务器不可用,将会跳过该服务器,
列表中下一个可用机器将处理请求,如列表没有可用服务器,路由将失败。
mode = read-write时,
所有客户端请求都会被列表中第一个可用服务器处理,当此服务器宕机时,
列表中下一个可用机器才会处理客户端请求,如列表没有可用服务器,路由将失败。
第一个被成功连接的服务器信息将被保存在内存中,重启router后失效。
这样可以通过 Router 访问 mysql , 这样做好像也没有什么明显的好处(除负载均衡外)。
4、下面的数据库中间件 可以 访问 读写分离的 mysql 数据库集群,摘录如下,以备查看。
A、Amoeba
百度知道地址: http://baike.baidu.com/link?url=N2uPirw5znkFAvFUh0PDLlRLy7flqfUNdJmsP6oNCm-ziGrFSxzX-H1_fnjJ1FmjGjyZ1daDPc_euxVwcg-OBq
从官网看, 最近一次更新在: Last Update: 2013-07-05
B、Mycat
http://www.mycat.org.cn/
国内最活跃的、性能最好的开源数据库中间件!
这个很活跃,国人的,请大力支持。
- 浏览: 212385 次
- 性别:
- 来自: 深圳
最新评论
-
白云天:
主机网络端口使用命令: netstat -nplt
centos7.4上安装mysql5.7记录 -
白云天:
登录到 容器内部 docker ps -a查询容器IDsudo ...
docker初探 -
白云天:
export jars to local directory ...
Camel的direct,Bean测试 -
白云天:
location /esb/ { proxy_ ...
Camel的direct,Bean测试 -
白云天:
centos 中添加 shell_script.sh 为开机启 ...
Camel的direct,Bean测试
相关推荐
centos7搭建mysql集群,包含整个搭建步骤,部分错误解决方案
Spring + Ibatis 与mysql集群集成
Windows环境下MySQL集群的搭建,使用了三个节点,第一个节点作为管理节点,第二个节点作为数据节点A和SQL节点A,第三个节点作为数据节点B和SQL节点B。 此外,还演示了如何使用图形化客户端管理MySQL集群,新建数据库...
最近公司要大家mysql集群,整理了一下文档
mysql集群对比,8中方案对比,附原理图
使用Docker建立Mysql集群使用Docker建立Mysql集群使用Docker建立Mysql集群使用Docker建立Mysql集群
linux 下mysql集群安装配置 Centos
mysql集群的一种方案
此文档中包括mysql集群安装手册的详细步骤和mysql集群安装中可能会遇到的问题解决方法
linux服务器做mysql数据库集群,很好不错的文档、很实用。
MySQL Cluster(MySQL 集群) 测试环境: CentOS4.6 数据库版本: mysql-cluster-gpl-6.3.20
centOS-6.3安装Mysql集群,Mysql集群易于搭建,基于内存运行,不需要共享存储,非常方便
介绍MySQL的cluster集群安装的详细步骤,供大家学习使用,
MySQL集群,MySQL主从安装总结
Centos7_1611_64bit安装mysql集群方案:1+2+2(3台服务器)环境清理及准备(在各节点服务器上都要执行)清除MySQL旧版本,首先使用如下
MySQL集群评估手册.pdf
mysql集群安装和初步配置
本文档讲述了MySql集群搭建方案,比较详细的。特分享下载。
资源名称:5台MYSQL集群资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
RHEL服务器下架设MYSQL集群 RHEL服务器下架设MYSQL集群 RHEL服务器下架设MYSQL集群