`
lzj0470
  • 浏览: 1272749 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用 C-JDBC 给 Mysql 集群

阅读更多
一、前言
         cjdbc ( http://c-jdbc.objectweb.org/ ) 是一个open source的数据库集群中间件,任何基于jdbc的应用都可以通过它透明地访问数据库集群,它可以进行各个节点之间的数据复制,并且可以实现各个节点的查询负载均衡。通过这样的软件,偶们可以方便的实现RAIDb - Redundant Array of Inexpensive Database 廉价数据库冗余阵列。
        大型应用随着用户量访问越来越大,增加数据库存储和做好数据库冗余可以增加系统的可靠性和性能。

        下面利用cjdbc,把两台对等的 Mysql 做 RAIDb,本文假定你已经搭建好两台对等的 Mysql环境并建好一个需要做集群冗余的数据库 clusterdb。
二、配置环境
Mysql: 5.0.19, 并使用 InnoDB 作为 Mysql 引擎

C-jdbc: 2.0.2

Jdk: 1.5
三、选择合适的 C-JDBC RAIDb 机制

cjdbc有几种RAIDb的机制可以选择,如RAIDb-0,RAIDb-1等等,可以根据不同的情况选择不同的RAIDb的机制。各种 RAIDb的机制详情请查看 cjdbc 的文档和 Demo。

RAIDb-1有如下功能:
完全镜像处理机制,每个节点上都有完整的数据库结构,这种方式提供了最好的容错处理,并且通过设置合理的Loading Balance策略,可以带来查询性能相当好的提高。但是由于对于任何的写操作(create/update/delete),需要在各个节点上进行传播复制,写操作就会比原来慢一些了,如下图:



这里选择 RAIDb-1 做为 cjdbc RAIDb 机制。

四、给两台对等的 Mysql 建表,假设两台 Mysql 的IP分别是 192.168.0.2和192.168.0.3
bash> mysql -h192.168.0.2 -uroot
bash> use clusterdb
bash> create table user (id int(3) not null auto_increment primary key, name char(50) not null) engine innodb;
bash> exit;

bash> mysql -h192.168.0.3 -uroot
bash> use clusterdb
bash> create table user (id int(3) not null auto_increment primary key, name char(50) not null) engine innodb;
bash> exit;
五、在 Linux 下安装 C-JDBC Controller
bash> mkdir -p /usr/local/c-jdbc
bash> cd /usr/local/c-jdbc
bash> tar xvfz c-jdbc-2.0.2-bin.tar.gz
bash> export CJDBC_HOME=/usr/local/c-jdbc
六、把 Mysql JDBC Driver 放到 C-JDBC Controller 中来

这里我们使用 mysql-connector-java-3.1.12-bin.jar 驱动程序,把它放到
/usr/local/c-jdbc/drivers 中

七、配置 C-JDBC Controller
1、在 /usr/local/c-jdbc/config/virtualdatabase 目录中创建 虚拟数据库配置文件,并把它命名为 mysql-raidb1-distribution.xml,内容如下:

<?xml version="1.0" encoding="UTF8"?>
<!DOCTYPE C-JDBC PUBLIC "-//ObjectWeb//DTD C-JDBC 2.0.2//EN" "http://c-jdbc.objectweb.org/dtds/c-jdbc-2.0.2.dtd">

<C-JDBC>

<VirtualDatabase name="myDB">

<Distribution>
</Distribution>

<AuthenticationManager>
<Admin>
<User username="admin" password="c-jdbc"/>
</Admin>
<VirtualUsers>
<VirtualLogin vLogin="boss" vPassword="boss"/>
</VirtualUsers>
</AuthenticationManager>

<DatabaseBackend name="mysqlNode211" driver="org.gjt.mm.mysql.Driver" url="jdbc:mysql://192.168.0.2/clusterdb" connectionTestStatement="select 1">
<ConnectionManager vLogin="boss" rLogin="boss_user" rPassword="123456">
<VariablePoolConnectionManager initPoolSize="10" minPoolSize="10" maxPoolSize="50" idleTimeout="30" waitTimeout="10"/>
</ConnectionManager>
</DatabaseBackend>

<DatabaseBackend name="mysqlNode213" driver="org.gjt.mm.mysql.Driver" url="jdbc:mysql://192.168.0.3/clusterdb" connectionTestStatement="select 1">
<ConnectionManager vLogin="boss" rLogin="boss_user" rPassword="123456">
<VariablePoolConnectionManager initPoolSize="10" minPoolSize="10" maxPoolSize="50" idleTimeout="30" waitTimeout="10"/>
</ConnectionManager>
</DatabaseBackend>

<RequestManager>
<RequestScheduler>
<RAIDb-1Scheduler level="passThrough"/>
</RequestScheduler>

<LoadBalancer>
<RAIDb-1>
<WaitForCompletion policy="first"/>
<RAIDb-1-LeastPendingRequestsFirst/>
</RAIDb-1>
</LoadBalancer>
</RequestManager>

</VirtualDatabase>

</C-JDBC>

2、在 /usr/local/c-jdbc/config/controller 目录中创建 C-JDBC controller 配置文件,并把它命名为 uud-controller-distributed.xml,内容如下:

<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE C-JDBC-CONTROLLER PUBLIC "-//ObjectWeb//DTD C-JDBC-CONTROLLER 2.0.2//EN" "http://c-jdbc.objectweb.org/dtds/c-jdbc-controller-2.0.2.dtd">
<C-JDBC-CONTROLLER>
<Controller port="25323">
<JmxSettings>
<RmiJmxAdaptor port="1091"/>
</JmxSettings>
<VirtualDatabase configFile="mysql-raidb1-distribution.xml" virtualDatabaseName="myDB" autoEnableBackends="true"/>
</Controller>
</C-JDBC-CONTROLLER>

3、在 /usr/local/c-jdbc/config/demo 目录中创建启动 C-JDBC controller sh,并把它命名为 uud-distributed-raidb1-controller.sh,内容如下:

#!/bin/sh

export CJDBC_HOME=/usr/local/c-jdbc
export JAVA_HOME=/opt/jdk1.5

cd $CJDBC_HOME/bin

echo "Waiting for mysql servers to finish start up"

echo "Starting Controller"
./controller.sh -f ../config/controller/uud-controller-distributed.xml &

八、启动 C-JDBC Controller
bash> cd /usr/local/c-jdbc/demo
bash> chmod u+rwx uud-distributed-raidb1-controller.sh
bash> ./uud-distributed-raidb1-controller.sh &

如果启动正常,显示的信息如下:

Waiting for mysql servers to finish start up
Starting Controller
2006-04-20 10:32:21,126 INFO controller.core.Controller C-JDBC controller (2.0.2)
2006-04-20 10:32:21,189 INFO controller.core.Controller Loading configuration file: ../config/controller/uud-controller-distributed.xml
2006-04-20 10:32:21,278 INFO controller.core.Controller JMX is enabled
2006-04-20 10:32:21,308 INFO controller.core.Controller Starting JMX server on host: 127.0.0.1
2006-04-20 10:32:21,674 INFO backend.DatabaseBackend.mysqlNode211 Adding connection manager for virtual user "boss"
2006-04-20 10:32:21,749 INFO backend.DatabaseBackend.mysqlNode213 Adding connection manager for virtual user "boss"
2006-04-20 10:32:21,809 INFO controller.RequestManager.myDB Request manager will parse requests with the following granularity: NO_PARSING
2006-04-20 10:32:21,814 INFO controller.virtualdatabase.myDB Configuring jgroups using: file:/usr/local/c-jdbc/config/jgroups.xml

-------------------------------------------------------
GMS: address is 127.0.0.1:32773
-------------------------------------------------------
2006-04-20 10:32:26,476 INFO controller.virtualdatabase.myDB Group myDB connected to /127.0.0.1:32773[/127.0.0.1:32773]
2006-04-20 10:32:26,476 INFO controller.virtualdatabase.myDB First controller in group myDB
2006-04-20 10:32:26,477 WARN controller.virtualdatabase.myDB No recovery log has been configured, enabling backend without checkpoint.

[1]+ Done ./uud-distributed-raidb1-controller.sh

八、编写 C-JDBC 客户端程序
1、把 C-JDBC Drivers(/usr/local/c-jdbc/drivers/c-jdbc-driver.jar) 放置到 CLASSPATH 中
2、编写插入 10 条数据到 Mysql 中,程序如下:

/**
* @author 胡荣华
* @Company 世纪龙 21cn
*/
package com.cjdbc.test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.DriverManager;

/**
*
*/
public class GenerateSampleData {

public void generate() {
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 这是 c-jdbc drivers 的 Drivers class,注意不是 mysql 的 Drivers class
Class.forName("org.objectweb.cjdbc.driver.Driver").newInstance();
// 192.168.0.1 是 cjdbc controller 所在的 ip
// myDB 是在 文件 mysql-raidb1-distribution.xml 里定义的 <VirtualDatabase name="myDB">
// user=boss&password=boss 是在 文件 mysql-raidb1-distribution.xml 里定义的
// <VirtualUsers>
// <VirtualLogin vLogin="boss" vPassword="boss"/>
// </VirtualUsers>

String url = "jdbc:cjdbc://192.168.0.1:25323/myDB?user=boss&password=boss";

conn = DriverManager.getConnection(url);

try{
conn.setAutoCommit(false);
pstmt = conn.prepareStatement("insert into user values ('', ?)");

int numOfTestRecords = 10;
System.out.println("Update Record Start.");
for (int i=0;i<numOfTestRecords;i++) {
String newkey = i + "-" + i;
pstmt.setString(1, "hua_" + newkey);
pstmt.executeUpdate();

}
conn.commit();
System.out.println("Update Record Success.");
}
catch(Exception ex){
conn.rollback();
ex.printStackTrace();
}
finally{
try {
if( pstmt != null )
pstmt.close();
if( conn != null)
conn.close();
}
catch(Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
GenerateSampleData g = new GenerateSampleData();
g.generate();

}

}

3、程序执行完毕后,分别到 Mysql Node 192.168.0.2 和 192.168.0.3 查询,看看是否已同步了数据,如果两个 Mysql Node 都有相同的数据,说明 C-JDBC 环境搭建成功。

分享到:
评论

相关推荐

    elasticsearch-jdbc-2.3.3.0-dist.zip

    使用Elasticsearch-JDBC连接MySQL的过程大致如下: 1. **配置JDBC River**: 在Elasticsearch中创建一个名为"river"的特殊索引类型,用于定义数据源和导入规则。配置包括数据库URL、用户名、密码、表名以及映射到...

    springboot整合sharding-jdbc完整代码

    SpringBoot整合Sharding-JDBC是将Sharding-JDBC这一分布式数据库中间件与SpringBoot框架结合,以实现数据分片、读写分离等高级数据库管理功能。这个完整的代码示例覆盖了Sharding-JDBC的主要技术点,使开发者可以...

    elasticsearch-jdbc-2.2.0.0-dist

    Elasticsearch-JDBC是Elasticsearch的一个插件,主要用于将数据从关系型数据库(如MySQL、Oracle等)导入到Elasticsearch中,实现数据的实时同步。2.2.0.0是该插件的一个版本号,这通常代表了在那个特定时间点的稳定...

    c-jdbc 详细配置方案

    C-JDBC,全称Cluster JDBC,是一款用于数据库集群的中间件,它允许应用程序同时访问和操作多个数据库,实现数据的同步交换。以下是对C-JDBC的详细配置方案及其相关知识点的解析: 1. **下载与安装**: - 从官方...

    sharding-jdbc.rar

    **描述:**该压缩包内容主要涉及使用Sharding-JDBC技术在MySQL环境中实现数据库的分库分表和读写分离。分库分表是一种常见的数据库扩展策略,用于应对大数据量场景下的性能挑战。通过将单一的大表分解为多个小表,...

    sharding-jdbc,分布式数据库中间件.zip

    使用Sharding-JDBC需要以下步骤: 1. **配置分片规则**:定义分片策略,创建分片配置文件或使用Java API。 2. **集成Sharding-JDBC**:在项目中引入Sharding-JDBC的依赖,创建数据源和ShardingContext。 3. **...

    springcloud&sharding-jdbc.rar

    Sharding-JDBC支持SQL标准,并且兼容各种数据库,如MySQL、Oracle、SQL Server等。 四、Sharding-JDBC的核心特性 1. 数据库分片:根据业务规则,将数据分布到多个数据库中,解决单表数据量过大的问题。 2. 并行...

    activemq-store-jdbc-2.1.jar.zip

    在标题提及的"activemq-store-jdbc-2.1.jar.zip"中,包含的主要组件是"activemq-store-jdbc-2.1.jar",这是一个针对ActiveMQ存储层使用关系型数据库(如MySQL、Oracle等)的实现。这个JAR文件扮演着关键角色,使得...

    Spring + Ibatis 与mysql集群集成

    2. **Spring配置**:在Spring应用上下文中,你需要配置JDBC数据源以连接到MySQL集群。可以使用`com.mysql.jdbc.jdbc2.optional.MysqlDataSource`类,设置节点地址、用户名、密码等参数。 3. **Ibatis配置**:Ibatis...

    aws-mysql-jdbc:适用于MySQL的Amazon Web Services(AWS)JDBC驱动程序是一种驱动程序,使应用程序可以充分利用群集MySQL数据库的功能

    适用于MySQL的Amazon Web Services(AWS)JDBC驱动程序适用于MySQL的Amazon Web Services(AWS)JDBC驱动程序是一种驱动程序,使应用程序可以充分利用群集MySQL数据库的功能。 它基于,并且可以用作该插件的兼容并且...

    hive jdbc 连接所需要的jar包

    11. **jdbc-driver的其他依赖**: 取决于你所使用的JDBC驱动,例如MySQL、Oracle等,如果Hive数据库是建立在这些关系型数据库之上,那么相应的JDBC驱动也是必要的。 在实际开发中,你需要将这些jar包添加到项目的类...

    MySQL集群配置与使用(Windows环境)

    Windows环境下MySQL集群的搭建,使用了三个节点,第一个节点作为管理节点,第二个节点作为数据节点A和SQL节点A,第三个节点作为数据节点B和SQL节点B。 ...第三,演示了如何使用JDBC连接MySQL集群。

    activemq-store-jdbc-1.5.jar.zip

    Store JDBC是ActiveMQ的一种存储实现,它允许消息数据存储在关系数据库中,如MySQL、Oracle或PostgreSQL等。这种存储方式提供了高可靠性和可恢复性,因为数据库系统通常具有事务处理和数据备份的能力。 二、版本1.5...

    利用JDBC和MySQL Replication实现数据库集群

    针对这一情况,提出在现有硬件的基础上利用JDBC规范与MySQL Replication实现数据库集群从而解决数据访问瓶颈。其主要方法是在进行JDBC连接之前实现负载均衡,所有SQL请求由负载均衡器进行统一调度。在数据库端利用...

    最新的mysql的jar包,mysql-connector-java-8.0.12

    MySQL的JDBC驱动,也被称为`mysql-connector-java`,是连接Java应用程序与MySQL数据库的关键组件。`mysql-connector-java-8.0.12`是这个驱动的特定版本,适用于那些希望使用Java语言进行MySQL数据库操作的开发者。在...

    flink1.14.6版本 lib目录依赖jar包

    flink-connector-jdbc_2.12-1.14.6.jar、flink-doris-connector-1.14_2.12-1.1.1.jar、flink-sql-connector-mysql-cdc-2.2.1.jar、mysql-connector-java-5.1.27-bin.jar、flink-dist_2.12-1.14.6.jar、flink-faker-...

    kafka-connect-jdbc-4.1.1.zip

    在实际使用中,`kafka-connect-jdbc-4.1.1.jar` 文件是该插件的二进制库,包含了运行Kafka Connect JDBC所需的所有代码和依赖。要部署这个插件,通常需要将其添加到Kafka Connect集群的类路径中,并配置相应的连接器...

    高可用MYSQL,主从复制,集群和负载平衡

    高可用MYSQL主从复制、集群和负载平衡 MySQL 集群是指将多个 MySQL 服务器组合成一个集群,以提高数据库的可用性、可扩展性和性能。MySQL 集群可以分为多种类型,例如主从复制集群、多主多从集群、负载平衡集群等...

    mysql集群主从安装总结

    ### MySQL集群主从安装总结 在本篇文章中,我们将详细探讨如何进行MySQL集群的主从复制配置,并通过一系列具体的步骤来实现这一目标。MySQL主从复制是一种常见的数据冗余技术,它能够帮助我们构建高可用性和高可靠...

    达梦数据库连接方式及jdbc驱动包.rar

    使用的是达梦7,这个数据库有很多BUG,官方提供的客户端,不仅卡,而且登录了后,使用Java JDBC操作更新时,是会被阻塞的,所以,在使用Java开发达梦应用时候,尽量关闭他客户端。 另外达梦还有个模式的概念,这...

Global site tag (gtag.js) - Google Analytics