Squoia是C-JDBC的一个子项目。
cjdbc ( http://c-jdbc.objectweb.org/ ) 是一个open source的数据库集群中间件,任何基于jdbc的应用都可以通过它透明地访问数据库集群,它可以进行各个节点之间的数据复制,并且可以实现各个节点的查询负载均衡。通过这样的软件,偶们可以方便的实现RAIDb - Redundant Array of Inexpensive Database 廉价数据库冗余阵列。
大型应用随着用户量访问越来越大,增加数据库存储和做好数据库冗余可以增加系统的可靠性和性能。
配置的原理:通过配置虚拟的数据库,来实现多个不同数据库的集群实现。然后配置一个控制器,通过运行一系列的配置文件,然后我们自己加载特定的JDBC驱动。来实现数据库的集群。
首先下载Squoia.
1. 配置虚拟数据库(我的路径是D:\sql\sequoia\config\virtualdatabase)配置一个名为mysqlserver-raidb1-distribution.xml的XML文件。这个文件名可以由你自己取。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE SEQUOIA PUBLIC "-//Continuent//DTD SEQUOIA 2.10.10//EN" "http://sequoia.continuent.org/dtds/sequoia-2.10.10.dtd">
<SEQUOIA>
<VirtualDatabase name="myDB">--虚拟数据库的名字myDB
<Distribution>
<MessageTimeouts/>
</Distribution>
<Backup>
<Backuper backuperName="Octopus"
className="org.continuent.sequoia.controller.backup.backupers.OctopusBackuper"
options="zip=true"/>
</Backup>
<AuthenticationManager>
<Admin>
<User username="admin" password=""/>配置管理界面管理者的用户名和密码
</Admin>
<VirtualUsers>
<VirtualLogin vLogin="user" vPassword=""/>配置管理界面用户的用户名和密码
</VirtualUsers>
</AuthenticationManager>
<DatabaseBackend name="localhost1" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mydb" connectionTestStatement="select now()">
<ConnectionManager vLogin="user" rLogin="root" rPassword="root">
<VariablePoolConnectionManager initPoolSize="10" minPoolSize="5" maxPoolSize="50" idleTimeout="30" waitTimeout="10"/>
</ConnectionManager>
</DatabaseBackend>
这是我们所配置的虚拟数据库:name="localhost1"这个名字是我们要操作的数据库名字,比如我们要把这个虚拟数据库加进集群或者从集群中分离等,我们在操作的时候就是用这个名字,因为我们用的是MYSQL的数据库,所以我们所用的驱动是MYSQL的驱动,对于本地用户的MYSQL数据库,我们的身份vLogin="user",而我们连接数据库的密码和用户名就是连接数据库的密码和用户名,下面的代码是我们要配置的第二个数据库的名字
<DatabaseBackend name="localhost2" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.61.114:3306/mydb" connectionTestStatement="select now()">
<ConnectionManager vLogin="user" rLogin="test1" rPassword="abc">
<VariablePoolConnectionManager initPoolSize="10" minPoolSize="5" 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>
<RecoveryLog driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb" login="root" password="root">
这段代码表示你所要配置的和集群数据库相关的日志文件的表具体要配置在哪台数据库中。我们现在选择的是要配置在本地的数据库中。
<RecoveryLogTable tableName="RECOVERY"
logIdColumnType="BIGINT NOT NULL"
vloginColumnType="VARCHAR(20) NOT NULL"
sqlColumnName="sqlsrc"
sqlColumnType="TEXT NOT NULL"
sqlParamColumnType="TEXT"
extraStatementDefinition=",PRIMARY KEY (log_id)"/>
<CheckpointTable tableName="CHECK_POINT"
checkpointNameColumnType="VARCHAR(127) NOT NULL"/>
<BackendTable tableName="BACKEND"
databaseNameColumnType="VARCHAR(50) NOT NULL"
backendNameColumnType="VARCHAR(50) NOT NULL"
checkpointNameColumnType="VARCHAR(127) NOT NULL"/>
<DumpTable tableName="SEQUOIA_DUMP"
dumpNameColumnType="TEXT NOT NULL"
dumpDateColumnType="DATETIME"
dumpPathColumnType="TEXT NOT NULL"
dumpFormatColumnType="TEXT NOT NULL"
checkpointNameColumnType="TEXT NOT NULL"
backendNameColumnType="TEXT NOT NULL"
tablesColumnType="TEXT NOT NULL"/>
</RecoveryLog>
</RequestManager>
</VirtualDatabase>
以上这段代码都是配置和集群数据库相关的数据库表名。分别是表RECOVERY, BACKEND, SEQUOIA_DUMP
</SEQUOIA>
2. 配置你的控制器
D:\sql\sequoia\config\controller
在这个目录下新建一个controller-mysqlserver.xml的文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE SEQUOIA-CONTROLLER PUBLIC "-//Continuent//DTD SEQUOIA-CONTROLLER 2.10.10//EN" "http://sequoia.continuent.org/dtds/sequoia-controller-2.10.10.dtd">
<SEQUOIA-CONTROLLER>
<Controller ipAddress="127.0.0.1" port="25322">
<JmxSettings>
<RmiJmxAdaptor port="1090"/>
</JmxSettings>
<VirtualDatabase configFile="mysqlserver-raidb1-distribution.xml" virtualDatabaseName="myDB" autoEnableBackends="true" checkpointName="Initial_empty_recovery_log"/>
</Controller>
</SEQUOIA-CONTROLLER>
注释:configFile="mysqlserver-raidb1-distribution.xml表示的是告诉控制器你的虚拟数据库的配置文件在哪。后面配置文件中的内容暂时没有查明表示什么意思。
3. 将D:\sql\sequoia\config目录下的sequencer.xml的中的
bind_addr="192.168.61.133"
mcast_port="45566"
mcast_addr="228.8.8.9"
必须和D:\sql\sequoia\lib中的几个JAR文件中的XML文件的一样。比如jgroup.jar中的sequence.xml文件中的所有mcast_addr地址必须和上面那个文件中的地址一样。
4. 然后写一个启动程序
假如我们的是A。BAT文件
@echo off
title Sequoia RAIDb-1 demo
echo ******************************************************
echo ******************************************************
echo ** **
echo ** Please press a key when hsqldb servers are ready **
echo ** **
echo ******************************************************
echo ******************************************************
SET SEQUOIA_HOME="d:\sql\sequoia"
:begin
cd "%SEQUOIA_HOME%\bin"
echo "Waiting for mysql servers to finish start up"
echo "Starting Controller"
start /B controller.bat -f ..\config\controller\controller-mysqlserver.xml
:end
注释:start /B controller.bat -f ..\config\controller\controller-mysqlserver.xml表示告诉启动程序启动的时候会去运行控制文件中的controller-mysqlserver.xml文件