MySQL的读写分离之Amoeba

MySQL读写分离Amoeba简介

 

Amoeba介绍:

 

    阿里巴巴的Amoeba(变形虫)项目,专注 数据库proxy开发。座落与ClientDB Server(s)之间。对客户端透明。具有负载均衡高可用性sql过滤读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。

 

架构图:

 


 

 

 

Amoeba除了读写分离,还可以进行负载均衡高可用性sql过滤

 

 

 

Amoeba的安装和配置

 

 

Amoeba需要mysql-server支持,Amoeba服务器端需要安装Mysql-server,并且最好不与其他数据库服务器在一起

 

AmoebaJava编写的,运行需要JDK环境,可以通过#echo $JAVA_HOME看是否安装配置了JDK,如果没有,则

 

安装JKD

 

 

①.安装依赖包

 

yum -y install glibc*

 

②.安装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

./jdk-6u35-linux-i586.bin

 

mv jdk1.6.0_35  jdk

mv  jdk  /usr/local/

 

 

 

③.修改JDK的环境变量

 

vi /etc/profile.d/java.sh

JAVA_HOME="/usr/local/jdk"

CLASS_PATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"

PATH="$PATH:$JAVA_HOME/bin"

export JAVA_HOME

 

 

source /etc/profile.d/java.sh

 

#测试安装成功

java -version

 

 

安装Amoeba

 

下载:amoeba-mysql-binary-2.2.0.tar.gz

 

①.安装Amoeba

 

mkdir /usr/local/amoeba

tar -zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba

 

cd /usr/local/amoeba/

 

②.配置amoeba.xmldbServer.xml

 

vi conf/amoeba.xml

 

<service name="Amoeba for Mysql" class="com.meidusa.amoeba.net.ServerableConnectionManager">

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

# 默认端口是8066

# 修改连接amoeba接口的认证信息

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

#访问amoeba的ip地址,amoeba服务器的地址

... ...

<property name="authenticator">

    <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">  

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

# 客户端连接amoeba的代理使用的用户 

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

# 客户端连接amoeba的代理使用的密码

 

... ...

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

    <property name="ruleLoader">      

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

        </bean>

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

</queryRouter>

 

 

 

 

vi conf/dbServers.xml

 # 读写分离配置,读池和写池和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>

# 默认连接mysql server的用户

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

# 默认连接mysql server的密码,以上两项如不在下文中的dbserver中单独定义,则直接继承此处定义

    </factoryConfig>

# 定义连接mysql服务的用户amoeba和密码my123和数据库chejecms

# 定义后端MySQL的IP地址,一个master,一个slave

<dbServer name="master"  parent="abstractServer">

    <factoryConfig>

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

            <!-- <property name="user">amoeba</property>

              <property name="password">my123</property> -->

    </factoryConfig>

</dbServer>

<dbServer name="slave1"  parent="abstractServer">

    <factoryConfig>

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

             <!-- <property name="user">amoeba</property>

              <property name="password">my123</property> -->

    </factoryConfig>

</dbServer>

#服务组,轮询策略

<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按请求轮询调用

                </poolConfig>

        </dbServer>

 

 

64位系统,修改:

vi /usr/local/amoeba/bin/amoeba

... ...

DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"

#-Xss128k改为-Xss256k

 

 

 

 

 

 

 

③.开启amoeba

 

/usr/local/amoeba/bin/amoeba start &

 

开机自启动

 

echo "/usr/local/amoeba/bin/amoeba start &" >> /etc/rc.d/rc.local

 

 

④.验证amoeba

 

mysql -uamoeba -h 172.18.109.213 -pmypasswd -P8066

 

#注意,此时登录的用户密码为连接amoeba服务器的密码,不是连接数据库的密码!!因为连接进到的是amoeba,并没有进到mysql里面!!!

 


猜你喜欢

转载自blog.csdn.net/chuxuan909/article/details/70167874