本文收集整理自:

  Amoeba搞定mysql主从读写分离 http://blog.chinaunix.net/uid-20639775-id-154600.html

  Amoeba非常好用的mysql集群软件 http://blog.sina.com.cn/s/blog_5f66526e0100xaez.html

  centos安装配置JDK http://www.cnblogs.com/zhoulf/archive/2013/02/04/2891608.html

一、Amoeba 是什么

Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。

主要解决:

• 降低 数据切分带来的复杂多数据库结构

• 提供切分规则并降低 数据切分规则 给应用带来的影响

• 降低db 与客户端的连接数

• 读写分离

 目前可以有三种解决方式实现mysql读写分离
1 程序修改mysql操作类
优点:直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配
缺点:自己维护更新,增减服务器在代码处理
 
2 amoeba
参考官网:http://amoeba.meidusa.com/
优点:直接实现读写分离和负载均衡,不用修改代码,有很灵活的数据解决方案
缺点:自己分配账户,和后端数据库权限管理独立,权限处理不够灵活
 
3 mysql-proxy
参考 mysql-proxy。
优点:直接实现读写分离和负载均衡,不用修改代码,master和slave用一样的帐号
缺点:字符集问题,lua语言编程,还只是alpha版本,时间消耗有点高
 
如果你不能安装软件来解决读写分离,那可以尝试阿权的项目解决思路。
如果你可以安装软件,那amoeba是不错的,mysql-proxy不太建议,目前只有alpha版本,效率还不太理想,amoeba目前在阿里巴巴是内部项目,正在生产环境使用的。

三、快速架设amoeba,实现mysql主从读写分离

假设amoeba的前提条件:

n         Java SE 1.5 或以上 Amoeba 框架是基于JDK1.5开发的,采用了JDK1.5的特性。

n         支持Mysql 协议版本10(mysql 4.1以后的版本)。

n         您的网络环境至少运行有一个mysql 4.1以上的服务

1.首先配置主从库:这里不做介绍,《Amoeba搞定mysql主从读写分离》有介绍。

2.amoeba安装:

