Ameoba实现MySQL读写分离及负载均衡

Amoeba简介:
      amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQL Proxy简单)。
     
       amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。用户需要结合使用MySQL的 Replication等机制来实现副本同步等功能。amoeba对底层数据库连接管理和路由实现也采用了可插拨的机制,第三方可以开发更高级的策略类来替代作者的实现。这个程序总体上比较符合KISS的思想。

以上来自百度百科,以下我们通过实验来学习如何配置Ameoba

实验: amoeba实现读写分离及负载均衡

注意: 在真实环境中读写分离和AB复制是结合使用的,但为了观察读写分离的效果,我们此次实验的三台MySQL服务器并未配置AB复制

代理: 10.10.10.16
       写: master: 10.10.10.13
       读:  slave1: 10.10.10.14
             slave2: 10.10.10.15
   注意:读写分离一般结合AB复制一起,但为了测试效果,本实验未配置AB复制
   
软件:amoeba-mysql-binary-2.2.0.tar.gz
       jdk-7u67-linux-x64.tar.gz  \\
       
安装软件
   # tar xf jdk-7u67-linux-x64.tar.gz  -C /usr/local/
   # cd /usr/local/
   # mv jdk1.7.0_67/  java
   # mkdir /usr/local/amoeba
   # tar xf amoeba-mysql-binary-2.2.0.tar.gz  -C /usr/local/amoeba/
配置环境
   # vim /etc/profile.d/ameoba.sh    
       export JAVA_HOME=/usr/local/java
       export PATH=$JAVA_HOME/bin:/usr/local/amoeba/bin:$PATH
   # source /etc/profile.d/ameoba.sh
   # java -version
       java version "1.7.0_67"
       Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
       Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
       
mysql服务器

所有服务器创建由代理服务器连接的用户
   > grant all on *.* to [email protected]‘%‘ identified by ‘123‘;

* 为了测试效果,我们在三台只读服务器上建同名不同内容的表:

master:

> select * from db1.t1;

+------+

|    id   |

+------+

|   13  |

+------+

slave1:

> select * from db1.t1;

+------+

|    id   |

+------+

|   14   |

+------+

slave2:

> select * from db1.t1;

+------+

|    id   |

+------+

|   15   |

+------+

配置ameoba
   # cd /usr/local/amoeba/
  1. 配置ameoba连接后端服务器
       # vim conf/dbServers.xml  
      -----连接mysql的端口号,默认库,用户名,密码-----
        20         <property name="port">3306</property>   \\MySQL服务器端口号
        22         <!-- mysql schema -->
        23         <property name="schema">test</property> \\连接服务器后默认在哪个库
        25         <!-- mysql user -->
        26          <property name="user">mary</property>   
        27          <property name="password">123</property>
       -----定义mysql主机-----
        46         <dbServer name="master"  parent="abstractServer">
        47                 <factoryConfig>
        48                         <!-- mysql ip -->
        49                         <property name="ipAddress">10.10.10.13</property>
        50                 </factoryConfig>
        51         </dbServer>
        53         <dbServer name="slave1"  parent="abstractServer">
        54                 <factoryConfig>
        55                         <!-- mysql ip -->
        56                         <property name="ipAddress">10.10.10.14</property>
        57                 </factoryConfig>
        58         </dbServer>
        60         <dbServer name="slave2"  parent="abstractServer">
        61                 <factoryConfig>
        62                         <!-- mysql ip -->
        63                         <property name="ipAddress">10.10.10.15</property>
        64                 </factoryConfig>
        65         </dbServer>
       -----定义负载均衡策略及主机组-----
        67         <dbServer name="slavepool" virtual="true">   \\负载均衡组名
        69         <!-- Load balancing strategy: 1=ROUNDROBIN , 2    =WEIGHTBASED , 3=HA-->
        70         <property name="loadbalance">1</property> \\负载均衡策略:轮循
         72        <!-- Separated by commas,such as: server1,server2,server1 -->
        73         <property name="poolNames">slave1,slave2</property> \\组成员
        74             </poolConfig>
        75         </dbServer>
  2. 配置ameoba
       # vim conf/amoeba.xml
       -----定义代理服务器端口号及用户名密码-----
       11      <property name="port">8066</property>    \\代理服务器端口号
       27      <property name="authenticator">
       30      <property name="user">admin</property>  
       32      <property name="password">admin</property>
       -----定义读写服务器,使用在dbServers.xml中定义的主机(组)-----
       115    <property name="defaultPool">master</property> \\默认服务器
       116    <property name="writePool">master</property>    \\写服务器
       117    <property name="readPool">slavepool</property> \\读服务器
启动amoeba
   # amoeba start &
测试
   # mysql  -u admin  -padmin  -h 10.10.10.16  -P 8066

> insert into db1.t1 set id=100;  \\向测试表中插入一条记录

> select * from db1.t1;

+------+

|    id   |

+------+

|   15   |

+------+

> select * from db1.t1;

+------+

