`
yanwt
  • 浏览: 98807 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(转)Amoeba for MySQL 非常好用的mysql集群软件

 
阅读更多
Amoeba for MySQL


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




Amoeba使用指南

说明文档见:http://docs.hexnova.com/amoeba/




安装小结:




目前可以有三种解决方式实现mysql读写分离

1 程序修改mysql操作类

优点:直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配

缺点:自己维护更新,增减服务器在代码处理




2 amoeba

参考官网:http://amoeba.meidusa.com/

优点:直接实现读写分离和负载均衡,不用修改代码,有很灵活的数据解决方案

缺点:自己分配账户,和后端数据库权限管理独立,权限处理不够灵活




3 mysql-proxy

参考 mysql-proxy。

优点:直接实现读写分离和负载均衡,不用修改代码,master和slave用一样的帐号

缺点:字符集问题,lua语言编程,还只是alpha版本,时间消耗有点高




如果你不能安装软件来解决读写分离,那可以尝试阿权的项目解决思路。

如果你可以安装软件,那amoeba是不错的,mysql-proxy不太建议,目前只有alpha版本,效率还不太理想,amoeba目前在阿里巴巴是内部项目,正在生产环境使用的。




amoeba的安装使用

1 安装java环境,需要Java SE 1.5 或以上

2 配置xml文件

下载地址: http://www.sf.net/projects/amoeba

解压就可以使用的,顺便说一下,打包的习惯似乎不是太好,最好解压后是自己的文件夹,如用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的,运行会有错误提示:




[root@aslibra amoeba-mysql]# bin/amoeba

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/meidusa/amoeba/mysql/server/MysqlProxyServer (Unsupported major.minor version 49.0)

        at java.lang.ClassLoader.defineClass0(Native Method)

        at java.lang.ClassLoader.defineClass(ClassLoader.java:539)

        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)

.....




下载jdk1.5以上的版本,压缩版解压后设置好环境变量即可




可以编辑 /etc/profile以便启动时变量生效,末尾加上




##############  java  ###########




JAVA_HOME=/usr/java/jdk

PATH=$PATH:JAVA_HOME/bin

export JAVA_HOME PATH




用bin/amoeba start即可启动amoeba

如bin/amoeba start > /dev/null &




配置amoeba:




conf/amoeba.xml 配置mysql数据库,简单说明一下:




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来设置负载均衡。




(本文出自php_sir的新浪博客,用户名php_sir,首页链接:http://blog.sina.com.cn/phpsir,未经本人(php_sir)同意禁止转载)




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 读写分离 Keepalived+mysql

    这里我们主要探讨的是如何使用Amoeba与MySQL实现读写分离,以及如何利用Keepalived来构建MySQL的高可用集群。这两部分内容对于保障数据库服务的稳定性和效率至关重要。 **Amoeba+MySQL 读写分离** Amoeba 是一个...

    amoeba-mysql-3.0.5-RC-distribution.zip

    5. **脚本**:启动、停止、监控Amoeba和MySQL服务的脚本,例如 start.sh、stop.sh、status.sh 等,方便用户管理和维护数据库集群。 6. **示例数据**:可能包含一些示例数据库或数据文件,用于演示Amoeba的功能,...

    amoeba-mysql-binary

    "amoeba-mysql-binary" 是一个与MySQL数据库相关的开源项目,其主要功能是提供一种分布式解决方案,用于扩展MySQL服务器的能力,提升数据库的可扩展性和可用性。Amoeba这个名字来源于生物学中的变形虫,寓意该系统...

    用amoeba配置mysql代理.pdf

    【标题】: 使用Amoeba配置...总结,Amoeba作为MySQL代理,能够帮助实现数据库的高可用性、负载均衡和故障切换,是提升MySQL集群稳定性和性能的重要工具。正确配置和使用Amoeba,能为业务提供更健壮的数据存储解决方案。

    amoeba集群文档+Amoeba使用指南pdf+mysql主从同步

    与Amoeba不同,MySQL集群更强调数据的强一致性和高可用性,但可能会牺牲部分性能。在MySQL集群中,数据分布在多个节点上,每个节点都有其职责,如数据节点(处理数据存储和查询)、管理节点(协调集群操作)和SQL...

    MySQL搭建Amoeba_读写分离.docx

    wget http://nchc.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.1.0-RC5.tar.gz ``` 下载完成后,我们需要创建一个文件夹,在 `/usr/local/amoeba` 目录下,执行以下命令: `...

    amoeba-mysql-1.2.0-RC3.zip

    标签“mysql读写分离”和“MySQL集群”进一步强调了Amoeba的核心特性。MySQL集群是一种分布式数据库解决方案,通过复制和分发数据到多个节点来提高可用性和可扩展性。Amoeba作为集群的一部分,可以协助实现这一目标...

    amoeba-aladdin-0.5.zip_Amoeba for Aladdin_MYSQL_aladdin_amoeba

    标题中的"amoeba-aladdin-0.5.zip_Amoeba for Aladdin_MYSQL_aladdin_amoeba"揭示了这是一个关于Amoeba与Aladdin在MySQL集群环境中的整合应用。Amoeba是一个分布式数据库中间件,它能将一个单一的MySQL数据库实例...

    Mysql+drbd+heartbeat+amoeba集群配置详解

    根据提供的信息,我们可以详细探讨如何构建...综上所述,通过以上技术的结合使用,可以构建出一个高性能、高可靠性的MySQL集群系统。这样的集群不仅能够提供稳定的服务,还能够在出现故障时快速恢复,保障业务连续性。

    amoeba-mysql-3.0.5-RC.tar.gz

    9. **扩展与升级**:随着业务的发展,可能需要增加更多的MySQL节点以扩展Amoeba集群。同时,新版本的发布(如3.0.5之后的版本)可能会带来新的功能和性能改进,适时升级可以保持系统的先进性。 总之,Amoeba MySQL ...

    第三十九章:DRBD+Keepalived+Mysql+Amoeba双主双从高可用集群1

    【第三十九章:DRBD+Keepalived+Mysql+Amoeba双主双从高可用集群1】 本文将深入探讨一种基于DRBD、Keepalived、Mysql和Amoeba技术构建的双主双从高可用集群方案,旨在提供高可靠性和数据安全性。这个集群配置确保了...

    amoeba-mysql-3.0.4-BETA.tar.gz 实现集群管理 读写分离

    Amoeba主要解决以下问题: a). 数据切分后复杂数据源整合 b). 提供数据切分规则并降低数据切分规则给数据库带来的影响 c). 降低数据库与客户端连接 d). 读写分离路由 通过Amoeba实现读写分离

    Centos 操作系统/ Windows 操作系统 安装 MySQL 、Amoeba 数据库集群 读写分离

    一、 下载Mysql软件 .......................................... 3 二、 安装Mysql软件 .......................................... 4 三、 Mysql设置 .......................................... 6 Amoeba安装...

    amoeba-n.zip

    在这个场景中,amoeba-n.zip 文件包含的是Amoeba中间件和Java Development Kit (JDK)的安装包,它们是实现MySQL集群读写分离的关键组件。 **Amoeba中间件:** Amoeba 是一个开源的MySQL分片系统,它允许数据库水平...

    非常详细的某培训机构mysql学习笔记

    非常详细的某培训机构mysql学习笔记,内容系统全面,实用性强 MySQL1 MySQL基础 MySQ单实例部署 MySQL多实例部署 MySQL数据库操作 MySQL数据类型 ... MySQL集群技术 Galera MySQL LNMP环境搭建

    Amoeba配置文件

    - **配置Amoeba节点**:定义Amoeba集群中的每个节点,包括主节点和从节点。 - **配置客户端连接**:客户端需要指向Amoeba而不是直接连接到MySQL,Amoeba会根据配置自动路由请求到适当的节点。 - **负载均衡策略**:...

    Amoeba使用指南 20110928 pdf

    - **Amoeba for MySQL**: 针对MySQL数据库的定制版本,提供了与MySQL原生API兼容的接口。 - **Amoeba for Aladdin**: 适用于特定业务场景下的数据库代理服务。 - **Amoeba for MongoDB**: 专门针对MongoDB数据库的...

    MySQL分布式集群之MyCAT权威指南

    MyCAT的前身,是阿里巴巴于2012年6月19日,正式对外开源的数据库中间件Cobar,Cobar的前身是早已经开源的Amoeba,不过其作者陈思儒离职去盛大之后,阿里巴巴内部考虑到Amoeba的稳定性、性能和功能支持,以及其他因素...

    Mysql主从复制+读写分离1

    3. 在 master 节点进行授权允许 amoeba 程序能够连接 Mysql 集群,slave 节点会同步权限 * 在 master 节点上授权 amoeba 用户 * flush privileges 使授权生效 4. 配置 am 节点的代理服务并启动服务 * 配置 ...

    mysql读写分离实现

    应用程序通过Amoeba向数据库集群发送请求,Amoeba根据预设的路由策略将读请求转发至Slave节点,将写请求转发至Master节点,从而实现了读写分离的目的,提高了系统的并发处理能力和稳定性。 这种架构不仅适用于简单...

Global site tag (gtag.js) - Google Analytics