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是可以正常启动的。。。
但是一用你的这个当模板就无法正常启动。。。
我找了好原因,始终运行不了