liang3391 发表于 2010-10-24 15:35

稳定性和并发都比mysql-proxy强。

飞鸿无痕 发表于 2010-10-26 13:39

回复 10# liang3391


    我用我们公司的网站源代码测试了下,运行正常,未见乱码,你可以把不支持的sql发到开发者的博客上,或者发到amoeba.meidusa@gmail.com

liang3391 发表于 2010-10-27 14:14

已经发了mail 但是杳无音讯

sjehzy 发表于 2010-10-27 15:16

<?xml version="1.0" encoding="gbk"?>



<!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd">

<amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/">



    <server>

      <!-- proxy server绑定的端口 -->

      <property name="port">3306</property>

      

      <!-- proxy server绑定的IP -->

      <property name="ipAddress">192.168.18.119</property>

      <!-- proxy server net IO Read thread size -->

      <property name="readThreadPoolSize">20</property>

      

      <!-- proxy server client process thread size -->

      <property name="clientSideThreadPoolSize">30</property>

      

      <!-- mysql server data packet process thread size -->

      <property name="serverSideThreadPoolSize">30</property>

      

      <!-- socket Send and receive BufferSize(unit:K)-->

      <property name="netBufferSize">128</property>

      

      <!-- Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm). -->

      <property name="tcpNoDelay">true</property>

      

      <!-- 对外验证的用户名 -->

      <property name="user">root</property>

      

      <!-- 对外验证的密码 -->

      <property name="password">justdoit</property>

      

      <!-- query timeout( default: 60 second , TimeUnit:second) -->

      <property name="queryTimeout">60</property>

    </server>

   

    <!--

      每个ConnectionManager都将作为一个线程启动。

      manager负责Connection IO读写/死亡检测

    -->

    <connectionManagerList>

      <connectionManager name="defaultManager" class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper">

            <property name="subManagerClassName">com.meidusa.amoeba.net.AuthingableConnectionManager</property>

         

            <!--

            default value is avaliable Processors

            <property name="processors">5</property>

             -->

      </connectionManager>

    </connectionManagerList>

   

    <dbServerList>

      <!--

            一台mysqlServer 需要配置一个pool,

            如果多台 平等的mysql需要进行loadBalance,

            平台已经提供一个具有负载均衡能力的objectPool:com.meidusa.amoeba.mysql.server.MultipleServerPool

            简单的配置是属性加上 virtual="true",该Pool 不允许配置factoryConfig

            或者自己写一个ObjectPool。

      -->

      <dbServer name="server1">

         

            <!-- PoolableObjectFactory实现类 -->

            <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">

                <property name="manager">defaultManager</property>

               

                <!-- 真实mysql数据库端口 -->

                <property name="port">3306</property>

               

                <!-- 真实mysql数据库IP -->

                <property name="ipAddress">192.168.18.117</property>

                <property name="schema">test</property>

               

                <!-- 用于登陆mysql的用户名 -->

                <property name="user">root</property>

               

                <!-- 用于登陆mysql的密码 -->

               

                <property name="password">justdoit</property>

               

            </factoryConfig>

         

            <!-- ObjectPool实现类 -->

            <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">

                <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>

      



      <dbServer name="server2">

         

            <!-- PoolableObjectFactory实现类 -->

            <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">

                <property name="manager">defaultManager</property>

               

                <!-- 真实mysql数据库端口 -->

                <property name="port">3306</property>

               

                <!-- 真实mysql数据库IP -->

                <property name="ipAddress">192.168.18.118</property>

                <property name="schema">test</property>

               

                <!-- 用于登陆mysql的用户名 -->

                <property name="user">root</property>

               

                <!-- 用于登陆mysql的密码 -->

               

                <property name="password">justdoit</property>

               

            </factoryConfig>

         

            <!-- ObjectPool实现类 -->

            <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">

                <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>



      

      <dbServer name="master" virtual="true">

            <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">

                <!-- 负载均衡参数 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->

                <property name="loadbalance">1</property>

               

                <!-- 参与该pool负载均衡的poolName列表以逗号分割 -->

                <property name="poolNames">server1</property>

            </poolConfig>

      </dbServer>



      <dbServer name="slave" virtual="true">

            <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">

                <!-- 负载均衡参数 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->

                <property name="loadbalance">1</property>

               

                <!-- 参与该pool负载均衡的poolName列表以逗号分割 -->

                <property name="poolNames">server1,server2</property>

            </poolConfig>

      </dbServer>

      

    </dbServerList>

   

    <queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">

      <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">slave</property>

      <property name="needParse">true</property>

    </queryRouter>

</amoeba:configuration>

我的修改vi amoeba.xml内容如上,但是修改后/usr/local/amoeba/bin/amoeba start
运行不了,报错。。。。

