<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Dict.CN 在線詞典, 英語學習, 在線翻譯

    都市淘沙者

    荔枝FM Everyone can be host

    統計

    留言簿(23)

    積分與排名

    優秀學習網站

    友情連接

    閱讀排行榜

    評論排行榜

    使用 C-JDBC 給 Mysql 集群

    原文:http://huaronghu.spaces.live.com/blog/cns!B9A68E1C1CA857AD!288.entry

    使用 C-JDBC 給 Mysql 集群 
    潤名,Thursday Twentieth Of April    
    一、前言  
             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 -/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 環境搭建成功。
     
     
     
    關于作者  
      網名:潤名
    E
    -mail: winsonhrh@gmail.com

    現從事于 21cn 公司,從事 J2EE 架構設計,有五年 J2EE工作經驗。熱衷研究各種 Open Source Framework 的技術 
     
     

    posted on 2008-08-26 12:06 都市淘沙者 閱讀(540) 評論(0)  編輯  收藏 所屬分類: Oracle/Mysql/Postgres/

    主站蜘蛛池模板: 亚洲色偷偷综合亚洲AV伊人| 亚洲伊人tv综合网色| 久久亚洲国产精品五月天婷| 亚洲日韩国产AV无码无码精品| 日韩在线不卡免费视频一区| 亚洲一区二区三区亚瑟| 黄色免费在线网站| 亚洲永久中文字幕在线| 99热在线观看免费| 久久精品亚洲日本波多野结衣| 希望影院高清免费观看视频| 国产亚洲蜜芽精品久久| 成人免费无码精品国产电影| 国产精品玖玖美女张开腿让男人桶爽免费看 | 亚洲国产精品无码中文字| 和老外3p爽粗大免费视频| 亚洲精品无码你懂的网站| 免费无码中文字幕A级毛片| 亚洲爆乳少妇无码激情| 亚洲国产精品不卡在线电影| 成人爱做日本视频免费| 最近免费mv在线电影| 四虎精品成人免费视频| 亚洲一区中文字幕在线电影网| 亚洲中文无韩国r级电影| 四虎国产精品免费久久| a级精品九九九大片免费看| 亚洲自偷自偷在线成人网站传媒| 成人黄色免费网站| 97se亚洲国产综合自在线| 成人免费一区二区三区在线观看| 亚洲欧美中文日韩视频| 久久精品国产亚洲AV麻豆王友容| 日韩成人在线免费视频| 中文字幕免费视频一| 中文字幕a∨在线乱码免费看| 亚洲国产人成在线观看69网站 | 在线看片免费人成视频播| 久久精品国产亚洲AV高清热 | 亚洲精品精华液一区二区| 亚洲综合激情另类小说区|