Amoeba
Amoeba特点
1.负载均衡
2.高可用性
3.SQL过滤
4.读写分离
5.可并发请求多台数据库
实验环境
amoeba:200.200.2.10
mysql-master:200.200.2.11
mysql-slave1:200.200.2.12
mysql-slave2:200.200.2.13
client:200.200.2.14
安装mysql5.6版本进行主从复制,一主两从,详情请见MHA高可用部分
在Amoeba上安装java环境
yum -y install java-1.6.0-openjdk
编辑java环境
cat /etc/profile.d/java.sh export JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin export AMOEBA_HOME=/usr/local/amoeba/ export PATH=$PATH:$AMOEBA_HOME/bin
source /etc/profile
启动amoeba服务
amoeba start
在三台服务器上进行授权
grant all on *.* to 'admin'@'200.200.2.%' identified by '123'; flush privileges; 刷新
编辑amoeba.xml配置文件,设置读写分离
cd /usr/local/amoeba/conf/ cp amoeba.xml amoeba.xml.origin 备份防止误操作 vim amoeba.xml 11 <property name="port">8066</property>//默认端口8066,无需修改 30 <property name="user">amoeba</property>//设置一个用户,后面客户端访问时使用 32 <property name="password">123456</property> //设置登录密码115<property name="defaultPool">master</property>//默认的服务器池 117 <property name="writePool">master</property>//写服务器池118 <property name="readPool">slaves</property> //读服务器池 cp dbServers.xml dbServers.xml.origin vim dbServers.xml 20<property name="port">3306</property> //设置MySQL连接端口,默认3306 26 <property name="user">admin</property> 27<property name="password"> 123</property>//设置访问MySQL服务器所用的密码 43 <dbServer name="master" parent="abstractServer">//设置MySQL服务器及IP地址 46 <property name="ipAddress">192.168.2.11</property> 50 <dbServer name="slave1" parent="abstractServer"> 53<property name="ipAddress">192.168.2.12</property> 56 <dbServer name="slave2" parent="abstractServer"> 59 <property name="ipAddress">192.168.2.13</property> 63<dbServer name="slaves" virtual="true"> //在amoeba.xml文件中设置的readPool 69<property name="poolNames">slave1,slave2</property>//前面定义的服务器节点名
启动amoeba
/usr/local/amoeba/bin/amoeba start & jobs netstat -anpt |grep java 8066与3306端口需要是开启状态
测试
此时三台数据库服务器是主从备份的 在主库创建db_test库及该库下的test表 create database db_test; use db_test; create table test(id int(10),name varchar(20)); 可以在slave1和slave2上查看到该库 show databases; 在slave1、slave2服务器上停止主从复制 stop slave; 在mater上添加表内容 insert into test values(1,'master'); 在slave1上添加数据 use db_test; insert into test values(2,'slav1'); 在slave2上 use db_test; insert into test vlaues(3,'slave2'); 在客户机上进行读测试 yum -y install mysql 安装mysql客户端 mysql -uamoeba -p123456 -h192.168.2.10 -P8066 读测试 select * from db_test.test; select * from db_test.test; 此时读取数据库数据时,轮询的方式从slave1、slave2上读取 写测试 insert into db_test.test values(4,'client'); 在master服务器上查看是否写入 select * from db_test.test; 此时写入数据到数据库时,会写入到主服务器,不会写到从服务器上,实现了读写分