Mysql 5.6.28基于 amoeba3.0.5-RC的 读写分离

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

amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。用户需要结合使用MySQL的 Replication等机制来实现副本同步等功能。amoeba对底层数据库连接管理和路由实现也采用了可插拨的机制,第三方可以开发更高级的策略类来替代作者的实现。这个程序总体上比较符合KISS的思想。

amoeba主要解决以下问题:

 a). 数据切分后复杂数据源整合
        b). 提供数据切分规则并降低数据切分规则给数据库带来的影响
        c). 降低数据库与客户端连接
        d). 读写分离路由

        在MySQL proxy 6.0版本 上面如果想要读写分离并且 读集群、写集群 机器比较多情况下,用mysql proxy 需要相当大的工作量,目前mysql proxy没有现成的 lua脚本。mysql proxy根本没有配置文件, lua脚本就是它的全部,当然lua是相当方便的。那么同样这种东西需要编写大量的脚本才能完成一 个复杂的配置。而Amoeba for Mysql只需要进行相关的配置就可以满足需求。


说的牛逼,难道就没有什么不能用的吗?还真被你说对了,以下就是amoeba还不能做的:

1、目前还不支持事务

2、暂时不支持存储过程(近期会支持)

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

4、暂时不支持分库分表,amoeba目前只做到分数据库实例,每个被切分的节点需要保持库表结构一致

 

假设有这样的使用场景,有三个数据库节点分别命名为Master、Slave1、Slave2如下:

 

Amoeba: abstractServer <192.168.1.169>

Master: Master <192.168.1.67> (可读写)

Slaves:Slave1 <192.168.1.68>、Slave2<192.168.1.69> (2个平等的数据库。只读/负载均衡)

 

在 主从数据库 的复制的部分, 仍然需要使用数据库自己的复制机制。 Amoeba 不提供复制功能。


mysql 5.6.28 安装请参考https://www.xubaojin.com/post/100.html


一、安装和运行Amoeba

Amoeba框架是基于Java SE1.5开发的,官方建议使用Java SE 1.5版本。

[root@centos67-169 ~]# java -version
java version "1.7.0_131"
OpenJDK Runtime Environment (rhel-2.6.9.0.el6_8-x86_64 u131-b00)
OpenJDK 64-Bit Server VM (build 24.131-b00, mixed mode)

目前Amoeba经验证在JavaTM SE 1.5和Java SE 1.6能正常运行,(可能包括其他未经验证的版本)。

如果你的机器上没有安装JavaTM环境,可以访问http://www.oracle.com/technetwork/java/javase/downloads/index.html进行下载。可以根据你的操作系统等详情安装JavaTM环境。

我们先忽略官方的建议,继续。。。安装jdk环境,amoeda是基于java的

1、下载,下载一个符合系统的java se

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

这里我们使用java 1.8.0_121下载jdk-8u121-linux-x64.rpm

[root@centos67-169 ~]# rpm -ivh jdk-8u121-linux-x64.rpm
Preparing...                ########################################### [100%]
   1:jdk1.8.0_121           ########################################### [100%]
Unpacking JAR files...
 tools.jar...
 plugin.jar...
 javaws.jar...
 deploy.jar...
 rt.jar...
 jsse.jar...
 charsets.jar...
 localedata.jar...
[root@centos67-169 ~]# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

2、配置环境变量

创建软链接
ln -s /usr/java/jdk1.8.0_121/ /usr/java/jdk

在/etc/profile最后添加以下内容

JAVA_HOME=/usr/java/jdk
export JAVA_HOME
export CLASSPATH=.:JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export PATH
 

3、重新加载环境变量
[root@centos67-169 ~]# source /etc/profile

Java环境安装配置完成。


4、下载Amoeba:

下载地址: http://sourceforge.net/projects/amoeba/files/
或[root@centos67-169 ~]# wget https://nchc.dl.sourceforge.net/project/amoeba/Amoeba for mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip
解压文件:
[root@centos67-169 ~]# unzip amoeba-mysql-3.0.5-RC-distribution.zip
在/usr/local下面创建一个amoeba文件夹,将下载的压缩包解压,并将所有内容拷贝到该目录下。
[root@centos67-169 ~]# mkdir /usr/local/amoeba       #创建一个安装目录
[root@centos67-169 ~]# cp -r amoeba-mysql-3.0.5-RC/* /usr/local/amoeba/
[root@centos67-169 ~]# cd /usr/local/amoeba/
[root@centos67-169 amoeba]# ls
benchmark  bin  conf  jvm.properties  lib
[root@centos67-169 amoeba]# cd bin/
[root@centos67-169 bin]# ls
benchmark  benchmark.bat  benchmark.classpath  launcher  launcher.bat  launcher.classpath  mkdirhier  shutdown
[root@centos67-169 bin]# chmod a+x *    #给bin下面的所有文件执行权限
[root@centos67-169 bin]# ls
benchmark  benchmark.bat  benchmark.classpath  launcher  launcher.bat  launcher.classpath  mkdirhier  shutdown

