amoeba

amoeba实现mysql读写分离

安装jdk

jdk7.tar.bz2

tar -jxvf jdk7.tar.bz2

./configure

make && make install

安装mysql

mkdir /usr/local/amoeba/

下载amoeba-mysql-1.3.1-BETA.zip

unzip amoeba-mysql-1.3.1-BETA.zip

配置文件如下

<?xml version="1.0" encoding="gbk"?>

<!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd">

<amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/">

<server>

<property name="port">8066</property> //amoeba端口

<property name="ipAddress">10.130.6.29</property> //本机ip

<property name="readThreadPoolSize">20</property>

<property name="clientSideThreadPoolSize">30</property>

<property name="serverSideThreadPoolSize">30</property>

<property name="netBufferSize">128</property>

<property name="tcpNoDelay">true</property>

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

<property name="password">123456</property>

<property name="queryTimeout">60</property>

</server>

<connectionManagerList>

<connectionManager name="defaultManager" class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper">

<property name="subManagerClassName">com.meidusa.amoeba.net.AuthingableConnectionManager</property>

<!--

default value is avaliable Processors

<property name="processors">5</property>

-->

</connectionManager>

</connectionManagerList>

<dbServerList>

<dbServer name="server1">  //mysql主机

<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">

<property name="manager">defaultManager</property>

<property name="port">3306</property>

<property name="ipAddress">10.130.6.114</property>//主数据库

<property name="schema">test</property> //库名

<property name="user">pan</property> //代理用户

<property name="password">123456</property> //代理用户密码

</factoryConfig>

<poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">

<property name="maxActive">200</property>

<property name="maxIdle">200</property>

<property name="minIdle">10</property>

<property name="minEvictableIdleTimeMillis">600000</property>

<property name="timeBetweenEvictionRunsMillis">600000</property>

<property name="testOnBorrow">true</property>

<property name="testWhileIdle">true</property>

</poolConfig>

</dbServer>

<dbServer name="server2"> //另一台数据库

<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">

<property name="manager">defaultManager</property>

<property name="port">3306</property>

<property name="ipAddress">10.130.6.115</property> //mysql

<property name="schema">test</property>

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

<property name="password">123456</property>

</factoryConfig>

<poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">

<property name="maxActive">200</property>

<property name="maxIdle">200</property>

<property name="minIdle">10</property>

<property name="minEvictableIdleTimeMillis">600000</property>

<property name="timeBetweenEvictionRunsMillis">600000</property>

<property name="testOnBorrow">true</property>

<property name="testWhileIdle">true</property>

</poolConfig>

</dbServer>

<dbServer name="master" virtual="true"> //mysql的master

<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">

<property name="loadbalance">1</property>

<property name="poolNames">server1</property> //主数据库

</poolConfig>

</dbServer>

<dbServer name="slave" virtual="true"> //mysql的slave

<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">

<property name="loadbalance">1</property>

<property name="poolNames">server1,server2,server2</property> //从数据库读俩次,主数据库读一次

</poolConfig>

</dbServer>

</dbServerList>

<queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">

<property name="ruleConfig">${amoeba.home}/conf/rule.xml</property>

<property name="functionConfig">${amoeba.home}/conf/functionMap.xml</property>

<!-- <property name="ruleFunctionConfig">${amoeba.home}/conf/ruleFunctionMap.xml</property> -->

<property name="LRUMapSize">1500</property>

<property name="defaultPool">master</property> //默认主库

<property name="writePool">master</property>    //主库复制写请求

<property name="readPool">slave</property>    //读请求

<property name="needParse">true</property>

</queryRouter>

</amoeba:configuration>

更改amoeba.xml配置文件 乱码和注释去掉 <!--  --> (有乱码起不来服务) (部分功能注释要去掉)

amoeba 启动 无报错信息后 后台启动

nohup /usr/local/amoeba/bin/amoeba &

grant all on test.* to [email protected]‘192.168.1.%‘ identified by ‘123456‘;

flush privileges;

在aomeba上登陆

mysql -uroot -ppassword -h192.168.1.159 -P8066   amoeba-server的ip

先关掉主从配置 stop slave

向表插入数据 数据只可以在主上看到

执行select 第一次执行看到主的数据 ,第二次三次为从上的未变动数据 第四次循环为主的数据

此效果为配置成功

如有报错 (相关依赖包根据报错安装)

# vim amoeba

修改58行的Xss参数:

DEFAULT_OPTS="-server -Xms1024m -Xmx1024m -Xss128k"

修改为:

DEFAULT_OPTS="-server -Xms1024m -Xmx1024m -Xss256k"

时间: 2024-10-31 05:02:27

amoeba的相关文章

Amoeba变形虫

