• MySQL基于amoeba读写分离实验


    MySQL基于amoeba读写分离实验
    amoeba :中文叫做变形虫
    ===========================================
    主从复制只是一个同步数据的方式
    读写分离:只在主的上面写,只在从的上面读
    读写分离方案:【1】基于程序代码内部 (生产环境中应用最广泛,性能最好,需要开发人员来实现)
    【2】基于中间代理层的实现
    amoeda 是阿里巴巴使用的产品
    ===========================================
    实验要求
    5台机器
    web服务器 1台  :192.168.200.66
    amoeba 服务器一台:192.168.200.67
    数据库3台
          数据库A :192.168.200.68    (mysql主服务器)
          数据库B :192.168.200.69    (mysql从服务器)
          数据库C :192.168.200.70    (mysql从服务器)
    ===========================================
    amoeba :67
    chmod +x jdk-6u31-linux-x64.bin
    ./jdk-6u31-linux-x64.bin
    mv jdk1.6.0_31/ /usr/local/jdk1.6
    ////安装amoeba 不仅需要amoeba软件包还需要有jdk-6u31-linux-x64.bin
    /////amoeba 软件是基于jdk1.5版本开始的。
    ls
    mv jdk1.6.0_14/ /usr/local/jdk1.6
    vim /etc/profile
    export JAVA_HOME=/usr/local/jdk1.6
    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export PATH=$PATH=$PATH:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$HOME/bin
    export  AMOEBA_HOME=/usr/local/amoeda
    export PATH=$PATH:$AMOEBA_HOME/bin
    保存退出
    source /etc/profile
    java -version
    rm -rf /usr/bin/java
    source /etc/profile
    java -version
    mkdir /usr/local/amoeba
    tar xf amoeba........tat.gz -C /usr/local/amoeba
    chmod -R 755 /usr/local/amoeba
    ---------------------------------------------
    3台数据库服务器都要做授权,让amoeba可以进行访问
    grant all on *.* to 'test'@'192.168.200.%' identified by '123.com';    //用户名是test  密码是123.com
    flush privileges;
    ----------------------------------------------
    修改amoeba的配置文件
    主机amoeba 67 操作
    cd /usr/local/amoeba/
    ls
    cd conf
    ls
    cp amoeba.xml{,.bak}
    vim   amoeba.xml   //修改30行左右的文件内容
    <property name="user">amoeba</property>
    <property name="password">123456</property>   //指定客户端连接时的用户名和密码
    ///115行左右
    <property name="defaultPool">master</property>
    ////去掉以下两行的注释
    <property name="writePool">master</property>    //写交合主 
    <property name="readPool">slaves</property>  //读交给从slaves是从的组,里面包含slave1和slave2
    保存退出
    cp dbServers.xml{,.bak}
    vim  dbServers.xml  //找到以下内容进行修改
    <property name="user">test</property>
    /////去掉注释的mysql password 改为以下内容
    <!-- mysql password-->
    <property name="password">123.com</property>
    ////找到dbServer
    <dbServer name="master"  parent="abstractServer"
     <factoryConfig>
         <property name="ipAddress">192.168.200.68</property>
     </factoryConfig>
    </dbServer>
    <dbServer name="slave1"  parent="abstractServer"
     <factoryConfig>
         <property name="ipAddress">192.168.200.69</property>
     </factoryConfig>
    </dbServer>
    <dbServer name="slave2"  parent="abstractServer"
     <factoryConfig>
         <property name="ipAddress">192.168.200.70</property>
     </factoryConfig>
    </dbServer>
    ////声明slaves组 找到以下内容
    <dbServer name="slaves" virtual="ture">
     <poolConfig class="com.meidusa......ServerPool">
     <property name="loadbalance">1</property>
     <property name="poolNames">slave1,slave2</property>
     </poolConfig>
    </dbServer>
    保存退出
    cd
    nohup /usr/local/amoeba/bin/amoeba start &   ///不依赖于任何终端,放到后台执行
    netstat -lnpt   //查看端口是否开启
    注意:cat nohup.out
    ps  aux |grep amoeba  //查看端口8066
    ---------------------------------------------------------------------------
    web 服务器66
    yum -y install mariadb
    mysql -u amoeba -p123456 -h 192.168.200.67 -p 8066   //客户机做连接
    =====测试amoeba是否能进行读写分离=========
    【1】在数据库主服务器上创建
    create database db_test;
    use db_test;
    create table student(id int(10),name varchar(10),address varchar(20));
    show databases;
    【2】在两台数据库从服务器上进行检测,看是否同步
    show databases;
    【3】先把两台数据库从服务器的复制功能停止
    stop slave;
    【4】在主数据库中插入数据
    insert into student values('1','crushlinux','this_is_master');
    【5】在slave1 slave2中分别插入以下数据
    -----slave1
    use db_test;
    insert into student values('2','crushlinux','this_is_slave1');
    -----slave2
    use db_test;
    insert into student values('3','crushlinux','this_is_slave2');
    【6】web客户端查询测试
    use db_test;
    select * from student;
    ///测试结果是能够看到里面内容是轮询的。 而且只能看到从数据库上面的内容。
    【7】web客户端插入数据
    use db_test;
    insert into student values('4','crushlinux','this_is_web');
    【8】web客户端检查
    use db_test;
    select * from student;
    【9】主数据库中查看是否有4的数据
    use db_test;
    select * from student;
    【10】开启两台从数据库的主从复制功能
    start slave;
    show slave status;  //查看是否开启
    【11】在web客户端查看
    use db_test;
    select * from student;  //会看到124 或者134 的数据
    在插入一条数据
    insert into student values('5','crushlinux','this_is_web');
    ///结果是1245或者是1345 总之,从服务器的数据不会同时出现。
    ===========完成!!!!!!!===========
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    三范式
    解决Linux下乱码
    ER概念模型
    20140607
    PHP Fatal error: Class 'Yaf_Application' not found
    PHP流式读取XML文件
    php反射的使用
    wget 和curl 进行post数据
    crontab
    Leetcode OJ: Gray Code
  • 原文地址:https://www.cnblogs.com/elin989898/p/11968981.html
Copyright © 2020-2023  润新知