mysql 读写分离 之 amoeba

amoeba简介:
Amodea for mysql 是mysql的前端代理,主要作用是应用层访问mysql 数据库时做请求转发的功能,具有负载均衡,高可用性,query过滤,读写分离,可以将相关的query到目标数据库,可并发请求到多台数据库合并结果。


1.环境准备
3台mysql 数据库服务器:
1台主服务器
2台从服务器
我的配置如下
192.168.213.132(部署amoeba,mysql数据库 master)
192.168.213.131(mysql数据库 slave)
192.168.213.130(mysql数据库slave)


2.数据库的主从复制环境搭建
    此次测试主从复制,读写分离,所以首先配置mysql的主从复制
    分别在三台创建可以有权限的用户
    执行如下语句
    
    grant all privileges   on  test   to  rw   @'192.168.213.%'   identified by 'rw123456'
     
    

3.读写分离
    3.1安装 amoeba
    下载 amoeba for mysql 二进制文件  http://sourceforge.net/projects/amoeba/files/?source=navbar
    本篇环境使用的版本为amoeba-mysql-binary-2.1.0-RC5.tar.gz
        amoeba 是java语言开发,运行时需要java环境变量的支持
       3.1.1配置jdk 环境
        chmod +x jdk-6u45-linux-i586.bin  #添加可执行权限
        ./jdk-6u45-linux-i586.bin                 #执行安装
        cp -r  jdk1.6.0_45/ /usr/local/jdk1.6/#将jdk复制到/usr/local 下
        将jdk环境变量添加到/root/.bashrc文件中
        vi /root/.bashrc
        文件末尾添加
             export JAVA_HOME=/usr/local/jdk1.6                        #jdk的文件目录位置
            export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
            export PATH=.:$JAVA_HOME/bin:$PATH:$JMETER_HOME/bin
        保存 退出
        执行 source /root/.bashrc   #加载环境变量
        输入 java -version 有输出java版本号 即jdk环境配置成功
        
        
        将 amoeba-mysql-binary-2.1.0-RC5.tar.gz解压至 /usr/local/amoeba 文件夹下
         cd /usr/local/amoeb/bin
        amoeba  出现如下界面即可
        
        
        3.2 配置amoeba
            首先说下amoeba 的文件目录
            
            conf:主要配置文件
                conf/dbServers.xml:数据库保持通信的配置文件。比如主机ip,端口号,Amoeba使用的用户名和密码。
                conf/rule.xml:数据切分规则配置文件。
                conf/functionMap.xml:函数库,mysql操作数据库的时候所使用的库函数。
                conf/ruleFunctionMap.xml:自定义函数,我们进行数据切分是定义的自定义函数
                conf/accescc_list.conf:配置可以访问和拒绝访问的主机ip地址
                conf/log4j.xml:用户输入日志级别
          bin:命令行目录
          lib:运行时所需要的jar文件
          benchmark:提供的amoeba性能测试相关文件
                benchmark/query.xml:定义数据查询语句
                benchmark/context.xml:对应query语句的上下文文件

        修改 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>
                        <!-- mysql port    数据库的端口号-->
                        <property name="port">3306</property>
                        <!-- mysql schema  连接数据库-->
                        <property name="schema">test</property>
                        <!-- mysql user  用户名-->
                        <property name="user">rw</property>
                        <!--  mysql password   密码-->
                        <property name="password">rw123456</property>
                </factoryConfig>

        修改dbServer 相关内容 配置数据库的相关ip信息
            <dbServer name="master"  parent="abstractServer">
                <factoryConfig>
                        <!-- mysql ip   数据库master   ip -->
                        <property name="ipAddress">192.168.213.132</property>
                </factoryConfig>
        </dbServer>
        <dbServer name="slave01"  parent="abstractServer">
                <factoryConfig>
                        <!-- mysql ip   服务器 slave ip  -->
                        <property name="ipAddress">192.168.213.130</property>
                </factoryConfig>
        </dbServer>
        <dbServer name="slave02"  parent="abstractServer">
                <factoryConfig>
                        <!-- mysql ip  数据库 slave  -->
                        <property name="ipAddress">192.168.213.131</property>
                </factoryConfig>
        </dbServer>
    
        修改配置 从数据库的 负载均衡
        ROUNDOBIN 轮询模式
        WEIGHTBASED 权重
        <dbServer name="multiPool" 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">slave01,slave02</property>
                </poolConfig>
        </dbServer>
        

        修改amoeba.xml文件
        <service name="Amoeba for Mysql" class="com.meidusa.amoeba.net.ServerableConnectionManager">
                        <!-- port 开启的端口号 -->
                        <property name="port">8066</property>
                        <!-- bind ipAddress  绑定的ip地址master 所在机器ip 地址 -->

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

                        <property name="manager">${clientConnectioneManager}</property>

                        <property name="connectionFactory">
                                <bean class="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory">
                                        <property name="sendBufferSize">128</property>
                                        <property name="receiveBufferSize">64</property>
                                </bean>
                        </property>
            配置 amoeba 登陆数据用户名 密码
            <property name="authenticator">
                                <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">

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

                                        <property name="password"></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>
           配置 读写分离     defaultPool 为默认的使用的数据库
            master 为dbServer.xml中 dbServer 标签中的值name值
            writePool 为写数据的数据库 
            readPool为读数据的数据库  因为配了两台读的数据库,我们在dbServer.xml 中设置了读数据的负载均衡。所以此处使用我们配置的 multiPool
        <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">master</property>
                <property name="readPool">multiPool</property>
                <property name="needParse">true</property>
        </queryRouter>
    

        配置访问权限
        vi conf/access_list.conf
        添加可访问的ip
        #配置IP访问控制
        #
        # 优先级别从上往下,前面的优先级别高,每条一行
            #192.*.1.236-239:yes
            #比如192.34.1.238则可以访问,否则将不能访问。
            #218.85.*.*:no
            #127.0.0.1:yes
        192.168.213.*:yes

4.测试验证
        slave 数据库开启slave 服务
        start  slave;

        开启amoeba 服务
        /usr/local/amoeba/bin/amoeba start
        出现下面信息即可
        
        使用amoeba 登陆
        mysql -u root -p -h192.168.213.183 -P8066
        -P 为amoeba的端口号
        出现此界面为成功
         

   验证写数据
        将两台从服务器 从机服务关闭
        stop slave
        在amoeba 建数据
        先数据表里加数据
        
        分别查看主数据库,从数据库里面的数据
        
        主数据库数据
        
        从数据库数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值