IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Amoeba For MySQL 功能测试让人满意

    朝阳发表于 2008-10-24 12:13:53
    love 0

    同事 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">8066property>
    <property name="ipAddress">10.0.38.21property>

    <property name="readThreadPoolSize">500property>

    <property name="clientSideThreadPoolSize">500property>

    <property name="serverSideThreadPoolSize">500property>

    <property name="netBufferSize">200property>

    <property name="tcpNoDelay">trueproperty>
    <property name="user">userproperty>
    <property name="password">passwordproperty>
    server>

    <connectionmanagerlist>
    <connectionmanager name="defaultManager">
    <classname>com.meidusa.amoeba.net.AuthingableConnectionManagerclassname>
    connectionmanager>
    connectionmanagerlist>

    <dbserverlist>

    <dbserver name="master">
    <factoryconfig>
    <classname>com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactoryclassname>
    <property name="manager">defaultManagerproperty>
    <property name="port">3306property>
    <property name="ipAddress">10.0.38.37property>
    <property name="schema">testproperty>
    <property name="user">rootproperty>
    <property name="password">passwordproperty>
    factoryconfig>

    <poolconfig>
    <classname>com.meidusa.amoeba.net.poolable.PoolableObjectPoolclassname>
    <property name="maxActive">500property>
    <property name="maxIdle">200property>
    <property name="minIdle">10property>
    <property name="minEvictableIdleTimeMillis">600000property>
    <property name="timeBetweenEvictionRunsMillis">600000property>
    <property name="testOnBorrow">trueproperty>
    <property name="testWhileIdle">trueproperty>
    poolconfig>
    dbserver>

    <dbserver name="slave1">
    <factoryconfig>
    <classname>com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactoryclassname>
    <property name="manager">defaultManagerproperty>
    <property name="port">3306property>
    <property name="ipAddress">10.0.38.22property>
    <property name="schema">testproperty>
    <property name="user">rootproperty>
    <property name="password">passwordproperty>
    factoryconfig>

    <poolconfig>
    <classname>com.meidusa.amoeba.net.poolable.PoolableObjectPoolclassname>
    <property name="maxActive">500property>
    <property name="maxIdle">200property>
    <property name="minIdle">10property>
    <property name="minEvictableIdleTimeMillis">600000property>
    <property name="timeBetweenEvictionRunsMillis">600000property>
    <property name="testOnBorrow">trueproperty>
    <property name="testWhileIdle">trueproperty>
    poolconfig>
    dbserver>

    <dbserver name="slave2">
    <factoryconfig>
    ... ...
    factoryconfig>

    <poolconfig>
    ... ...
    poolconfig>
    dbserver>


    <dbserver name="virtualSlave" virtual="true">
    <poolconfig>
    <classname>com.meidusa.amoeba.server.MultipleServerPoolclassname>

    <property name="loadbalance">1property>
    <property name="poolNames">slave1,slave2property>
    poolconfig>
    dbserver>

    dbserverlist>

    <queryrouter>
    <classname>com.meidusa.amoeba.mysql.parser.MysqlQueryRouterclassname>
    <property name="ruleConfig">${amoeba.home}/conf/rule.xmlproperty>
    <property name="functionConfig">${amoeba.home}/conf/functionMap.xmlproperty>
    <property name="ruleFunctionConfig">${amoeba.home}/conf/ruleFunctionMap.xmlproperty>
    <property name="LRUMapSize">1500property>
    <property name="defaultPool">masterproperty>

    <property name="writePool">masterproperty>
    <property name="readPool">virtualSlaveproperty>
    <property name="needParse">trueproperty>
    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>IDparameters>
    <expression>< ![CDATA[ ID <= 100000000]]>expression>
    <defaultpools>masterdefaultpools>
    <readpools>slave1readpools>
    <writepools>masterwritepools>
    rule>

    <rule name="rule2">
    <parameters>IDparameters>
    <expression>< ![CDATA[ ID between 100000001 and 200000000 ]]>expression>
    <defaultpools>masterdefaultpools>
    <writepools>master2writepools>
    <readpools>slave2readpools>
    rule>

    <rule name="rule3">
    <parameters>IDparameters>
    <expression>< ![CDATA[ ID > 200000000 ]]>expression>
    <defaultpools>masterdefaultpools>
    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。

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



沪ICP备19023445号-2号
友情链接