一 Amoeba简介
Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba forMysql软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发。座落与 Client、DB Server(s)之间,对客户端透明。具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能,目前Amoeba已在很多企业的生产线上面使用。
主要解决:
• 降低 数据切分带来的复杂多数据库结构
• 提供切分规则并降低 数据切分规则 给应用带来的影响
• 降低db 与客户端的连接数
• 读写分离
二 前期规划
1.1 主机规划
1.2 虚拟IP规划
1.3 用户列表
提示:以上角色需要在所有节点添加。
1.4 整体架构
三 MySQL-MMM基础部署
略,具体可参考《002.MMM双主-双从读写分离部署》。
四 基础JDK安装
4.1 JDK下载
下载链接:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
JDK版本:jdk-8u144-linux-x64.rpm
4.2 JDK安装及配置
1 [root@Amoeba tmp]# rpm -ivh jdk-8u144-linux-i586.rpm 2 [root@Amoeba ~]# vi /etc/profile 3 #set java environment 4 JAVA_HOME=/usr/java/jdk1.8.0_144/ 5 JRE_HOME=/usr/java/jdk1.8.0_144/jre/ 6 CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib 7 PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin 8 export JAVA_HOME JRE_HOME CLASS_PATH PATH 9 [root@Amoeba ~]# source /etc/profile 10 [root@Amoeba ~]# java -version #验证是否安装成功
五 Amoeba安装
5.1 Amoeba下载
1 [root@Amoeba tmp]# wget https://nchc.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip 2 [root@Amoeba tmp]# unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/ 3 [root@Amoeba ~]# mv /usr/local/amoeba-mysql-3.0.5-RC/ /usr/local/amoeba
5.2 Amoeba-dbServers配置
-
dbServers.xml:读写分离配置文件
- access_list.conf:IP访问列表控制配置文件
- Amoeba的配置文件路径:/usr/local/amoeba/conf
1 [root@Amoeba ~]# vi /usr/local/amoeba/conf/dbServers.xml 2 …… 33306 #设置Amoeba要连接的mysql数据库的端口,默认是3306。 4testdb 5 #设置缺省的数据库,当连接amoeba时,操作表必须显式的指定数据库名,即采用dbname.tablename的方式,不支持use dbname指定缺省库,因为操作会调度到各个后端dbserver。 6test1 7x12345678
注意:设置amoeba连接后端数据库服务器的账号和密码,因此需要在所有后端数据库上创建该用户,并授权amoeba服务器可连接。
1 …… 2500 #最大连接数,默认500 3500 #最大空闲连接数 41 #最新空闲连接数 5 …… 67 #设置一个后端可写的dbServer,这里定义为writedb,这个名字可以任意命名,后面还会用到。 8 13 149 12172.24.8.100 10 #设置后端可写dbserver ip。 1115 19 2016 18172.24.8.101 1721 25 2622 24172.24.8.102 2327 31 3228 30172.24.8.103 2933 #以上设置四台后端可读节点信息。 3734 36172.24.8.104 35virtual="true"> 38 #设置定义一个虚拟的dbserver,实际上相当于一个dbserver组,这里将可读的数据库ip统一放到一个组中,将这个组的名字命名为myslave。 39 class="com.meidusa.amoeba.server.MultipleServerPool"> 40 41 461 #选择调度算法,1表示负载均衡,2表示权重,3表示HA, 这里选择1。 42 43 44slave01,slave02,slave03,slave04 #myslave组成员。 45
5.3 Amoeba-amoeba配置
1 [root@Amoeba ~]# vi /usr/local/amoeba/conf/amoeba.xml 2 …… 38066 #设置amoeba监听的端口,默认是8066 4 …… 5127.0.0.1 #配置监听的接口,如果不设置,默认监听所以的IP 6 …… 7root 8x120952576
注意:
- 以上配置客户端连接amoeba时需要使用这里设定的账号;
- 此处账号密码和amoeba连接后端数据库服务器的密码无关;
- 前端应用程序连接数据库的地址就是Amoeba服务器的值,连接用户名和密码即为此处配置的用户名和密码。
1 …… 2writedb #设置amoeba默认的池,这里设置为writedb 3writedb 4myslave 5true #取消注释,则指定前面定义好的俩个读写池。
六 数据库配置
6.1 创建数据库
1 [root@Client ~]# mysql -ummm_test -px120952576 -h172.24.8.100 #从客户端使用可写vip连接数据库 2 mysql> create database testdb; #曾经testdb数据库 3 [root@Master02 ~]# mysql -uroot -px120952576 #使用Master02进入 4 mysql> show databases; #验证是否复制成功
提示:其他节点测试略。
6.2 授权Amoeba用户
1 [root@Master01 ~]# mysql -uroot -px120952576 2 mysql> grant all on testdb.* to 'test1'@'172.24.8.14' identified by 'x12345678';
注意:其他所有节点均需要授权此用户。
七 启动Amoeba
1 [root@Amoeba ~]# /usr/local/amoeba/bin/launcher
可能会出现以下报错,原因是stack size太小,导致JVM启动失败
可执行如下修复操作:
1 [root@Amoeba ~]# vim /usr/local/amoeba/jvm.properties 2 JVM_OPTIONS="-server -Xms2048m -Xmx2048m -Xss512k -XX:PermSize=16m -XX:MaxPermSize=96m"
提示:原为:JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss196k -XX:PermSize=16m -XX:MaxPermSize=96m"
1 [root@Amoeba ~]# /usr/local/amoeba/bin/launcher & #建议直接放入后台启动 2 [root@Amoeba ~]# echo "/usr/local/amoeba/bin/launcher &" >> /etc/rc.local
[root@Amoeba ~]# netstat -unlpt | grep java #查看进程
八 测试
8.1 打开日志记录
1 [root@Master01 ~]# touch /var/log/mysql_query_log 2 [root@Master01 ~]# chown mysql:mysql /var/log/mysql_query_log 3 [root@Master01 ~]# vi /etc/my.cnf 4 general_log=ON 5 general_log_file=/var/log/mysql_query_log.log
注意:
打开MySQL日志记录,必须存在log文件,且同时对MySQL具有权限;
所有节点均需要打开日志记录,方便记录测试情况。
8.2 新增对应数据
1 [root@Master01 ~]# mysql -uroot -px120952576 2 mysql> use testdb; 3 mysql> create table mmm_test(id int,email varchar(60)); 4 mysql> insert into mmm_test (id,email) values (100,'ip is 172.24.8.10');
提示:
创建用于测试的表mmm_test,并插入含该节点IP的条目,方便之后测试;
所有节点均需要执行以上操作,但ip更换为对应的ip节点即可。
8.3 读写分离测试
1 [root@Client ~]# mysql -uroot -h172.24.8.14 -px120952576 -P8066 2 mysql> select * from testdb.mmm_test;
提示:
- 此处在Client端使用的是Amoeba的IP连接,端口为Amoeba服务的8066端口;
- 多次执行查询,可知select请求均衡的分配在MMM集群中的4个节点,由于Master01和Master02同步复制,因为有两条相同结果。
1 [root@Master01 ~]# tail -f /var/log/mysql_query_log | grep mmm_test 2 #所有节点执行此命令,观察log信息。 3 [root@Client ~]# mysql -uroot -h172.24.8.14 -px120952576 -P8066 4 mysql> create table mmm_test1(id int,email varchar(60)); 5 mysql> insert into mmm_test1 (id,email) values (104,'ip is 172.24.8.14');
提示:所有写操作均在Master01上执行,其他节点的均由复制而来,由此可知已实现读写分离。
九 其他附加
Amoeba主配置文件:$AMOEBA_HOME/conf/amoeba.xml,用来配置Amoeba服务的基本参数,如Amoeba主机地址、端口、认证方式、用于连接的用户名、密码、线程数、超时时间、其他配置文件的位置等。
数据库服务器配置文件:$AMOEBA_HOME/conf/dbServers.xml,用来存储和配置Amoeba所代理的数据库服务器的信息,如:主机IP、端口、用户名、密码等。
切分规则配置文件:$AMOEBA_HOME/conf/rule.xml,用来配置切分规则。
数据库函数配置文件:$AMOEBA_HOME/conf/functionMap.xml,用来配置数据库函数的处理方法,Amoeba将使用该配置文件中的方法解析数据库函数。
切分规则函数配置文件:$AMOEBA_HOME/conf/ruleFunctionMap.xml,用来配置切分规则中使用的用户自定义函数的处理方法。
访问规则配置文件:$AMOEBA_HOME/conf/access_list.conf,用来授权或禁止某些服务器IP访问Amoeba。
日志规格配置文件:$AMOEBA_HOME/conf/log4j.xml,用来配置Amoeba输出日志的级别和方式。
参考资料:
http://www.cnblogs.com/liuyisai/p/6009379.html