飞鸿无痕 发表于 2010-10-27 15:17

回复 13# liang3391


    应该明天就能回复吧,开发者可能比较忙,呵呵,我和他交流的时候基本上是第二天就能收到回复!

飞鸿无痕 发表于 2010-10-27 15:21

回复 14# sjehzy


    配置没什么错,但是你的启动命令错了!请用命令:/usr/local/amoeba/bin/amoeba &
启动,另外,刚安装你的/usr/local/amoeba/bin目录下的文件可能会没有执行权限,用命令添加执行权限:
chmod -R +x /usr/local/amoeba/bin
如果还有问题,请把你的报错贴上来看看!

sjehzy 发表于 2010-10-27 15:28

它提示我须要加start|stop的运行。

root@localhost conf]# chmod -R +x /usr/local/amoeba/bin
# /usr/local/amoeba/bin/amoeba &
4562
# amoeba start|stop



我的amoeba的conf目录下我只修改了amoeba.xml

sjehzy 发表于 2010-10-27 15:36

具体报错如下:
# /usr/local/amoeba/bin/amoeba start
log4j:WARN log4j config load completed from file:/usr/local/amoeba/conf/log4j.xml
Exception in thread "main" com.meidusa.amoeba.config.ConfigurationException: Error loading configuration file /usr/local/amoeba/conf/amoeba.xml
    with nested exception
com.meidusa.amoeba.config.ConfigurationException: Caught exception while loading file /usr/local/amoeba/conf/amoeba.xml
    with nested exception
org.xml.sax.SAXParseException: Attribute "class" is required and must be specified for element type "server".
        at com.meidusa.amoeba.context.ProxyRuntimeContext.loadConfig(ProxyRuntimeContext.java:392)
        at com.meidusa.amoeba.context.ProxyRuntimeContext.init(ProxyRuntimeContext.java:232)
        at com.meidusa.amoeba.server.AmoebaProxyServer.main(AmoebaProxyServer.java:161)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.classworlds.Launcher.launchStandard(Launcher.java:410)
        at org.codehaus.classworlds.Launcher.launch(Launcher.java:344)
        at org.codehaus.classworlds.Launcher.main(Launcher.java:461)
with nested exception com.meidusa.amoeba.config.ConfigurationException: Caught exception while loading file /usr/local/amoeba/conf/amoeba.xml
    with nested exception
org.xml.sax.SAXParseException: Attribute "class" is required and must be specified for element type "server".
com.meidusa.amoeba.config.ConfigurationException: Caught exception while loading file /usr/local/amoeba/conf/amoeba.xml
    with nested exception
org.xml.sax.SAXParseException: Attribute "class" is required and must be specified for element type "server".
        at com.meidusa.amoeba.context.ProxyRuntimeContext.loadConfigurationFile(ProxyRuntimeContext.java:411)
        at com.meidusa.amoeba.context.ProxyRuntimeContext.loadConfig(ProxyRuntimeContext.java:389)
        at com.meidusa.amoeba.context.ProxyRuntimeContext.init(ProxyRuntimeContext.java:232)
        at com.meidusa.amoeba.server.AmoebaProxyServer.main(AmoebaProxyServer.java:161)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.classworlds.Launcher.launchStandard(Launcher.java:410)
        at org.codehaus.classworlds.Launcher.launch(Launcher.java:344)
        at org.codehaus.classworlds.Launcher.main(Launcher.java:461)
with nested exception org.xml.sax.SAXParseException: Attribute "class" is required and must be specified for element type "server".
org.xml.sax.SAXParseException: Attribute "class" is required and must be specified for element type "server".
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
        at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.addDTDDefaultAttrsAndValidate(XMLDTDValidator.java:1193)
        at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1940)
        at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:764)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1363)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2755)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
        at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:235)
        at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
        at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:124)
        at com.meidusa.amoeba.context.ProxyRuntimeContext.loadConfigurationFile(ProxyRuntimeContext.java:407)
        at com.meidusa.amoeba.context.ProxyRuntimeContext.loadConfig(ProxyRuntimeContext.java:389)
        at com.meidusa.amoeba.context.ProxyRuntimeContext.init(ProxyRuntimeContext.java:232)
        at com.meidusa.amoeba.server.AmoebaProxyServer.main(AmoebaProxyServer.java:161)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.classworlds.Launcher.launchStandard(Launcher.java:410)
        at org.codehaus.classworlds.Launcher.launch(Launcher.java:344)
        at org.codehaus.classworlds.Launcher.main(Launcher.java:461)

飞鸿无痕 发表于 2010-10-27 15:36

回复 17# sjehzy


    你用的什么版本???我看了下amoeba的启动脚本没有start或者stop的!