首先安装java环境(详细可参考:http://www.cnblogs.com/leezhxing/p/3614262.html)

需要Java SE 1.5 或以上:地址 http://java.sun.com/javase/downloads/index.jsp

我下载的:jdk-8-linux-x64.rpm

rpm -ivh jdk-8-linux-x64.rpm  默认安装到了/usr/java下

查看是否安装成功:java -version 会看到版本信息

配置环境变量:vi /etc/profile

在文件中追加:

JAVA_HOME=/usr/java/jdk1.7.0
JRE_HOME=/usr/java/jdk1.7.0/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH

使修改生效:source /etc/profile

查看系统环境状态:

[root@admin ~]# echo $PATH
/usr/local/cmake/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.7.0/bin:/usr/java/jdk1.7.0/jre/bin:/root/bin

接下来就是安装amoeba-mysql

这个地址是amoeba使用指南:http://docs.hexnova.com/amoeba/

这里用 《Amoeba搞定mysql主从读写分离》给的链接下载下来的conf文件好像有修改,可以直接从Amoeba在SourceForge的主页下载Amoeba,http://sourceforge.net/projects/amoeba/files/

我第一下下载了3.X版本,总是报错。后来下载了2.x.tar.gz的版本,直接解压就OK!

tar -zxpf amoeba-mysql-binary-2.1.0-RC5.tar.gz -C /usr/local/amoeba-mysql

 运行很简单 bin/amoeba 即可,后台运行 bin/amoeba &
如果没有配置JAVA_HOME,则会有如下提示:
[root@aslibra amoeba-mysql]# bin/amoeba
Error: JAVA_HOME environment variable is not set.
如果你是比1.5低,比如1.4的,运行会有错误提示,下载jdk1.5以上的版本,压缩版解压后设置好环境变量即可。
 
我的启动时报错:
The stack size specified is too small, Specify at least 160k
Error: Could not create the Java Virtual Machine.

Error: A fatal exception has occurred. Program will exit.

解决:

打开bin/amoeba
 
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k" 
改成 
DEFAULT_OPTS="-server -Xms2048m -Xmx2048m -Xmn1000m -Xss2048k"

配置文件位于conf目录下,执行文件位于bin目录下,解压后发现bin目录下的启动文件没有可执行权限,请执行:chmod -R +x /usr/local/amoeba/bin/

Amoeba For MySQL 的使用非常简单,所有的配置文件都是标准的XML 文件,总共有四个配置文件。分别为:

◆ amoeba.xml:主配置文件,配置所有数据源以及Amoeba 自身的参数设置;实现主从的话配置这个文件就可以了;

◆ rule.xml:配置所有Query 路由规则的信息;

◆ functionMap.xml:配置用于解析Query 中的函数所对应的Java 实现类;

◆ rullFunctionMap.xml:配置路由规则中需要使用到的特定函数的实现类;

 conf/amoeba.xml 配置mysql数据库,简单说明一下:(以下的配置来自《Amoeba非常好用的mysql集群软件》,完全按照这个配置就OK!)
 
Amoeba配置文件修改
1 server节点定义amoeba为接受client访问的数据库,可以当作是mysql看待的,用户名和密码是访问时使用的,这个似乎不能定义多个用户名密码,也就是只有一个权限控制,这个对于多应用似乎不大方便。
2 dbServerList里面可以定义很多实际的mysql数据库,增加dbServer节点即可,这里的用户名密码是作为amoeba操作数据库使用 的,要有足够权限。dbServer可以是虚拟的,比如要做负载均衡时可用定义多个数据库归属到此虚拟数据库。2.1RC版的dbServer已移到 dbServers.xml文件中配置。
3 queryRouter节点定义读写的分配情况,也就是读写该发往那个dbServer。
 
vi amoeba.xml 修改主配置文件
4.1)把默认端口8066改成3306
<property name="port">3066</property>
4.2)把默认连接用户名和密码改成自己的
<property name="user">sky</property> 
<property name="password">123456</property>
4.3)把默认的客户端线程数,请求数及服务端回应数改成200,300,300
<property name="readThreadPoolSize">200</property> 
 
                       <!-- proxy server client process thread size --> 
                       <property name="clientSideThreadPoolSize">300</property> 
                       <!-- mysql server data packet process thread size --> 
                       <property name="serverSideThreadPoolSize">300</property
4.4)把默认注释掉的读写分离选项,把注释去掉并readpool修改成server2
<!--  --> 
                       <property name="writePool">server1</property> 
                       <property name="readPool">server2</property>
提示:readPool或writePool可以是dbServers中的multiPool名称,用multiPool来设置负载均衡。
 
***************************************
***************************************
此处如果有两个以上的从库做负载均衡的话,可指定:
        <property name="writePool">server1</property>  //写池不变
                       <property name="readPool">multiPool</property>  //server2 =》multiPool
在修改dbServers.xml 时增加
<dbServer name="server2"    parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">192.168.2.13</property>
</factoryConfig>
</dbServer>

有几个从server增加几个,然后在 <dbServer name="multiPool" virtual="true">中添加从的server名<property name="poolNames">server2,server3,server4,server5</property>

配置方式在dbServers.xml注释中有提到:

<!-- 
   Each dbServer needs to be configured into a Pool,
   If you need to configure multiple dbServer with load balancing that can be simplified by the following configuration:
    add attribute with name virtual = "true" in dbServer, but the configuration does not allow the element with name factoryConfig
    such as 'multiPool' dbServer   
  -->

<!-- 
            一台mysqlServer 需要配置一个pool,
            如果多台 平等的mysql需要进行loadBalance, 
            简单的配置是属性加上 virtual="true",该Pool 不允许配置factoryConfig
            例如 'multiPool' dbServer 
 -->

*******************************************

**********************************************

5.vi dbServers.xml 增加SEVER2模块,里面的连接用户名密码及地址都表示两台MYSQL的物理机器,192.168.1.11和192.168.1.13 另SERVER1是写,SERVER是读
 
