一、在使用一个工具之前还是要先了解一下这个东西的一些细节,也就是说连这个东西是什么都不清楚就盲目去用了,那是不严谨的,起码都不知道这东西是否合适用在后面的生产环境,不合适再牛的技术就就是个屁!

   Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发。座落与 Client、DB Server(s)之间,对客户端透明。具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。 通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能,目前Amoeba已在很多 企业的生产线上面使用。这段是来自官网的,官网的东西一般是最正确的,这里附上官网地址:http://docs.hexnova.com/amoeba/

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

amoeba for mysql 使用日志_第1张图片

   Amoeba不能做什么:

   1.暂时不支持事务   #貌似说后面会支持,但是不知道什么时候,现在官网也有一段时间没更新了  

   2.暂时不知道支持存储过程

   3.不适合从amoeba导数据的场景或者对大数据量查询的query并不合适(比如一次请求返回10W以上甚至更多数据的场合)

   4.暂时不支持分库表,amoeba目前只做到分数据库实例,每个被切分的节点需要保持库表结构一致 #例如必须insert into test(id,name)values (1,samfeng),有些自增的id习惯可以不写,但是这里必须写!

   

二、 部署amoeba

    1.由于amoeba是运行在java环境中的,说白就是java开发的,前提你的服务器上面要有jdk,官网说要用jdk1.5的,我这里下载了jdk1.7,并且配好了环境变量。

    2.下载amoeba,我下载的是zip包

    #unzip amoeba.zip

    #mv amoeba /usr/local/amoeba

    3.配置好mysql主从,这个在上一遍博文已经做好了

     master:192.168.1.60

     slave:  192.168.1.54

    4.配置amoeba,配置文件到amoeba目录下面的conf文件里面    

      amoeba for mysql 使用日志_第2张图片

      由于是简单使用,所以这里就只是配置了amoeba.xml跟dbServer.xml,其实还有很多其他配置文件可以使用,如access_list.conf可以控制访问,rule.xml增强了切分的细粒度等等。

      #vi dbServer.xml

        ....................

       

        #默认定义了一个统一的连接模板                        

                     

                       ${defaultManager}

                       64

                       128


                       

                       3306


                       

                       hves #要进行事务使用的数据库


                       

                       proxy1 #数据库库用户名


                       123456 #密码

                     

           .........................

       #新增master数据库

               

                       

                       192.168.1.60#master ip地址

               

       


       #新增slave数据库

               

                       

                       192.168.1.54#slave ip 地址

               

       


       

               

                       #有三个选择轮询、权重、高可用                        1#我想是有多台master的时候才有意义


                       

                       master#我想是有多台master的时候才有意义

               

       

       

               

                       

                       1


                       

                       slave

               

       

          #vi amoeba.xml

        ...................  

       

               

               

                       

                       8066


                       

                       

                       

                               

                                       128

                                       64

                               

                       


                       

                               


                                       proxy1


                                       123456


                                       

                  ..........................

       

               

                       

                               /usr/local/amoeba/conf/rule.xml

                               /usr/local/amoeba/conf/ruleFunctionMap.xml

                       

               

               /usr/local/amoeba/conf/functionMap.xml

               1500

               server1#这必须要存在,如果去掉了就报错

               master#读写分离

               slave#读写分离

               true

       

          #cd ../bin

          #nohup ./launcher &

          这样就可以了

          然后测试一下读写分离是否可以了?

          60mysql>use hves;

          60mysql>select * from tests;

+----+------------+

| id | name       |

+----+------------+

|  1 | fengyunsen |

|  2 | samfeng    |

|  3 | ssss       |

|  4 | kkkk       |

+----+------------+

          54mysql>use hves;

          54mysql>select * from tests;

+----+---------+

| id | name    |

+----+---------+

|  2 | samfeng |

|  3 | ssss    |

|  4 | kkkk    |

         +----+---------+          

          #mysql -u proxy1 -p -h127.0.0.1 -P8066   ----登陆到amoeba

          mysql>use hves;

          mysql>select * from tests;

+----+---------+

| id | name    |

+----+---------+

|  2 | samfeng |

|  3 | ssss    |

|  4 | kkkk    |

  +----+---------+  

           读到了54上面去了,这就证明读写分离起作用了。

           其实amoeba还有很多切分方式的,如:水平切分,垂直切分等等,可以到官网看一下更加详细的介绍。