在做体系结构作业时,需要实现一个大数据量,对响应速度要求比较高的网站,类似于淘宝。需要使用分布式数据库,负载均衡和读写分离技术。我经过搜索,发现开源的amoeba非常轻便好用。而且是淘宝的某个大牛研发的,支持国产哈哈!主要是中文文档看上去很方便,而且文档写得也挺清晰详细的,易上手。
1.准备环境
电脑必须已安装并配置好jdk。目前Amoeba经验证在JavaTM SE 1.5和Java SE 1.6能正常运行,(可能包括其他未经验证的版本),文档上是这么说,不过我用的是最新的jdk1.8也是完全可行的。所以1.5版本之后应该都是可以的。本文所使用操作系统为Windows7 64位,amoeba版本为2.2.0,anoeba所在服务器ip为192.168.1.102,后端数据库为mysql-5.6.24,两台MySQL数据库所在服务器ip分别为127.0.0.1和192.168.1.104。
2.下载安装
到此网址下载amoeba:http://sourceforge.net/projects/amoeba/files/,下载后是压缩包形式,在电脑目录中创建一个文件夹命名为amoeba,将压缩包解压到此文件夹中,解压后的文件如下图所示:
3.启动amoeba
打开cmd,进入amoeba的bin目录,运行输入命令amoeba
(说来也奇怪,我一开始下的amoeba 3.0以上的版本,在这里输入命令时会显示不存在该命令,直到我换用了amoeba 2.0的版本之后才好了,真是奇怪。好想找到amoeba的作者问一下哦,不过估计本菜鸟遇不上此等大牛了)
如果看到:amoeba start|stop 就代表安装成功了
#/* Amoeba总共有7个配置文件,分别如下:
#/* 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输出日志的级别和方式。
# 配置后端mysql 服务器连接[dbServer.xml]
配置amoeba中的dbServer.xml(后端mysql 服务器连接配置)
打开conf文件夹下的dbServer.xml,需要更改的有以下几个地方:
1.设置abstractserver,里面定义了要代理的mysql服务器的用户名和密码(密码遮住不给你们看啦!)
2.添加两个dbServer,继承自abstractserver,一个代表主数据库,一个代表从数据库。
3.配置数据库池。
dbServer.xml配置完毕。
4. 配置 Amoeba 监听端口[amoeba.xml]
配置监听IP,登录账户和密码(密码不给看)
读写分离配置:
amoeba.xml配置完毕。
5. 配置 Amoeba 插入规则[rule.xml]
rule.xml配置完毕。
三、amoeba启动与读写分离测试
1.启动amoeba:
首先,确认对被代理的Mysql数据库拥有有远程登录权限,没有的话通过以下命令赋予权限:(密码设置的123)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.102' IDENTIFIED BY '123' WITH GRANT OPTION;
在命令行中进入当前目录,输入amoeba start启动amoeba。
2.新开一个命令行,输入以下命令登录>mysql -uroot -h 192.168.1.102 -P8066 -p,密码是123,如果可以正常登录,则amoeba配置成功。
3.分别在两台后端数据库服务器的test数据库中新建一个test表,插入不同数据,这里分别插入的是100,101和102,在登录amoeba的命令提示符中输入
insert into test.test (id) values (100);
insert into test.test (id) values (101);
insert into test.test (id) values (102);
插入3次,发现第一次插入了master服务器的数据库表,第二次插入了slave服务器的数据库表,第三次又插入了master的数据库表。id为偶数插入master,id为奇数插入slave,与我们之前在rule.xml中配置的一致。
插入之后,再输入语句:
select * from test.test;
会出现100,101,102,所有服务器中数据库里数据。
所以之前插入的三条数据虽然被分片到了不同的数据库节点,但Amoeba的合并工作使得它们看起来像在一个库里,也因此可见Amoeba对客户端的透明。.