<?xml version="1.0" encoding="gbk"?> 
<!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd"> 
 
<amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/"> 
    <!--    
 
      Each dbServer needs to be configured into a Pool, 
 
      If you need to configure multiple dbServer with load balancing that can be simplified by the following configuration: 
 
        add attribute with name virtual = "true" in dbServer, but the configuration does not allow the element with name factoryConfig 
 
        such as 'multiPool' dbServer        
 
    --> 
  <dbServer name="abstractServer" abstractive="true"> 
 
    <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory"> 
 
      <property name="manager">${defaultManager}</property> 
 
      <property name="sendBufferSize">64</property> 
 
      <property name="receiveBufferSize">128</property> 
 
      <!-- mysql port --> 
 
      <property name="port">3306</property> 
 
      <!-- mysql schema --> 
 
      <property name="schema">test</property> 
 
      <!-- mysql user --> 
 
      <property name="user">root</property> 
 
      <!--    mysql password --> 
 
      <property name="password">123456</property> 
 
    </factoryConfig> 
 
    <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool"> 
 
      <property name="maxActive">500</property> 
 
      <property name="maxIdle">500</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="server1"    parent="abstractServer"> 
 
    <factoryConfig> 
 
      <!-- mysql ip --> 
 
      <property name="ipAddress">192.168.2.11</property> 
 
    </factoryConfig> 
 
  </dbServer> 
  <dbServer name="server2"    parent="abstractServer"> 
 
    <factoryConfig> 
 
      <!-- mysql ip --> 
 
      <property name="ipAddress">192.168.2.13</property> 
 
    </factoryConfig> 
 
  </dbServer> 
 
 <dbServer name="multiPool" virtual="true"> 
 
    <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool"> 
 
      <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA--> 
 
      <property name="loadbalance">1</property> 
 
      <!-- Separated by commas,such as: server1,server2,server1 --> 
 
      <property name="poolNames">server1</property> 
 
    </poolConfig> 
 
  </dbServer> 
 
</amoeba:dbServers> 
 
6:修改log4j.xml 取消日志文件生成,如做pdf时(太大了,磁盘很容易满)
<param name="file" value="${amoeba.home}/logs/project.log"/> 
改成 
<param name="file" value="<![CDATA[${amoeba.home}/logs/project.log>/dev/null]]>"/>
注意:我在2.1-rc5版本下第6条的设置JAVA运行时报警,无法通过。
这个确实不能通过!
 
7:性能优化,打开bin/amoeba
 
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k" 
改成 
DEFAULT_OPTS="-server -Xms2048m -Xmx2048m -Xmn1000m -Xss2048k"
 
8:启动amoeba
nohup /usr/local/amoeba/bin/amoeba start 2>&1 >/dev/null & 