|    id   |

+------+

|   14   |

+------+

多select几次发现每次t1测试表的记录都是在14和15之间切换,说明只读服务器实现了完美轮循,而我们写入的100这条数据呢?我们直接登录master服务器查看一下:

> select * from db1.t1;

+------+

|   id     |

+------+

|   13    |

|  100   |

+------+

可以看出,我们连接代理服务器所写的记录都写在了master服务器上,而读是在两台只读服务器上读取的数据,完美实现了读写分离+负载均衡

------------------------------------------------------------
另:如果启动时报错:
   The stack size specified is too small, Specify at least 228k
   Error: Could not create the Java Virtual Machine.
   Error: A fatal exception has occurred. Program will exit.
解决办法:修改ameoba命令文件
   # vim /usr/local/amoeba/bin/amoeba
       58 DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"

时间: 2024-10-12 22:32:23

Ameoba实现MySQL读写分离及负载均衡的相关文章

Mysql-Proxy实现mysql读写分离、负载均衡 (转)

在mysql中实现读写分离.负载均衡,用Mysql-Proxy是很容易的事,不过大型处理对于性能方面还有待提高,主要配置步骤如下: 1.1. mysql-proxy安装 MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负 载平衡.对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可.当

MaxScale:实现MySQL读写分离与负载均衡的中间件利器

1.MaxScale 是干什么的? 配置好了MySQL的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡. 读写分离和负载均衡是MySQL集群的基础需求,MaxScale 就可以帮着我们方便的实现这些功能. 2.MaxScale 的基础构成 MaxScale 是MySQL的兄弟公司 MariaDB 开发的,现在已经发展得非常成熟.MaxScale 是插件式结构,允许用户开发适合自己的插件. MaxScale 目前提供的插件功能分为5类: 认证插件

Amoeba搭建高可用Mysql集群(实现Mysql主从复制、读写分离、负载均衡)

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

mysql+amoeba 主从复制,读写分离,负载均衡

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

Gtid+MGR+atlas读写分离以及负载均衡高可用架构

MySQL5.7.24 Gtid+MGR+atlas读写分离以及负载均衡高可用架构 一.服务器环境介绍: 腾讯云的云主机安装360开源的mysql中间键Atlas腾讯云机器的外网ip:119.29.97.131沧州233测试物理机器的外网ip192.168.1.233(安全起见故意写成内网的ip,其实是外网ip) 二.mysqlGtid+MGR安装 参考博文地址: 三.中间键Atlas简介 (摘抄自https://github.com/Qihoo360/Atlas) Atlas 是由 Qihoo

CentOS 7上部署Amoeba实现MySQL主从同步,读写分离,负载均衡高可用群集

实验描述 本实验需要四台主机安装mysql,一台部署Amoeba,一台主数据库服务器,两台从数据库服务器,还需一台主机做客户端访问测试,本实验结束可实现主数据库服务器与从数据库服务器之间数据同步,读写分离(客户机读从服务器的数据,写入的数据存储在主服务器,主服务器再同步给从服务器),负载均衡. 实验拓扑 实验环境 实验步骤 一.Master同步时间 1.Master安装ntp yum install ntp -y 2.修改ntp配置文件 vim /etc/ntp.conf #空白处插入如下内容

数据库读写分离和负载均衡策略

最近在学习数据库的读写分离和主从复制,采用的是一主多从策略,采用轮询的方式,读取从数据库的内容.但是,假如某一台从数据库宕机了,而客户端不知道,每次轮选到此从数据库,不都要报错?到网上查阅了资料,找到一篇不错的博文,不仅讲了解决方案,也详细的讲述了数据库的分区,分表,集群和负载均衡策略,博文原址http://www.cnblogs.com/zhongxinWang/p/4262650.html 第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互

SQL的读写分离与负载均衡问题设想。

首先,我们可以了解一下,SQL的读写分离的工作方式,如下图所示: 总得来说,三种方案,现阶段来说,都是单节点写,多节点读.SQL 2012 的Always On还实现了读负载均衡,但方案投入相对来说较大. 所以用得最多的应还是第二种方案,表级同步,数据差异几秒.但有个问题,当只读的节点多了时,要如何实现负载均衡? 真正的负载均衡,需要计算的东西太多,要计算连接线程数,要计算CPU使用率等,而这一切都需要你在程序中体现.实现难度相对来说会好大! 除非你用第三方服务软件来实现,SQL现阶段来说,这样

phalcon:数据库分库,读写分离,负载均衡 系统方法执行顺序

用命名空间区分不同的数据库实例,对应代码结构上是不同的目录区分,在同一目录下基类负责初始化连接.连接来自初始化时注入的多个db服务 隐规则: initialize()在每个请求期间只会调用一次 为每个 new 创建的实例执行初始化任务使用onConstruct() namespace Company\Models\Notification;   /** * Class BaseModel * * beforeSave()和afterFetch()成对使用,用于读写数据时自动转化数据. * 例如自