使用 ReplicationConnection 连接 Master/Slave 实现负载均衡
2013-05-29 16:10
190 查看
应用程序通过调用Connection.setReadOnly(true)将事务设为只读,这将使事务被提交到那些通过轮转调度实现负载均衡的Slave服务器上(这将连接到一个Slave服务器上,除非Slave已在服务器集上被移除)。如果你要进行数据更新操作,或者你要进行一个时间敏感的读操作(在MySql上Master/Slave 间的数据同步是同步进行的),你可以通过调用Connection.setReadOnly(false)将与数据库的连接后的数据操作设为不是只读,则驱动程序将确保此连接的后续操作被发送到Master数据库上进行操作。驱动程序通过检查当前的autocommit(只动提交)标记,隔离级别,以及维护所有的数据库连接列表来实现负载均衡的功能。
在配置数据库连接池或为单独的程序创建JDBC驱动实例时,你必须使用" com.mysql.jdbc.ReplicationDriver " 类以便让驱动自动实现Master和Slave间的负载均衡。ReplicationDriver使用与标准的JDBC 驱动相同的URL格式连接数据库,目前ReplicationDriver不能和标准的java.sql.DriverManager一起工作,ReplicationDriver并不是使用java.sql.DriverManager连接数据库的,仅仅是使用它注册MySql
JDBC 驱动程序而已。
下面是一个简短的示例程序用以说明如何在单独的应用程序中通过ReplicationDriver连接数据库进行数据操作:
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.Properties;
import com.mysql.jdbc.ReplicationDriver;
public class ReplicationDriverDemo {
public static void main(String[] args) throws Exception {
ReplicationDriver driver = new ReplicationDriver();
Properties props = new Properties();
// 对Slave进行故障恢复
props.put("autoReconnect", "true");
// 在Slave上进行负载均衡
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"
//
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");
.......
}
}
负载均衡JDBC连接池(lbpol)工具封装了标准的JDBC驱动,它允许你使用数据连接池并能够通过它检查系统故障及不均衡的负载分布。如果你有兴趣了解lbpol,请查看下面链接http://code.tailrank.com/lbpool 。
相关文章推荐
- 使用 ReplicationConnection 连接 Master/Slave 实现负载均衡
- 使用Atlas实现MySQL读写分离+MySQL-(Master-Slave)配置
- Objective-C ,ios,iphone开发基础:使用第三方库FMDB连接sqlite3 数据库,实现简单的登录
- Java使用OCI驱动连接Oracle数据库实现方法
- 使用Apache通过JK实现多Tomcat负载均衡集群实现总结及自己的感悟
- JBoss AS7中的新概念-Domain[master配置domain.xml和host.xml和自己的管理员账号以及用于slave连接验证的账号,slave只需要配置host.xml配置文件即可]
- 使用JS实现单击连接保存图片
- 使用GPRS的cmwap接入点实现网络通讯--建立连接
- 负载均衡,最理想使用 redis实现session共享
- asterisk 使用php脚本连接oralce数据库 通过AMI端口实现预拨号(批量外呼)
- master-slave的实现
- java连接数据库方式(二):单独使用MyBatis 框架实现
- 使用Linux实现负载均衡zz
- ↑使用amoeba调度后端mysql服务器实现读写分离和负载均衡↑
- Haproxy+多台MySQL从服务器(Slave) 实现负载均衡
- Mysql 5.5.40实现一主多从 One-Master muil-slave
- 使用apache和nginx代理实现tomcat负载均衡及集群配置详解
- windows使用DNS循环复用实现负载均衡
- 使用zookeeper实现服务路由和负载均衡
- 使用表的自连接来实现层次化查询