你用/usr/local/amoeba/bin/amoeba & 不能执行吗???

脚本内容如下:case "`uname`" in
CYGWIN*) cygwin=true ;;
esac

# 确定安装了java,并设置了JAVA_HOME环境变量.
noJavaHome=false
if [ -z "$JAVA_HOME" ] ; then
    noJavaHome=true
fi
if $cygwin ; then
    [ -n "$JAVA_HOME" ] &&
      JAVA_HOME=`cygpath -u "$JAVA_HOME"`
fi
if [ ! -e "$JAVA_HOME/bin/java" ] ; then
    noJavaHome=true
fi
if $noJavaHome ; then
    echo "Error: JAVA_HOME environment variable is not set."
    exit 1
fi

# 用该脚本的位置推断AMOEBA_HOME的路径.
CURR_DIR=`pwd`
cd `dirname "$0"`/..
AMOEBA_HOME=`pwd`
cd $CURR_DIR

if [ -z "$AMOEBA_HOME" ] ; then
    echo
    echo 错误: 必须设置环境变量“AMOEBA_HOME”,指向AMOEBA的安装路径
    echo
    exit 1
fi

CLASSPATH="$AMOEBA_HOME/lib/classworlds-1.0.jar"
MAIN_CLASS="org.codehaus.classworlds.Launcher"

if $cygwin ; then
    JAVA_HOME=`cygpath -w "$JAVA_HOME"`
    AMOEBA_HOME=`cygpath -w "$AMOEBA_HOME"`
    CLASSPATH=`cygpath -p -w "$CLASSPATH"`
fi


DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k"
# DEFAULT_OPTS="$DEFAULT_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:+AggressiveOpts -XX:+UseParallelGC -XX:+UseBiasedLocking -XX:NewSize=64m"
DEFAULT_OPTS="$DEFAULT_OPTS -Damoeba.home=\"$AMOEBA_HOME\""
DEFAULT_OPTS="$DEFAULT_OPTS -Dclassworlds.conf=\"$AMOEBA_HOME/bin/amoeba.classworlds\""

CMD="exec \"$JAVA_HOME/bin/java\" $DEFAULT_OPTS $OPTS -classpath \"$CLASSPATH\"$MAIN_CLASS $@"
eval $CMD

sjehzy 发表于 2010-10-27 15:48

本帖最后由 sjehzy 于 2010-10-27 15:51 编辑

我用的就是你提供的下载地址,我直接wget 下来的,我的如下

# more amoeba.bat
@rem ----------------------------------------------------------------------------
@rem 启动Amoeba的脚本
@rem
@rem 需要设置如下环境变量:
@rem
@rem    JAVA_HOME         - JDK的安装路径
@rem
@rem ----------------------------------------------------------------------------
@echo off
if "%OS%"=="Windows_NT" setlocal

:CHECK_JAVA_HOME
if not "%JAVA_HOME%"=="" goto SET_AMOEBA_HOME

echo.
echo 错误: 必须设置环境变量“JAVA_HOME”,指向JDK的安装路径
echo.
goto END

:SET_AMOEBA_HOME
set AMOEBA_HOME=%~dp0..
if not "%AMOEBA_HOME%"=="" goto START_AMOEBA

echo.
echo 错误: 必须设置环境变量“AMOEBA_HOME”,指向Amoeba的安装路径
echo.
goto END

:START_AMOEBA

set DEFAULT_OPTS=-server -Xms256m -Xmx256m -Xss128k
set DEFAULT_OPTS=%DEFAULT_OPTS% -XX:+HeapDumpOnOutOfMemoryError -XX:+AggressiveOpts -XX:+UseParallelGC -XX:+UseBias
edLocking -XX:NewSize=64m
set DEFAULT_OPTS=%DEFAULT_OPTS% "-Damoeba.home=%AMOEBA_HOME%"
set DEFAULT_OPTS=%DEFAULT_OPTS% "-Dclassworlds.conf=%AMOEBA_HOME%\bin\amoeba.classworlds"

set JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set CLASSPATH="%AMOEBA_HOME%\lib\classworlds-1.0.jar"
set MAIN_CLASS="org.codehaus.classworlds.Launcher"

%JAVA_EXE% %DEFAULT_OPTS% -classpath %CLASSPATH% %MAIN_CLASS% %*

:END
if "%OS%"=="Windows_NT" endlocal
pause


我不加start|stop不行呀


我用amoeba.tar.gz默认的,/usr/local/amoeba/bin/amoeba start是可以正常启动的。。。
但是一用你的这个当模板就无法正常启动。。。
我找了好原因,始终运行不了
页: 1 [2] 3 4 5 6
查看完整版本: 【原创】Amoeba搞定mysql主从读写分离