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. [[email protected] ~]# tar -xf jdk-8u91-linux-i586.tar.gz -C /usr/lib/
  2. [[email protected] ~]# ln -s /usr/lib/jdk1.8.0_91/ /usr/lib/java
  3. [[email protected] ~]# cat >> /etc/profile <<EOF
  4. [[email protected] ~]# 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. [[email protected] ~]# source /etc/profile
  10. [[email protected] ~]# 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. [[email protected] ~]# wget http://ncu.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.1.0-RC5.tar.gz
  2. [[email protected] ~]# mkdir -p /application/amoeba-2.1.0-rc5
  3. [[email protected] ~]# tar -xf amoeba-mysql-binary-2.1.0-RC5.tar.gz /application/amoeba-2.1.0-rc5/
  4. [[email protected] ~]# ln -s /application/amoeba-2.1.0-rc5/ /application/amoeba
  5. [[email protected] ~]# echo ‘PATH=/application/amoeba/bin/:$PATH‘ >> /etc/profile
  6. [[email protected] ~]# 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. [[email protected] ~]# 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,轮询1次Slave2-->
  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节点 一些除了SELECT\UPDATE\INSERT\DELETE的语句都会在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

时间: 2024-07-29 09:45:33

amoba读写分离的相关文章

mysql主从及amoeba读写分离

简介: Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy.它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行.基于此可以实现负载均衡.读写分离.高可用性等需求. 拓扑图: 搭建mysql的主从复制环境: ip地址为192.168.150.135作为MASTER 修改my.cnf [[email protected] ~]# vim/etc/my.cnf  [mysqld] port            = 3306 bi

mysql主从复制读写分离

一.环境 1.主服务器操作系统:Mac OS MySQL版本:5.1.6 2.从服务器操作系统:Centos 6.5 MySQL版本:5.1.6 二.实战 2.1MySQL主从复制,读写分离示意图 MySQL 复制的工作方式很简单,一台服务器作为主机,一台或多台服务器作为从机.主机会把数据库的变化记录到日志.一旦这些变化被记录到日志,就会立刻(或者以设定的时间间隔)被送到从机. 2.2 主服务器IP:172.16.151.1 从服务器IP:172.16.151.130 在两台服务器分别安装好My

Amoeba在Master/Slave结构下的读写分离测试

Amoeba在Master/Slave结构下的读写分离 MySQL主从复制原理图 MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上. 当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句. 主服务器创建一个线程将二进制日志中的内容发送到从服务器.该线程可以识别为主服务器上SHOW PROCESSLIST的输出中的Binlog Dump线程. 从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并

mysql读写分离的三种实现方式

1 程序修改mysql操作类可以参考PHP实现的Mysql读写分离,阿权开始的本项目,以php程序解决此需求.优点:直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配缺点:自己维护更新,增减服务器在代码处理 2 amoeba参考官网:http://amoeba.meidusa.com/优点:直接实现读写分离和负载均衡,不用修改代码,有很灵活的数据解决方案缺点:自己分配账户,和后端数据库权限管理独立,权限处理不够灵活 3 mysql-proxy参考 mysql-proxy

mysql主从复制与读写分离

MySQL主从复制与读写分离 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面. 因此,一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力 这样的方案来进行部

mysql读写分离

mysql读写分离  静态分离:直接将服务器地址写入程序  动态分离:通过代理服务器对数据进行读写操作,由代理服务器判定读写操作,在主服务器上写数据,在          从服务器上读数据.    1.使用mysql-proxy实现读写分离  # ./mysql-proxy --proxy-backend-addresses=10.0.5.150:3306 --proxy-read-only-backend-addresses=10.0.5.151:3306 --proxy-lua-script

测试ReplicaSets读写分离和故障转移

读写分离实现步骤: 从库能够进行查询就更好了,这样可以分担主库的大量的查询请求. 1) 先向主库中插入一条测试数据 rs1:PRIMARY> db.c1.insert({age:30});db.c1.insert({age:30}); WriteResult({ "nInserted" : 1 }) rs1:PRIMARY>  db.c1.find() db.c1.find() { "_id" : ObjectId("5791ef011f4c6

mysql-proxy源码安装及配置mysql读写分离

安装Mysql-proxy关联系统包 libevent libevent-devel glib2 glib2-devel lua 5.1.x lua-devel-5.1.x pkg-config mysql-devel openssl openssl-devel gcc* 2安装MySQL-proxy 0.8.5 下载源码包并解压 在源码包路径下安装 ./configure –prefix=/u01/mysql-proxy make make install 3.配置mysql-proxy.cn

新春好跑步,以及数据库“读写分离”的点滴考虑

新春的好日子: 小风吹来: 花一样的味道: 满满的幸福滋味. 迈开步子在宽敞的马路上跑步,步伐轻盈,多么美好的事情. 跑步总是枯燥的,只有奔跑奔跑: 跑步是孤独的,每个人的都有自己的节奏: 跑步的时候总爱瞎想,昨天和一些同学聊到了数据库的"读写分离". 在我有限的认识中,我一直认为数据库"读写分离",是为了提升数据库的瓶颈,因为数据库写总是相对比较少,而读取可能总是比较多,甚至高几个数量级. 比如一个电子商务网站,把某一个产品上架,可能一个月才需要写一次,但是每天都