5、测试是否安装成功
[root@centos67-169 bin]# ./launcher
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=16m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=96m; support was removed in 8.0

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.
注意,这里报错了,Stack size设置的太小,最小为228k。解决方法如下:
[root@centos67-169 bin]# cd ..
[root@centos67-169 amoeba]# vim jvm.properties

修改前:JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss196k -XX:PermSize=16m -XX:MaxPermSize=96m"

修改后:JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss512k -XX:PermSize=16m -XX:MaxPermSize=512m"


再次测试
[root@centos67-169 bin]# ./launcher

关闭用./shutdown  注意不要输入成关机命令了。

[root@centos67-169 bin]# ]# pwd
/usr/local/amoeba/bin
[root@centos67-169 bin]# ./shutdown
kill -15 2018

Amoeba到此就安装完毕,接下来就是配置读写分离,因为Amoeba3.x较2.x有较大改动。

二、下面开始配置

1、设置conf/dbServer.xml中连接的库名及帐号密码
<dbServer name="abstractServer" abstractive="true">
- - - - - 省略 - - - - - -             
            <!-- mysql port -->
            <property name="port">3306</property>
                                                                                                                                                                                                                                                                                                                           
            <!-- mysql schema -->
            <property name="schema">数据库名</property>
                                                                                                                                                                                                                                                                                                                           
            <!-- mysql user -->
            <property name="user">账号</property>
                                                                                                                                                                                                                                                                                                                           
            <property name="password">密码</property>
- - - - - - - - - 省略 - - - - - - -
</dbServer>

2、设置数据库池,其中Slave1,Slave2作轮询

<dbServer name="Master"  parent="abstractServer">
        <factoryConfig>
            <!-- mysql ip -->
            <property name="ipAddress">192.168.0.67</property>
        </factoryConfig>
    </dbServer>
                                                                                                                                                                                                                                                                                                             
    <dbServer name="Slave1"  parent="abstractServer">
        <factoryConfig>
            <!-- mysql ip -->
            <property name="ipAddress">192.168.0.68</property>
        </factoryConfig>
    </dbServer>
    <dbServer name="Slave2"  parent="abstractServer">
        <factoryConfig>
            <!-- mysql ip -->
            <property name="ipAddress">192.168.0.69</property>
        </factoryConfig>
    </dbServer>
    <dbServer name="VirtualPool" 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">Slave1,Slave2</property>
        </poolConfig>
    </dbServer>
 
3、接下来配置amoeba.xml

<property name="authenticateProvider">
- - - - - - 省略 - - -                 
                    <property name="user">账号</property>
                                                                                                                                                                                                                                                                                                                
                    <property name="password">密码</property>
                                                                                                                                                                                                                                                                                                                
                    <property name="filter">
       - - - - - - 省略 - - -
</property>

<queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
    - - - - - - 省略 - - - - - 
        <property name="defaultPool">Master</property>
        <property name="writePool">Master</property>
        <property name="readPool">VirtualPool</property>
    - - - - - - 省略 - - - - -
</queryRouter>

4、读写分离到此配置完成,接着启动amoebe

/usr/local/amoeba/bin/launcher

三、在部署Amoeba时,注意下
1:防火墙要开放8066端口
2:给bin目录执行权限:chmod +x bin/*

四、优化性能:
1:在amoeba目录下有个JVM的配置文件,设置其中的JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=512m"可提升JVM性能,具体大小看各位需求;
2:多线程配置:runtime元素;
3:网络相关(缓冲区等):connectionFactory


参考文档:

1、http://docs.hexnova.com/amoeba/index.html

2、http://www.iteye.com/topic/1113437

3、http://www.linuxidc.com/Linux/2015-02/113542.htm

4、http://blog.csdn.net/ljuncong/article/details/38925569

5、http://blog.csdn.net/crj_9527/article/details/50328043

6、http://zhiliang92.blog.51cto.com/3392968/1294384/

7、http://wiki.hexnova.com/display/amoeba/Home

8、http://www.cnblogs.com/liangsky/p/4608232.html

9、http://www.cnblogs.com/liuyisai/p/6009379.html

本文 暂无 评论

回复给

Top