amoeba-mysql配置安装(收集整理)的更多相关文章

  1. mysql 配置安装

    1.     下载: mysql-5.7.20是解压版免安装的,mysql-5.7.20下载地址:http://dev.mysql.com/downloads/mysql/ 直接下载,无需注册和登录. ...

  2. mysql 配置 安装和 root password 更改

    第一步: 修改my.ini文件,替换为以下内容 (skip_grant_tables***重点) # For advice on how to change settings please see # ...

  3. Ubuntu下MySql配置

    Ubuntu下MySql配置 安装MySQL 命令: sudo apt-get install mysql-server MySQL初始配置及管理 启动MySQL mysql start : mysq ...

  4. 阿里云服务器 ECS 部署lamp:centos+apache+mysql+php安装配置方法 (centos7)

    阿里云服务器 ECS 部署lamp:centos+apache+mysql+php安装配置方法 (centos7) 1.效果图 1 2. 部署步骤 1 1. mysql安装附加(centos7) 7 ...

  5. MySql免安装版绿化版安装配置,附MySQL服务无法启动解决方案

    整理于:https://www.cnblogs.com/cenwei/p/6249856.html      我下载的MySQL版本是:mysql-5.6.15-winx64 一.解压文件 下载好My ...

  6. mysql免安装版配置和一些常见问题

    博客原文点我 今天在Windows Server 2003下安装mysql,遇到不少问题.之前在另外两台服务器安装的时候也遇到了几个问题,最后找到不少文章解决了,记录一下. 所有版本都是免安装的32和 ...

  7. CentOS系统 Amoeba+MySql主从读写分离配置 适合新手傻瓜式教程!-----仅供参考!

    废话不说,直接开始: 一.安装mysql的三种方式,这里采用第2种(安装方式不再详解,请参照) http://www.cnblogs.com/babywaa/articles/4837946.html ...

  8. (转) Windows下MySQL免安装版的下载与配置

    本人在尊重原著的前提下.针对在实践中所遇到的问题加以整理和完善,如有不足之处,还请各位大神指点江山O(∩_∩)O~ 主要是因为平时自己学习时候会用到.及免安装版本的方便.对于个人开发者挺实用的! 安装 ...

  9. Ubuntu14.04(nginx+php+mysql+vsftp)配置安装流程

    Ubuntu14.04(nginx+php+mysql+vsftp)配置安装流程 1.先切换到root用户 sudo  su 2.更新软件源 apt update apt-get upgrade 3. ...

随机推荐

  1. 手把手教你写LKM rookit! 之 第一个lkm程序及模块隐藏(一)

    唉,一开始在纠结起个什么名字,感觉名字常常的很装逼,于是起了个这<手把手教你写LKM rookit> 我觉得: 你们觉得:...... 开始之前,我们先来理解一句话:一切的操作都是系统调用 ...

  2. Js 处理将时间转换 “年-月-日”

    将时间  \/Date(1432828800000+0800)\/"  转换成:“年-月-日” //时间转换function ChangeDateFormat(val) {    if (v ...

  3. python学习笔记14(多态、封装、继承)

    创建自已的对象(尤其是类型或者被称为类的对象)是python非常核心的概念. 多态: 可对不同类的对象使用同样的操作. 封装:对外部世界隐藏对象的工作细节. 继承:以普通的类为基础建立专门的类对象. ...

  4. 域名的a记录转过来他的公网ip

    首先 客户要我把域名 和项目进行绑定客户需要提供万网或者新网的账户,登进去域名管理  选项域名管理的A记录定向到那个公网ip上 与服务器做绑定然后 在服务器的iis 上 加个主机头 输入主机头名称 也 ...

  5. 使用Docker解决同一服务器运行不同版本PHP方案。

    前言: 最近公司有两个站点,分别是两种系统进行二次开发,基于LNMP架构的网站.一般想PHP这种非编译型语言想要对外出售源码都会进行加密,加密方法有很多种,大部分都是使用Zend Guard来进行加密 ...

  6. springmvc 数据对象回绑

    springmvc中,由页面 post到 controller,对象可以在form里面设置modelAttribute达到回绑的目的. 但是如果对象里面有复杂的非String,int的对象,则要在co ...

  7. Codeforces Round #260 (Div. 1) C. Civilization 树的中心+并查集

    题目链接: 题目 C. Civilization time limit per test1 second memory limit per test256 megabytes inputstandar ...

  8. CSS样式表引用方式

    最近讲课中,有些学员对调用样式表老是有含糊不清?大体说来有四种方式: 1.外部文件引用方式;(推荐使用) 2.使用@import引用外部CSS文件; 3.内部文档头方式也叫内嵌法调用; 4.直接插入式 ...

  9. java模拟OSUnMapTbl[]

    问题描述: 任务就绪表,记录当前就绪的任务,就绪表中把64个优先级的任务分成8组,优先级的1-3bit表示OSRdyTbl[]中组别OSRedyGrp,优先级的4-6bit表示每组中就绪任务的位置,当 ...

  10. 团体程序设计天梯赛-练习集L1-018. 大笨钟

    L1-018. 大笨钟 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜 ...