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

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

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

    cerulean

    C-JDBC

    C-JDBC(Java 數據庫連接群集)作為開發源碼的數據庫群集中間件,可以讓任何應用程序通過JDBC能夠透明的訪問數據庫群集。數據庫可以分布在多個節點并可以進行數據復制,C-JDBC能夠均衡在這些節點之間的查詢負載。 C-JDBC通過軟件來實現RAIDb(廉價數據庫冗余陣列)。C-JDBC是GNU LGPL許可證下的ObjectWeb項目。
    http://c-jdbc.objectweb.org/網站上的C-JDBC-Brochure-EN.pdf寫的內容挺好。(C-JDBC)tutorial.pdf內容也挺翔實。

    大型應用隨著用戶量訪問越來越大,增加數據庫存儲和做好數據庫冗余可以增加系統的可靠性和性能。

    無需修改客戶端應用程序,無需變更應用服務器或數據庫服務器軟件。C-JDBC的JDBC driver把SQL請求轉給C-JDBC controller(負責在databases之間做負載均衡)
    The database is distributed and replicated among several nodes and C-JDBC load balances the queries between these nodes.
    就這一句話就太誘人了!

    上周的某一個上午,搞定C-JDBC的安裝配置啦~
    主要根據官方的user guide和這篇好文: http://huaronghu.spaces.live.com/blog/cns!B9A68E1C1CA857AD!288.entry


    準備工作:
    環境:windows,postgreSQL,JDK
    建立數據庫“們”,安裝若干db在若干server上,所以如果使用商業數據庫的話,就會需要好幾套的錢哪。
    安裝C-JDBC:
    下載了binary版的c-jdbc-2.0.2-bin.zip,解壓到作為C-JDBC server的機器上(e.g. C:\software\c-jdbc-2.0.2-bin),
    設置環境變量,新增系統變量:CJDBC_HOME =C:\software\c-jdbc-2.0.2-bin
    把實際使用的數據庫的JDBC driver(例如mysql-connector-java-3.1.12-bin.jar ,postgresql-8.0.309.jdbc2.jar)拷貝到c-jdbc/drivers 中

    配置文件:
    在c-jdbc-2.0.2-bin/config/virtualdatabase目錄中創建虛擬數據庫配置文件。
    里面DatabaseBackend 標簽中定義的就是被集群的數據庫。
    試驗時,創建了文件:postgresql-raidb1-distribution.xml,使用了2個postgreSQL數據庫,采用了全復制的方法。
    注意,如果采用全復制,所以在2個數據庫上建庫、建表的全部腳本都要完全相同,否則將會報出mismatch的錯誤。
    目前感覺配置里面最有用的配置就是<AuthenticationManager>,<DatabaseBackend>和<LoadBalancer>(還沒有仔細看)。
    配置時可以參考已經提供的例子,c-jdbc-2.0.2-bin/config/RAIDb-1-full-example.xml,里面對每一個屬性都有比較詳細的注釋,DatabaseBackend中還有各個開源數據庫連接的例子,挺貼心的。

    <? 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" ?maxNbOfConnections ="20" ?minNbOfThreads ="1" ?maxNbOfThreads ="20" ?blobEncodingMethod ="hexa" >
    ????
    < AuthenticationManager >
    ??????
    < Admin >
    ???????
    < User? username ="admin" ?password ="c-jdbc" />
    ??????
    </ Admin > ?
    ??????
    < VirtualUsers >
    ????????
    < VirtualLogin? vLogin ="boss" ?vPassword ="boss" />
    ??????
    </ VirtualUsers >
    ????
    </ AuthenticationManager >

    ???
    < DatabaseBackend? name ="postgreSQLNode114" ?driver ="org.postgresql.Driver" ?url ="jdbc:postgresql://10.10.0.114:5432/clusterdb" ?connectionTestStatement ="select?now()" >
    ?
    < DatabaseSchema? dynamicPrecision ="column" />
    ??????
    < ConnectionManager? vLogin ="boss" ?rLogin ="postgres9" ?rPassword ="12345" >
    ?
    < RandomWaitPoolConnectionManager? poolSize ="20" />
    ??????
    </ ConnectionManager >
    ????
    </ DatabaseBackend >

    ????
    < DatabaseBackend? name ="postgreSQLNode155" ?driver ="org.postgresql.Driver" ?url ="jdbc:postgresql://10.10.0.155:5432/clusterdb" ?connectionTestStatement ="select?now()" >
    ?
    < DatabaseSchema? dynamicPrecision ="column" />
    ??????
    < ConnectionManager? vLogin ="boss" ?rLogin ="postgres" ?rPassword ="abcde" >
    ?
    < RandomWaitPoolConnectionManager? poolSize ="20" />
    ??????
    </ ConnectionManager >
    ????
    </ DatabaseBackend >

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

    ??????
    < RequestCache >
    ?????????
    < MetadataCache? maxNbOfMetadata ="10000" ?maxNbOfField ="0" />
    ?????????
    < ParsingCache? backgroundParsing ="false" ?maxNbOfEntries ="5000" /> ???
    ?????????
    < ResultCache? granularity ="table" ?maxNbOfEntries ="100000" ?pendingTimeout ="0" >
    ???????
    < ResultCacheRule? queryPattern ="default" ?timestampResolution ="1000" >
    ?????????????
    < EagerCaching />
    ?????????
    </ ResultCacheRule >
    ?????????
    </ ResultCache >
    ??????
    </ RequestCache >

    ??????
    < LoadBalancer >
    ?????????
    < RAIDb-1 >
    ?????????
    < RAIDb-1-LeastPendingRequestsFirst /> ??
    ?????????
    </ RAIDb-1 >
    ??????
    </ LoadBalancer > ????????
    ????
    </ RequestManager >
    ??
    </ VirtualDatabase >
    </ C-JDBC >

    ?

    在c-jdbc-2.0.2-bin/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 ="25322" >
    ????
    < Report />
    ????
    < JmxSettings >
    ??????
    < RmiJmxAdaptor? port ="1091" />
    ????
    </ JmxSettings >
    ????
    < VirtualDatabase? configFile ="postgresql-raidb1-distribution.xml" ?virtualDatabaseName ="myDB" ?autoEnableBackends ="true" ?checkpointName ="Initial_empty_recovery_log" />
    ??
    </ Controller >
    </ C-JDBC-CONTROLLER >

    ?

    注意:Controller和VirtualMachine的配置文件不能采用相同的文件名

    啟動:
    在c-jdbc-2.0.2-bin\bin目錄下,運行controller.bat -f ../config/controller/uud-controller-distributed.xml
    unix用戶使用controller.sh來啟動controller

    截圖:(下回補)
    湊合看一下吧,控制臺的正常輸出:
    C:\software\c-jdbc-2.0.2-bin\bin>controller.bat -f ../config/controller/uud-cont
    roller-distributed.xml
    2007-03-07 15:16:44,017 INFO? controller.core.Controller C-JDBC controller (2.0.
    2)
    2007-03-07 15:16:44,439 INFO? controller.core.Controller Loading configuration f
    ile: ../config/controller/uud-controller-distributed.xml
    2007-03-07 15:16:44,752 INFO? controller.core.Controller JMX is enabled
    2007-03-07 15:16:44,830 INFO? controller.core.Controller Starting JMX server on
    host: 10.10.0.155
    2007-03-07 15:16:46,376 INFO? backend.DatabaseBackend.postgreSQLNode114 Adding c
    onnection manager for virtual user "boss"
    2007-03-07 15:16:46,501 INFO? backend.DatabaseBackend.postgreSQLNode155 Adding c
    onnection manager for virtual user "boss"
    2007-03-07 15:16:46,642 INFO? controller.RequestManager.myDB Request manager wil
    l parse requests with the following granularity: TABLE
    2007-03-07 15:16:46,657 WARN? controller.virtualdatabase.myDB No recovery log ha
    s been configured, enabling backend without checkpoint.
    2007-03-07 15:16:48,641 INFO? backend.DatabaseBackend.postgreSQLNode114 Detected
    ?backend as: PostgreSQL
    2007-03-07 15:16:49,063 WARN? backend.DatabaseBackend.postgreSQLNode114 Statemen
    t.getGeneratedKeys not supported.
    2007-03-07 15:16:49,579 INFO? backend.DatabaseBackend.postgreSQLNode114 Gatherin
    g database schema
    2007-03-07 15:16:49,782 INFO? controller.RequestManager.myDB Setting new virtual
    ?database schema.
    2007-03-07 15:16:49,782 INFO? cjdbc.controller.cache Setting new database schema
    .
    2007-03-07 15:16:49,782 INFO? controller.loadbalancer.RAIDb1 Adding blocking tas
    k worker thread for backend postgreSQLNode114
    2007-03-07 15:16:49,797 INFO? controller.loadbalancer.RAIDb1 Adding non blocking
    ?task worker thread for backend postgreSQLNode114
    2007-03-07 15:16:49,797 INFO? controller.RequestManager.myDB Database backend po
    stgreSQLNode114 is now enabled
    2007-03-07 15:16:50,922 INFO? backend.DatabaseBackend.postgreSQLNode155 Detected
    ?backend as: PostgreSQL
    2007-03-07 15:16:51,328 WARN? backend.DatabaseBackend.postgreSQLNode155 Statemen
    t.getGeneratedKeys not supported.
    2007-03-07 15:16:52,172 INFO? backend.DatabaseBackend.postgreSQLNode155 Gatherin
    g database schema
    2007-03-07 15:16:52,390 INFO? controller.RequestManager.myDB Virtual database sc
    hema merged with new schema.
    2007-03-07 15:16:52,390 INFO? cjdbc.controller.cache Merging new database schema

    2007-03-07 15:16:52,390 INFO? controller.loadbalancer.RAIDb1 Adding blocking tas
    k worker thread for backend postgreSQLNode155
    2007-03-07 15:16:52,390 INFO? controller.loadbalancer.RAIDb1 Adding non blocking
    ?task worker thread for backend postgreSQLNode155
    2007-03-07 15:16:52,406 INFO? controller.RequestManager.myDB Database backend po
    stgreSQLNode155 is now enabled
    2007-03-07 15:16:52,422 WARN? VirtualDatabaseWorkerThread.myDB.metadata Metadata
    ?key [getMaxColumnsInIndex] is not compatible. (Backends are: [jdbc:postgresql:/
    /10.10.0.114:5432/clusterdb] and [jdbc:postgresql://10.10.0.155:5432/clu
    sterdb] ; Values are:[32] and [0])
    2007-03-07 15:16:52,422 INFO? controller.core.Controller Adding VirtualDatabase
    myDB
    2007-03-07 15:16:52,437 INFO? controller.core.Controller Waiting for connections
    ?on 0.0.0.0:25322
    2007-03-07 15:16:52,469 INFO? controller.core.Controller Controller started on 2
    007.03.07 10 at 03:16:52 下午 GMT+08:00
    2007-03-07 15:16:52,484 INFO? controller.core.Controller Controller 10.10.0.
    155:25322 ready, listening to requests ...



    遇到過的問題:
    1、
    剛啟動沒一會兒,就看到config文件讀取錯誤,控制臺信息也就此結束。
    解決方法:controller.bat -f filename中filename的相對路徑和文件名竟然都寫錯了,汗。。。。

    2、
    啟動時,控制臺拋出ERROR以及exception,大意是connection failed, IP沒有配置到pg_hba.conf中
    解決方法:雖然是連本機的一個數據庫,但是由于數據庫連接的url里面寫的是IP地址,所以仍然要把本機的IP地址配置到pg_hba.conf以允許其訪問。

    3、
    還是啟動時拋錯了,Connection test failed(org.postgresql.util.PSQLException:Backend start-up failed:FATAL:role "boss_user" does not exist.)
    解決方法:原來是在自己寫的.xml配置文件中,DatabaseBackend標簽里面寫的用戶名和密碼需要是真實數據庫的真實用戶名和密碼。

    最后都整好了,但是遇到一個warn的log:
    backend.DatabaseBackend.postgreSQLNode155 Statement.getGeneratedKeys not supported
    至今不知道是什么問題,有什么影響.

    代碼部分:
    只需要修改應用程序用到的jdbc driver的配置,把c-jdbc/drivers/目錄下的c-jdbc-driver.jar拷貝到應用程序的工程里,并加入到class-path中。
    之前是使用 Class.forName("com.somevendor.jdbcDriver.Driver") 去連接某特定的數據庫
    現在是使用 Class.forName("org.objectweb.cjdbc.driver.Driver") 統一處理。
    連接字符串:DriverManager.getConnection("jdbc:cjdbc://localhost:25322/mycjdbc") 取得數據庫連接。

    c-jdbc server稱為c-jdbc controller,聆聽請求們
    其他所有通過c-jdbc來訪問的DB們稱為db backends.

    jdbc:cjdbc://host1:port1,host2:port2/database
    host是指跑著c-jdbc controller的機器IP,port是指controller監聽客戶端鏈接的端口,默認端口號:25322
    注意,不僅真正的DB安裝多個在多個機器上,c-jdbc controller也可以安在不同的機器上,這樣可以防止一個c-jdbc 壞掉帶來的風險。
    例如:

    Class.forName( " org.objectweb.cjdbc.driver.Driver " );?
    DriverManager.getConnection(
    " jdbc:cjdbc://c1.objectweb.org,c2.objectweb.org/tpcw " );? // 不驗證用戶名密碼
    DriverManager.getConnection( " jdbc:cjdbc://host/db?user=me&password=secret " ) // 驗證用戶名密碼的寫法1
    DriverManager.getConnection( " jdbc:cjdbc://host/db;user=me;password=secret " ) // 驗證用戶名密碼的寫法2

    然后可以在代碼中insert/update幾個記錄,再單獨到各個數據庫中去查一下,應該都受到影響就對了。

    問題:
    1、管理C-JDBC,不知道C-JDBC需要啥管理,不過好像是已經有一個簡單的 Desktop Application 可以控制相關的 administration 介面, 最重要的是, 他結合了 JMX , 可以讓整個監控的環境更完整.. (等待嘗試)
    2、不知道通過C-JDBC來操作速度如何
    3、RAIdb的3種類型,采取哪個更好?把表分開在不同server上對聯表查應該不會有影響吧?

    其他:
    1、Configuring C-JDBC with Jakarta Tomcat
    Copy the c-jdbc-driver.jar file to the lib directory of your web application (for example: $TOMCAT_HOME/webapps/mywebapp/WEB-INF/lib).
    There are many ways to obtain connections from a Tomcat application. Just ensure that you are using org.objectweb.cjdbc.driver.Driver as the driver class name and that the JDBC URL is a C-JDBC URL

    2、Configuring C-JDBC with Hibernate
    C-JDBC just has to be defined as any JDBC driver in Hibernate, leaving the syntax set to the proper database. Here is a configuration example to use Hibernate with a C-JDBC cluster made of Sybase backends:
    ## C-JDBC
    hibernate.dialect???????????????? net.sf.hibernate.dialect.SybaseDialect
    hibernate.connection.driver_class org.objectweb.cjdbc.driver.Driver
    hibernate.connection.username???? user
    hibernate.connection.password???? pass
    hibernate.connection.url????????? jdbc:cjdbc://localhost:25322/test???????

    posted on 2007-03-05 20:42 cerulean 閱讀(1426) 評論(2)  編輯  收藏 所屬分類: DB

    評論

    # re: C-JDBC 2014-03-24 13:56 woshibobo

    你好,我參照著你的這篇文章現在用C-jdbc做一個數據庫集群,有寫問題想問你,1.現在是不是沒有linux版本的二進制安裝包了?去官網都沒又找到。
    2.所以我用windows版本的,安裝配置完以報錯Cannot find C-JDBC home directory. Please set the CJDBC_HOME environment variable.可是我已經設置過cIDBC_HOME 的啊。
    3.還有,現在 是不是都不用C——jdbc做集成了,畢竟時間這么久了。。網上也沒找到多少資料。。
    希望你看到后能給我答復!謝謝!  回復  更多評論   

    # re: C-JDBC 2014-04-16 22:49 cerulean

    @woshibobo
    抱歉,這個確實時間太久太久了,實在不確定這個還有沒有用了。應該有更流行的方案吧。
    如果單就CJDBC_HOME這個環境變量的設置問題來說,你在windows上可以再檢查一下echo %CJDBC_HOME%看看到底設置成功沒有。  回復  更多評論   

    導航

    <2014年4月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    統計

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 无码人妻一区二区三区免费看| 四虎影视久久久免费观看| 一级毛片免费观看| 国产精品亚洲综合一区| 在线播放免费人成视频网站| 国产一级特黄高清免费大片| 在线91精品亚洲网站精品成人| 国产美女a做受大片免费| 看Aⅴ免费毛片手机播放| 免费在线观看黄网站| 一级毛片免费全部播放| 91麻豆精品国产自产在线观看亚洲| 无码精品人妻一区二区三区免费| 亚洲欧洲国产成人综合在线观看| 国产97视频人人做人人爱免费| 国产成人麻豆亚洲综合无码精品 | 日本a级片免费看| 在线亚洲精品视频| 在线亚洲精品福利网址导航| 在线免费播放一级毛片 | 在线观看特色大片免费视频| 亚洲人成网站色7799| 免费不卡中文字幕在线| 三上悠亚在线观看免费| 99人中文字幕亚洲区| 好大好硬好爽免费视频| 添bbb免费观看高清视频| 亚洲色精品88色婷婷七月丁香| 久久99青青精品免费观看| 亚洲日韩一区精品射精| 精品国产亚洲一区二区在线观看| 久久免费视频99| 亚洲一区二区无码偷拍| 久久激情亚洲精品无码?V| 四虎精品视频在线永久免费观看| 亚洲AV无码专区在线电影成人 | 国产精品亚洲成在人线| 国产卡一卡二卡三免费入口 | 亚洲综合一区二区精品导航| 成人人免费夜夜视频观看| 国产人成网在线播放VA免费|