Amoeba For Mysql
Amoeba For Mysql 是 Amoeba项目的子项目。要使用Amoeba ForMysql您必须确保您已符合所有先决条件:
先决条件:
- Java SE 1.5或者以上 Amoeba框架是基于JDK1.5开发的,采用了JDK1.5的特性。
- 支持Mysql协议版本10(mysql4.1以后的版本)。
- 您的网络环境至少运行有一个mysql 4.1以上的服务
如何快速配置:
- 配置Server(以下是双核CPU配置,调整线程数可优化性能),配置说明:
配置项 是否必选 默认值 说明 port 否 8066 Amoeba Server绑定的对外端口 ipAddress 否 空 Amoeba绑定的IP user 是 空 客户端连接到Amoeba的用户名 password 否 空 客户端连接到Amoeba所用的密码 readThreadPoolSize 否 16 负责读客户端、databa seserver端网络数据包线程数 clientSideThreadPoolSize 否 16 负责读执行客户端请求的线程数 serverSideThreadPoolSize 否 16 负责处理服务端返回数据包的线程数 -
Server Tag Configuration
- <server>
-
<!-- proxy server绑定的端口 --> -
<property name="port">2066</property> -
-
<!-- proxy server绑定的IP --> -
<property name="ipAddress">127.0.0.1</property> -
-
<!-- proxy server net IO Read thread size --> -
<property name="readThreadPoolSize">100</property> -
-
<!-- proxy server client process thread size --> -
<property name="clientSideThreadPoolSize ">80</property> -
-
<!-- mysql server data packet process thread size --> -
<property name="serverSideThreadPoolSize ">100</property> -
-
<!-- 对外验证的用户名 --> -
<property name="user">root</property> -
-
<!-- 对外验证的密码 --> -
<property name="password">password</property> - </server>
- <server>
- 配置 ConnectionManager
需要至少配置一个ConnectionManager,每个ConnectionManager将作为一个线程启动,ConnectionManager负责管理所注册在自身的Conneciton、负责他们的空闲检测,死亡检测、IOEvent -
connectionManagerList TagConfiguration
- <!--
-
每个ConnectionManager都将作为一个线程启动。 -
manager负责Connection IO读写/死亡检测 -
--> -
<connectionManagerList> -
<connectionManager name="defaultManager"> -
<className>com.meidusa.amoeba.net.AuthingableConnectionMan ager</className> -
</connectionManager> -
</connectionManagerList>
- <!--
- 配置 dbServer,需要至少配置一个dbServer,每个dbServer将是物理数据库Server的衍射
factoryConfig --目标物理数据库衍射配置情况:
配置项 是否必选 默认值 说明 manager 是 空 表示该dbServer将注册到指定的ConnectionManager port 否 3306 目标数据库端口 ipAddress 否 127.0.0.1 目标数据库IP schema 否 空 连接初始化的Schema user 是 空 用于登陆目标数据库的用户名 password 否 空 用于登陆目标数据库的密码 className 是 空 连接工厂实现类(com.meidusa.amoeba.mysql.net.MysqlServerConnectionFac tory) poolConfig -- 连接池配置情况:
配置项 是否必选 默认值 说明 className 否 连接池实现类。默认:com.meidusa.amoeba.net.poolable.PoolableObjectPool maxActive 否 8 最大活动连接数,如果达到最大活动连接数,则会等待 maxIdle 否 8 最大的空闲连接数,如果超过则将会关闭多余的空闲连接 minIdle 否 0 最小的空闲连接,连接池将保持最小空闲连接,即使这些连接长久不用 testOnBorrow 否 false 当连接在使用前是否检查连接可用 testWhileIdle 否 fale 是否检测空闲连接,这个参数启动的时候下列2个参数才有效 minEvictableIdleTimeMill is 否 30分钟 连接空闲多少时间将被驱逐(关闭)(timeUnit:ms) timeBetweenEvictionRunsM illis 否 -1 用于驱逐空闲连接没间隔多少时间检查一次空闲连接(timeUnit:ms) -
dbServer Tag Configuration
- <dbServerList>
-
<!-- -
一台mysqlServer 需要配置一个pool, -
如果多台 平等的mysql需要进行loadBalance, -
平台已经提供一个具有负载均衡能力的objectPool:com.meidusa.amoeba.mysql.server.MultipleServerPool -
简单的配置是属性加上 virtual="true",该Pool 不允许配置factoryConfig 、poolConfig -
-
--> -
<dbServer name="server1"> -
-
<!-- PoolableObjectFactory实现类 --> -
<factoryConfig> -
<className>com.meidusa.amoeba.mysql.net.MysqlServerConnectionFac tory</className> -
<property name="manager">defaultManager</property> -
-
<!-- 真实mysql数据库端口 --> -
<property name="port">3301</property> -
-
<!-- 真实mysql数据库IP --> -
<property name="ipAddress">127.0.0.1</property> -
-
<!-- 用于登陆mysql的用户名 --> -
<property name="user">test</property> -
-
<!-- 用于登陆mysql的密码 --> -
<property name="password">test</property> -
<property name="schema">testSchema</property> -
</factoryConfig> -
-
<!-- ObjectPool实现类 --> -
<poolConfig> -
<className>com.meidusa.amoeba.net.poolable.PoolableObjectPool</className> -
<property name="maxActive">200</property> -
<property name="maxIdle">200</property> -
<property name="minIdle">10</property> -
<property name="minEvictableIdleTimeMill is">600000</property> -
<property name="timeBetweenEvictionRunsM illis">600000</property> -
<property name="testOnBorrow">true</property> -
<property name="testWhileIdle">true</property> -
</poolConfig> -
</dbServer> - </dbServerList>
- <dbServerList>
- QueryRouter 查询路由配置
-
配置项 是否必选 默认值 说明 className 是 空 QueryRouter实现类,Amoeba ForMysql(com.meidusa.amoeba.mysql.parser.MysqlQueryRouter)。 functionConfig 否 空 用于解析sql函数的配置文件,如果不配置则将不解析包含函数sql或者解析的不完整。 ruleConfig 否 空 数据切分规则配置文件,如果不配置则sql数据切分功能将不能用 needParse 否 true 是否对 sql进行parse,如果false则将不能使用数据切分、读写分离等功能 defaultPool 是 空 needParse=false、无法解析query、不满足切分规则的、writePool|readPool == null情况。所有sql 将在默认得dbServer上面执行。(必选) writePool 否 空 启用needParse 功能,并且没有匹配到数据切分规则,则update、insert、delete 语句将在这个pool中执行 readPool 否 空 启用needParse 功能,并且没有匹配到数据切分规则,则select 语句将在这个pool中执行 LRUMapSize 否 1000 statment cache ,存放 sql解析后得到的statment queryRouter Tag Configuration- <queryRouter>
-
<className>com.meidusa.amoeba.mysql.parser.MysqlQueryRouter</className> -
<!-- -
<property name="ruleConfig">./src/conf/rule.xml</property> -
<property name="functionConfig">./src/conf/functionMap.xml</property> -
--> -
<property name="needParse">false</property> -
<property name="LRUMapSize">1500</property> -
<property name="defaultPool">server1</property> -
<!-- -
<property name="writePool">server1</property> -
<property name="readPool">server1</property> -
--> - </queryRouter>
- <queryRouter>