我们通过路由选择来决定操作时访问那个数据库,而路由的选择方式不外乎以下几种: 1) SpringAOP方式:spring底层配置多个数据源,配置路由(面向切面编程)手工写很多代码(废除) 2) MySql proxy编程lua(脚本语言)(几乎没人直接使用) 3) Amoeba国人基于mysql proxy.不用编程,配置两个xml文件即可,对程序没有侵入性. 4) MyCat阿里,基于mysqlProxy 这里主要应用Amoeba. Amoeba读写分离,通过配置xml文件来声明有几个数据库服

Amoeba常见问题

1.1.1 JAVA_HOME不认 jdk安装后测试无问题java –version,但启动amoeba就是报错JAVA_HOME找不到.就修改/amoeba/bin/amoeba文件,在文件最开头直接写入JAVA_HOME环境变量. JAVA_HOME=/usr/local/src/java/jdk1.7.0_51 1.1.2 java栈设置小 默认配置Xss比较小128k,启动时提示太小,则修改/amoeba/bin/amoeba文件,修改为256k即可. DEFAULT_OPTS="-se

mysql中间件amoeba实现mysql读写分离

Amoeba是一个以MySQL为底层数据存储,并相应用提供MySQL协议接口的proxy.它集中地响应应用的请求,根据用户事先设置的规则.将SQL请求发送到特定的数据库上运行.基于此能够实现负载均衡.读写分离.高可用性等需求.与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQL Proxy简单).本文就来实现一个简单的amoeba的配置 实验环境: 192.168.1.121为amoeba

MySQL之主从复制和读写分离(Amoeba)

案例环境: Master:192.168.154.164 Slave01:192.168.154.176 Slave02:192.168.154.156 Amoeba:192.168.154.177 应用服务器:192.168.154.155 集群拓朴: 部署实施: 一 操作系统和应用程序安装(略) 二 搭建MySQL主从复制环境 1 架构前端有硬件防火墙,因此所有服务器的iptables处于关闭状态(如果没有,请开放相应的端口) [[email protected] ~]#service ip

mysql-proxy和amoeba 分别实现Mariadb读写分离

1.Mysql-proxy实现读写分离 MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡.对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可.当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连

Amoeba实现Mysql读写分离

环境规划 Amoeba读写分离器 172.16.254.144/16 Mysql服务器(master) 172.16.254.150/16 Mysql服务器(slave) 172.16.254.151/16 一.先实现mysql主从复制,在master上使用yum安装mysql [[email protected] mysql]# yum -y install mysql mysql-server 启用二进制日志,编辑/etc/my.cnf在[mysqld]下添加如下行: log-bin = /

Amoeba+Mysql实现数据库读写分离

一.Amoeba 是什么 Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发.座落与Client.DB Server(s)之间.对客户端透明.具有负载均衡.高可用性.sql过滤.读写分离.可路由相关的query到目标数据库.可并发请求多台数据库合并结果. 主要解决: ? 降低 数据切分带来的复杂多数据库结构 ? 提供切分规则并降低 数据切分规则 给应用带来的影响 ? 降低db 与客户端的连接数 ? 读写分离 二.为什么要用Amoeba 目前要实现mysql的主从读写分离,主要有以下

amoeba:关于mysql的读写分离

今天用amoeba做了次读写分离,下面总结下步骤: 三台linux: 1.192.168.1.213    用于做amoeba服务器 2.192.168.1.184    用于mysql数据库 3.192.168.1.185    用于mysql数据库 #service iptables stop #setenforce 0 一.运行amoeba需要java运行环境,所以先安装jdk环境 rpm –ivh jdk-7u45-linux-i586.rpm vim /etc/profile tomc

基于主从复制的Mysql双机热备+amoeba实现读写分离、均衡负载

读写分离指的是客户只能在主服务器上写,只能在从服务器上读,当然了,这也是要看配置,你可以在主服务器配置读的功能,但是在从服务器上只能读不能写,因为从服务器是基于binlog对主服务器的复制,如果在从服务器上写的话,会造成主从不一致的结果.mysql实现读写分离,写的压力虽然没有减少,但是读的压力瞬间就减少了一半. Amoeba的中文意思是阿米巴.变型虫Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy代理服务器.它集中地响应应用的请求,依据用户事先设置的规则

实现mysql 数据集群的读写分离之 amoeba

服务器配置: amoeba    :192.168.240.130 master写服务器:192.168.240.129 slave读服务器 :192.168.240.128 mysql主从配置............略,可参照:http://752030200.blog.51cto.com/8936921/1853460 Amoeba数据库代理 前提条件应该把所有数据库节点的密码进行统一,并允许将要配置的amoeba的IP进行连接. 以下说明和配置文件信息引用自https://my.oschi