zoukankan      html  css  js  c++  java
  • amoba读写分离

    原文链接:http://www.abcdocker.com/abcdocker/81

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

    2.AMOBA不能做什么

      •目前还不支持事务
      •暂时不支持存储过程(近期会支持)
      •不适合从amoeba导数据的场景或者对大数据量查询的query并不合适(比如一次请求返回10w以上甚至更多数据的场合)
      •暂时不支持分库分表,amoeba目前只做到分数据库实例,每个被切分的节点需要保持库表结构一致

    3.安装AMOBA

    安装JDK

    1. [root@db01 ~]# tar -xf jdk-8u91-linux-i586.tar.gz -C /usr/lib/
    2. [root@db01 ~]# ln -s /usr/lib/jdk1.8.0_91/ /usr/lib/java
    3. [root@db01 ~]# cat >> /etc/profile <<EOF
    4. [root@db01 ~]# echo '
    5. export JAVA_HOME=/usr/lib/java
    6. export JRE_HOME=${JAVA_HOME}/jre
    7. export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    8. export PATH=${JAVA_HOME}/bin:$PATH' >> /etc/profileEOF
    9. [root@db01 ~]# source /etc/profile
    10. [root@db01 ~]# java -version
    11. java version "1.8.0_91"
    12. Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
    13. Java HotSpot(TM) Client VM (build 25.91-b14, mixed mode)

    安装amoeba

    1. [root@db01 ~]# wget http://ncu.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.1.0-RC5.tar.gz
    2. [root@db01 ~]# mkdir -p /application/amoeba-2.1.0-rc5
    3. [root@db01 ~]# tar -xf amoeba-mysql-binary-2.1.0-RC5.tar.gz /application/amoeba-2.1.0-rc5/
    4. [root@db01 ~]# ln -s /application/amoeba-2.1.0-rc5/ /application/amoeba
    5. [root@db01 ~]# echo 'PATH=/application/amoeba/bin/:$PATH' >> /etc/profile
    6. [root@db01 ~]# source /etc/profile

    4.AMOEBA基础配置介绍

    Amoeba主要配置文件
    1. dbServers.xml #主机IP,端口,Amoeba的用户名密码
    2. rule.xml         #切分规则相关
    3. functionMap.xml #描述了函数名和函数处理的关系
    4. ruleFunctionMap.xml #自定义函数
    5. access_list.conf #可以访问和拒绝访问的列表
    6. log4j.xml         #日志文件相关配置

    5.配置AMOEBA对一个数据库实例进行操作

    测试mysql是否可以正常连接
    1. [root@db01 ~]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock 
    2. Welcome to the MySQL monitor.  Commands end with ; or g.
    3. Your MySQL connection id is 5
    4. Server version: 5.5.49-log Source distribution
    5. Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
    6. Oracle is a registered trademark of Oracle Corporation and/or its
    7. affiliates. Other names may be trademarks of their respective
    8. owners.
    9. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    10. mysql>

     配置一个DB节点

     
     
    1. <?xml version="1.0" encoding="gbk"?>
    2. <!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd">
    3. <amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/">
    4.                 <!-- 
    5.                         Each dbServer needs to be configured into a Pool,
    6.                         If you need to configure multiple dbServer with load balancing that can be simplified by the following configuration:
    7.                          add attribute with name virtual = "true" in dbServer, but the configuration does not allow the element with name factoryConfig
    8.                          such as 'multiPool' dbServer   
    9.                 -->
    10.         <dbServer name="abstractServer" abstractive="true">
    11.                 <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
    12.                         <property name="manager">${defaultManager}</property>
    13.                         <property name="sendBufferSize">64</property>
    14.                         <property name="receiveBufferSize">128</property>
    15.                         <!-- mysql port -->
    16.                         <property name="port">3306</property>
    17.                         <!-- mysql schema -->
    18.                         <property name="schema">test</property>
    19.                         <!-- mysql user -->
    20.                         <property name="user">oldboy</property>
    21.                         <!--  mysql password -->
    22.                         <property name="password">123456</property>
    23.                 </factoryConfig>
    24.                 <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
    25.                         <property name="maxActive">500</property>
    26.                         <property name="maxIdle">500</property>
    27.                         <property name="minIdle">10</property>
    28.                         <property name="minEvictableIdleTimeMillis">600000</property>
    29.                         <property name="timeBetweenEvictionRunsMillis">600000</property>
    30.                         <property name="testOnBorrow">true</property>
    31.                         <property name="testWhileIdle">true</property>
    32.                 </poolConfig>
    33.         </dbServer>
    34.         <dbServer name="server1"  parent="abstractServer">
    35.                 <factoryConfig>
    36.                         <!-- mysql ip -->
    37.                         <property name="ipAddress">127.0.0.1</property>
    38.                 </factoryConfig>
    39.         </dbServer>
    40.         <dbServer name="multiPool" virtual="true">
    41.                 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
    42.                         <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=H
    43. A-->
    44.                         <property name="loadbalance">1</property>
    45.                         <!-- Separated by commas,such as: server1,server2,server1 -->
    46.                         <property name="poolNames">server1</property>
    47.                 </poolConfig>
    48.         </dbServer>
    49. </amoeba:dbServers>

    6.AMOEBA读写分离

    1. 创建授权用户bzjxs
    2. GRANT ALL ON *.* TO 'bzjxs'@'172.16.1.%' IDENTIFIED BY '123456'
    3. 配置dbServer.xml
    4. <?xml version="1.0" encoding="gbk"?>
    5. <!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd">
    6. <amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/">
    7. ...
    8.  <dbServer name="Master"  parent="abstractServer">
    9.   <factoryConfig>
    10.    <!-- mysql ip -->
    11.    <property name="ipAddress">192.168.0.1</property>
    12.   </factoryConfig>
    13.  </dbServer>
    14. <--配置mysql节点master-->
    15.  
    16.  <dbServer name="Slave1"  parent="abstractServer">
    17.   <factoryConfig>
    18.    <!-- mysql ip -->
    19.    <property name="ipAddress">192.168.0.2</property>
    20.   </factoryConfig>
    21.  </dbServer>
    22. <--配置mysql节点slave1-->
    23.  <dbServer name="Slave2"  parent="abstractServer">
    24.   <factoryConfig>
    25.    <!-- mysql ip -->
    26.    <property name="ipAddress">192.168.0.3</property>
    27.   </factoryConfig>
    28.  </dbServer>
    29. <--配置mysql节点slave2-->
    30.   
    31.  <dbServer name="virtualSlave" virtual="true">
    32. <--配置mysql节点池-->
    33.   <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
    34.    <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
    35.    <property name="loadbalance">1</property>
    36. <--1代表轮询-->
    37.    
    38.    <!-- Separated by commas,such as: server1,server2,server1 -->
    39.    <property name="poolNames">Slave1,Slave1,Slave2</property>
    40. <--配置权重 代表轮询两次Slave1,轮询1Slave2-->
    41.   </poolConfig>
    42.  </dbServer>
    43. ...
    44. </amoeba:dbServers>

    配置amoeba.xml直接配置读写分离

    1. <?xml version="1.0" encoding="gbk"?>
    2. <!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd">
    3. <amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/">
    4. ...
    5. <queryRouter class=”com.meidusa.amoeba.mysql.parser.MysqlQueryRouter”>  
    6.    <property name="LRUMapSize">1500</property>
    7. <--amoeba缓存的语句的条数-->
    8.    <property name="defaultPool">Master</property> 
    9. <--默认访问的mysql节点 一些除了SELECTUPDATEINSERTDELETE的语句都会在defaultPool执行-->
    10.    <property name="writePool">Master</property>
    11. <--写入的服务器-->
    12.    <property name="readPool">virtualSlave</property>
    13. <--读取的服务器可以是节点名也可以是节点池名-->
    14.    <property name="needParse">true</property>  
    15. </queryRouter>  
    16. ...
    17. </amoeba:configuration>
    AMOEBA官方文档
    http://docs.hexnova.com/amoeba/rw-splitting.html
  • 相关阅读:
    TeXLive安装过程
    js 如何获取class的元素 以及创建方法getElementsByClassName
    点击返回
    MVC框架实现文件的上传(支持多文件上传)
    团购倒计时抢购功能
    获取取当前页 地址分割字符串
    网页内容截取部分打印
    HttpFileCollection 实现多文件上传
    JS如何获取URL
    正则表达式 占位符 替换
  • 原文地址:https://www.cnblogs.com/kevincaptain/p/6520434.html
Copyright © 2011-2022 走看看