转一篇测试 Amoeba For MySQL的文章

作者:Sky.Jian | 可以任意转载, 但转载时务必以超链接形式标明文章原始出处 和 作者信息 及 版权声明
链接:http://www.jianzhaoyang.com/database/amoeba_for_mysql | del.icio.us | Twitter it

 

同事 Struct Chen 的 Amoeba For MySQL 项目已经 出来不短时间了,可一直没有时间好好体验,最近一直在做一些软件和硬件的功能以及性能相关的测试工作,Amoeba For MySQL自然也将被列入计划之内。

对 Amoeba For MySQL 的测试到目前位置主要还是功能方面的测试,配置了一套四台机器的环境:

Server A: Amoeba Server

Server B: MySQL Master

Server C: MySQL Slave1

Server D: MySQL Slave2

软件环境:RHEL5.2 (X86_64),JAVA 1.5.0_16, Amoeba For MySQL 0.31

测试功能:

1、读写分离
2、数据垂直切分
3、数据水平切分

amoeba.xml配置如下:

< ? xml version = " 1.0 " encoding = " gbk " ?>
< ! DOCTYPE amoeba:configuration SYSTEM " amoeba.dtd " >
< amoeba :configuration xmlns:amoeba = " http://amoeba.meidusa.com/ " >
    
< server >
        
< property name = " port " > 8066 </ property >
        
< property name = " ipAddress " > 10.0.38.21 </ property >
        
<!-- proxy server net IO Read thread size -->
        
< property name = " readThreadPoolSize " > 500 </ property >
        
<!-- proxy server client process thread size -->
        
< property name = " clientSideThreadPoolSize " > 500 </ property >
        
<!-- mysql server data packet process thread size -->
        
< property name = " serverSideThreadPoolSize " > 500 </ property >
        
<!-- socket Send and receive BufferSize(unit:K)  -->
        
< property name = " netBufferSize " > 200 </ property >
        
<!-- Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm). -->
        
< property name = " tcpNoDelay " > true </ property >
        
< property name = " user " > user </ property >
        
< property name = " password " > password </ property >
    
</ server >
    
    
< connectionmanagerlist >
        
< connectionmanager name = " defaultManager " >
            
< classname > com.meidusa.amoeba.net.AuthingableConnectionManager </ classname >
        
</ connectionmanager >
    
</ connectionmanagerlist >
    
    
< dbserverlist >
 
        
< dbserver name = " master " >
            
< factoryconfig >
                
< classname > com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory </ classname >
                
< property name = " manager " > defaultManager </ property >
                
< property name = " port " > 3306 </ property >
                
< property name = " ipAddress " > 10.0.38.37 </ property >
                
< property name = " schema " > test </ property >
                
< property name = " user " > root </ property >
                
< property name = " password " > password </ property >                
            
</ factoryconfig >
 
            
< poolconfig >
                
< classname > com.meidusa.amoeba.net.poolable.PoolableObjectPool </ classname >
                
< property name = " maxActive " > 500 </ 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 >
 
        
< dbserver name = " slave1 " >
            
< factoryconfig >
                
< classname > com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory </ classname >
                
< property name = " manager " > defaultManager </ property >
                
< property name = " port " > 3306 </ property >
                
< property name = " ipAddress " > 10.0.38.22 </ property >
                
< property name = " schema " > test </ property >
                
< property name = " user " > root </ property >
                
< property name = " password " > password </ property >                
            
</ factoryconfig >
 
            
< poolconfig >
                
< classname > com.meidusa.amoeba.net.poolable.PoolableObjectPool </ classname >
                
< property name = " maxActive " > 500 </ 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 >
 
        
< dbserver name = " slave2 " >
            
< factoryconfig >
                ... ...           
            
</ factoryconfig >
 
            
< poolconfig >
                ... ...
            
</ poolconfig >
        
</ dbserver >
        
 
        
< dbserver name = " virtualSlave " virtual = " true " >
            
< poolconfig >
                
< classname > com.meidusa.amoeba.server.MultipleServerPool </ classname >
                
<!-- 1=ROUNDROBIN , 2=WEIGHTBASED -->
                
< property name = " loadbalance " > 1 </ property >
                
< property name = " poolNames " > slave1,slave2 </ property >
            
</ poolconfig >
        
</ dbserver >
        
    
</ dbserverlist >
    
    
< queryrouter >
        
< classname > com.meidusa.amoeba.mysql.parser.MysqlQueryRouter </ classname >
        
< property name = " ruleConfig " > ${amoeba.home}/conf/rule.xml </ property >
        
< property name = " functionConfig " > ${amoeba.home}/conf/functionMap.xml </ property >
        
< property name = " ruleFunctionConfig " > ${amoeba.home}/conf/ruleFunctionMap.xml </ property >
        
< property name = " LRUMapSize " > 1500 </ property >
        
< property name = " defaultPool " > master </ property >
        
        
< property name = " writePool " > master </ property >
        
< property name = " readPool " > virtualSlave </ property >
        
< property name = " needParse " > true </ property >
    
</ queryrouter >
</ amoeba >

rule.xml配置:

< ? xml version = " 1.0 " encoding = " gbk " ?>
< ! DOCTYPE amoeba:rule SYSTEM " rule.dtd " >
< amoeba :rule xmlns:amoeba = " http://amoeba.meidusa.com/ " >
    
< tablerule name = " test_horiz " schema = " test " defaultPools = " master " >
        
< rule name = " rule1 " >
            
< parameters > ID </ parameters >
            
< expression >< ![ CDATA [ ID <= 100000000 ]] ></ expression >
            
< defaultpools > master </ defaultpools >
            
< readpools > slave1 </ readpools >
            
< writepools > master </ writepools >
        
</ rule >
        
        
< rule name = " rule2 " >
            
< parameters > ID </ parameters >
            
< expression >< ![ CDATA [ ID between 100000001 and 200000000 ]] ></ expression >
            
< defaultpools > master </ defaultpools >
            
< writepools > master2 </ writepools >
            
< readpools > slave2 </ readpools >
        
</ rule >
        
        
< rule name = " rule3 " >
            
< parameters > ID </ parameters >
            
< expression >< ![ CDATA [ ID > 200000000 ]]> </ expression >
            
< defaultpools > master </ defaultpools >
        
</ rule >
 
    
</ tablerule >
    
< tablerule name = " master " schema = " test " defaultPools = " master " />
    
< tablerule name = " slave1 " schema = " test " defaultPools = " slave1 " />
    
< tablerule name = " slave2 " schema = " test " defaultPools = " slave2 " />
    
< tablerule name = " master " schema = " t " defaultPools = " master " />
</ amoeba >

由于第一步主要还只是测试读写分离与数据的垂直切分,所以水平切分的规则设置的很简单,仅仅是按照ID的范围设置简单的规则。而设置一些更为复杂的规则。

总体测试效果还是比较满意的,预期的功能都全部正常,当然所用于测试的SQL语句也大都比较简单,主要还是根据当前工作中遇到的一些SQL。

这次测试没有进行性能测试,等后面再找时间测试一下,不知道有没有哪位朋友已经做过了相应的性能测试没?性能测试之后就要开始规划应用到某些应用上面去了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值