zoukankan      html  css  js  c++  java
  • 使用Amoeba for mysql实现mysql读写分离(测试可行)

    Amoeba for MySQL致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当query 路由功能,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、Query过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。 在Amoeba上面你能够完成多数据源的高可用、负载均衡、数据切片的功能。目前在很多企业的生产线上面使用。

    www.centos.bz这里使用Amoeba for mysql来实现mysql的读写分离,起到缓解主数据库服务器的压力,下面是实现这一方案的架构图:


    mysql主从复制配置

    因为读写分离,所以一台负责mysql的写操作,另一台负责mysql的读操作,所以我们这里使用mysql的主从复制再合适不过了。关于这一配置,请移步:http://blog.csdn.net/moqiang02/article/details/39924401

    java环境配置
    Amoeba框架是基于Java SE1.5开发的,建议使用Java SE 1.5版本。目前Amoeba经验证在JavaTM SE 1.5和Java SE 1.6能正常运行,(可能包括其他未经验证的版本)。
    Java SE 1.6下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u32-downloads-1594644.html
    我这里下载jdk-6u32-linux-i586-rpm.bin。

    下载完成后执行sh jdk-6u32-linux-i586-rpm.bin开始安装,将会安装到/usr/java/jdk1.6.0_32目录。

    Amoeba的安装
    Amoeba下载地址:http://sourceforge.net/projects/amoeba/
    下面是安装步骤:
        cd /tmp
        mkdir /usr/local/amoeba
        wget http://softlayer.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.1.0-RC5.tar.gz
        tar xzf amoeba-mysql-binary-2.1.0-RC5.tar.gz -C /usr/local/amoeba

    配置用户环境变量

        vi ~/.bash_profile
    设置为:
        PATH=$PATH:$HOME/bin:/usr/local/amoeba/bin
        JAVA_HOME=/usr/java/jdk1.6.0_32
        export JAVA_HOME
        export PATH
    立即生效:
        source  ~/.bash_profile

    Amoeba for mysql配置

    配置Amoeba for mysql的读写分离主要涉及两个文件:
    1、/usr/local/amoeba/conf/dbServers.xml
    此文件定义由Amoeba代理的数据库如何连接,比如最基础的:主机IP、端口、Amoeba使用的用户名和密码等等。
    2、/usr/local/amoeba/conf/amoeba.xml
    此文件定义了Amoeba代理的相关配置。

    dbServers.xml文件配置

    abstractServer配置:
        <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>
    
                <!-- mysql port -->
                <property name="port">3306</property>
    
                <!-- mysql schema -->
                <property name="schema">dbname</property>
    
                <!-- mysql user -->
                <property name="user">root</property>
    
                <!--  mysql password -->
                <property name="password">root</property>
            </factoryConfig>
         
            <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
                <property name="maxActive">500</property>
                <property name="maxIdle">500</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>
    此部分定义真实mysql服务器的端口,数据库名称,mysql用户及密码。
    主从数据库定义:
        <dbServer name="Master"  parent="abstractServer">
            <factoryConfig>
                <!-- mysql ip -->
                <property name="ipAddress">192.168.0.1</property>
            </factoryConfig>
        </dbServer>
        <dbServer name="Slave1"  parent="abstractServer">
            <factoryConfig>
                <!-- mysql ip -->
                <property name="ipAddress">192.168.0.2</property>
            </factoryConfig>
        </dbServer>
        <dbServer name="Slave2"  parent="abstractServer">
            <factoryConfig>
                <!-- mysql ip -->
                <property name="ipAddress">192.168.0.3</property>
            </factoryConfig>
        </dbServer>
        <dbServer name="virtualSlave" virtual="true">   #注意:name="virtualSlave"
            <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">Slave1,Slave2</property>
            </poolConfig>
        </dbServer>

    此部分定义主服务器,从服务器,及从服务器连接池。这里只定义数据库地址,它们的用户及密码就是上面的abstractServer里的设置。注意用来连接真实mysql服务器的用户必须拥有远程连接权限。

    测试之前先要保证amoeba-server有访问两个主从服务器test库的权限,在主从mysql上都执行:(至关重要!!)
    grant all on test.* to rex@'192.168.0.%' identified by '123456';

    备注:当使用ROUNDROBIN模式时,如果服务器连接池中某台服务器出现故障时,其它的服务器仍然正常工作,不会因为单台数据库的故障而造成全部瘫痪的后果。

    amoeba.xml配置

    amoeba连接验证配置:
        <property name="authenticator">
            <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
                <property name="user">root</property>
                <property name="password">root</property>
                <property name="filter">
                    <bean class="com.meidusa.amoeba.server.IPAccessController">
                        <property name="ipFile">${amoeba.home}/conf/access_list.conf</property>
                    </bean>
                </property>
            </bean>
        </property>
    这里定义连接amoeba时用来验证的用户及密码。
    读写分离配置:
        <property name="defaultPool">Master</property>
        <property name="writePool">Master</property>
        <property name="readPool">virtualSlave</property>
    defaultPool:配置了默认的数据库节点,一些除了SELECTUPDATEINSERTDELETE的语句都会在defaultPool执行。
    writePool :配置了数据库写库,通常配为Master,如这里就配置为之前定义的Master数据库。
    readPool :配置了数据库读库,通常配为Slave或者Slave组成的数据库池,如这里就配置之前的virtualSlave数据库池。

    amoeba启动

    启动命令:
        amoeba start
    此命令以前台的方式启动,会输出启动时的信息,检查没有错误信息后,中断,并后台运行:
        amoeba start &

    FAQ

    1、无法正常连接?
    首先根据执行amoeba start输出的信息排除配置文件没有问题,之后确认mysql用户是否有远程连接的权限,然后检查网站的数据库配置文件是否设置正确。
    2、如何配置网站数据库连接文件?
    默认的端口应该为8066,用户及密码在amoeba.xml里设置。
    参考:http://docs.hexnova.com/amoeba/single-dbserver.html
    http://docs.hexnova.com/amoeba/rw-splitting.html

    转载请标明文章来源:《https://www.centos.bz/2012/05/amoeba-for-mysql/》
  • 相关阅读:
    nowcoderD Xieldy And His Password
    Codeforces681D Gifts by the List
    nowcoder80D applese的生日
    Codeforces961E Tufurama
    Codeforces957 Mahmoud and Ehab and yet another xor task
    nowcoder82E 无向图中的最短距离
    nowcoder82B 区间的连续段
    Codeforces903E Swapping Characters
    Codeforces614C Peter and Snow Blower
    Codeforces614D Skills
  • 原文地址:https://www.cnblogs.com/moqiang02/p/4061118.html
Copyright © 2011-2022 走看看