MySQL读写分离Amoeba简介
阿里巴巴的Amoeba(变形虫)项目,专注 数据库proxy开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。
Amoeba除了读写分离,还可以进行负载均衡、高可用性、sql过滤。
Amoeba需要mysql-server支持,Amoeba服务器端需要安装Mysql-server,并且最好不与其他数据库服务器在一起
Amoeba是Java编写的,运行需要JDK环境,可以通过#echo $JAVA_HOME看是否安装配置了JDK,如果没有,则
下载:jdk-6u35-linux-i586.bin 或 jdk-6u45-linux-x64.bin
chmod 700 jdk-6u35-linux-i586.bin
chmod 700 jdk-6u45-linux-x64.bin
CLASS_PATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
下载:amoeba-mysql-binary-2.2.0.tar.gz
tar -zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba
<service name="Amoeba for Mysql" class="com.meidusa.amoeba.net.ServerableConnectionManager">
<property name="port">8066</property>
<property name="ipAddress">172.18.109.213</property>
<property name="authenticator">
<bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
<property name="user">amoeba</property>
<property name="password">mypasswd</property>
<queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
<bean class="com.meidusa.amoeba.route.TableRuleFileLoader">
<property name="ruleFile">${amoeba.home}/conf/rule.xml</property>
<property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property>
<property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>
<property name="LRUMapSize">1500</property>
<property name="defaultPool">master</property># 设定默认节点
<property name="writePool">maseter</property> # 设定可写节点,节点定义见dbServers.xml文件
<property name="readPool">readpool</property> # 设定只读池,可配置多个slave节点
#readPool或writePool可以是dbServers中的multiPool名称,用multiPool来设置负载均衡。
<property name="needParse">true</property>
# 读写分离配置,读池和写池和dbServer.xml中配置的节点相关
<dbServer name="abstractServer" abstractive="true">
<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="manager">${defaultManager}</property>
<property name="sendBufferSize">64</property>
<property name="receiveBufferSize">128</property>
<property name="port">3306</property>
<property name="schema">chejecms</property>
<property name="user">myroot</property>
<property name="password">my123</property>
# 默认连接mysql server的密码,以上两项如不在下文中的dbserver中单独定义,则直接继承此处定义
# 定义连接mysql服务的用户amoeba和密码my123和数据库chejecms
# 定义后端MySQL的IP地址,一个master,一个slave
<dbServer name="master" parent="abstractServer">
<property name="ipAddress">172.19.200.204</property>
<!-- <property name="user">amoeba</property>
<property name="password">my123</property> -->
<dbServer name="slave1" parent="abstractServer">
<property name="ipAddress">172.18.109.213</property>
<!-- <property name="user">amoeba</property>
<property name="password">my123</property> -->
<dbServer name="readpool" virtual="true">
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
<property name="loadbalance">1</property>
<!-- Separated by commas,such as: server1,server2,server1 -->
<property name="poolNames">master,slave1</property>
#1为轮询策略,里面的master,slaver1按请求轮询调用
vi /usr/local/amoeba/bin/amoeba
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"
/usr/local/amoeba/bin/amoeba start &
echo "/usr/local/amoeba/bin/amoeba start &" >> /etc/rc.d/rc.local
mysql -uamoeba -h 172.18.109.213 -pmypasswd -P8066
#注意,此时登录的用户密码为连接amoeba服务器的密码,不是连接数据库的密码!!因为连接进到的是amoeba,并没有进到mysql里面!!!