Amoeba For MySQL
Amoeba For Mysql 是 Amoeba項目的子項目。要使用Amoeba For MySQL您必須確保您已符合所有先決條件:
先決條件:
Amoeba 框架是基於JDK1.5開發的,采用了JDK1.5的特性。
支持Mysql協議版本10(MySQL 4.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> <!-- 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>
配置 ConnectionManager
需要至少配置一個ConnectionManager,每個ConnectionManager將作為一個線程啟動,ConnectionManager負責管理所注冊在自身的Conneciton、負責他們的空閒檢測,死亡檢測、IO Event
connectionManagerList Tag Configuration
<!--
每個ConnectionManager都將作為一個線程啟動。
manager負責Connection IO讀寫/死亡檢測
-->
<connectionManagerList>
<connectionManager name="defaultManager">
<className>com.meidusa.amoeba.Net.AuthingableConnectionManager</className>
</connectionManager>
</connectionManagerList> <!-- 每個ConnectionManager都將作為一個線程啟動。 manager負責Connection IO讀寫/死亡檢測 --> <connectionManagerList> <connectionManager name="defaultManager"> <className>com.meidusa.amoeba.Net.AuthingableConnectionManager</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.MySQLServerConnectionFactory)
poolConfig -- 連接池配置情況:
配置項是否必選默認值說明 className 否 連接池實現類。默認:com.meidusa.amoeba.Net.poolable.PoolableObjectPool maxActive 否 8 最大活動連接數,如果達到最大活動連接數,則會等待 maxIdle 否 8 最大的空閒連接數,如果超過則將會關閉多余的空閒連接 minIdle 否 0 最小的空閒連接,連接池將保持最小空閒連接,即使這些連接長久不用 testOnBorrow 否 false 當連接在使用前是否檢查連接可用 testWhileIdle 否 fale 是否檢測空閒連接,這個參數啟動的時候下列2個參數才有效 minEvictableIdleTimeMillis 否 30分鐘連接空閒多少時間將被驅逐(關閉)(time Unit:ms) timeBetweenEvictionRunsMillis 否 -1 用於驅逐空閒連接沒間隔多少時間檢查一次空閒連接(time Unit: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.MySQLServerConnectionFactory</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="minEvictableIdleTimeMillis">600000</property>
<property name="timeBetweenEvictionRunsMillis">600000</property>
<property name="testOnBorrow">true</property>
<property name="testWhileIdle">true</property>
</poolConfig>
</dbServer>
</dbServerList> <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.MysqlServerConnectionFactory</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="minEvictableIdleTimeMillis">600000</property> <property name="timeBetweenEvictionRunsMillis">600000</property> <property name="testOnBorrow">true</property> <property name="testWhileIdle">true</property> </poolConfig> </dbServer> </dbServerList>
QueryRouter 查詢路由配置
配置項是否必選默認值說明 className 是空 QueryRouter實現類,Amoeba For Mysql(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> <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>