MySQL的读写分离之Amoeba

    xiaoxiao2021-04-15  23

    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里面!!!

     

    转载请注明原文地址: https://ju.6miu.com/read-671350.html

    最新回复(0)