amoeba实现mysql主从读写分离

in mysql with 0 comment

昨天搞了一天的mysql-proxy搭建读写分离,各种安装报错,自认为比较复杂(暂时放弃)。今天听说amoeba这个软件工具,实现方法比较简单,于是实验搭建了一下。过程如下:

实验机器:centos X64 amoeba: 192.168.213.65
master: 192.168.213.81
slave:192.168.213.53
1.3台服务器都安装mysql, 另外mysql主从安装方法,这边就略过了

2.以下都是在amoeba这台服务器上进行的安装操作:
2.1. 首先安装jdk (Amoeba框架是基于Java SE1.5开发的,建议使用Java SE1.5以上的版本。)
#tar zxf jdk-8u45-linux-x64.tar.gz
#mv jdk1.8.0_45/ /usr/local/
方法一:
#vim /etc/profile.d/java.sh //新建java.sh并编辑,生成java环境变成

JAVA_HOME=/usr/local/jdk1.8.0_45
JAVA_BIN=/usr/local/jdk1.8.0_45/bin
JRE_HOME=/usr/local/jdk1.8.0_45/jre
PATH=$PATH:/usr/local/jdk1.8.0_45/bin:/usr/local/jdk1.8.0_45/jre/bin
CLASSPATH=/usr/local/jdk1.8.0_45/jre/lib:/usr/local/jdk1.8.0_45/lib:/usr/local/jdk1.8.0_45/jre/lib/charsets.jar

#source /etc/profile.d/java.sh //让配置文件立刻生效

或方法二
#vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_45
export JRE_HOME=/usr/local/jdk1.8.0_45/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

#source /etc/profile

2.2安装amoeba
本例使用版本:amoeba-mysql-3.0.5-RC-distribution.zip
#unzip amoeba-mysql-3.0.5-RC-distribution.zip
#chmod -R +x /usr/local/amoeba/bin/
#cd /usr/local/amoeba/conf/

修改配置文件:
⑴dbServer.xml 的配置:

${defaultManager}
64
128

3306

test

root
123456

500
500
1
600000
600000
true
true
true

192.168.213.81

192.168.213.53

1

server1,server2

⑵amoeba.xml 配置:
客户端连接Amoeba时所绑定的IP地址、端口、用户名和密码。及IP访问限制。

8066

128

64

root

123456

${amoeba.home}/conf/access_list.conf

以下内容是定义读写分离:

${amoeba.home}/conf/rule.xml

${amoeba.home}/conf/ruleFunctionMap.xml

${amoeba.home}/conf/functionMap.xml

1500

multiPool

server1

server2

true

⑶ jvm.properties配置文件(amoeba安装目录下)
#cd /usr/local/amoeba
#vim jvm.properties //修改Xss的值大于228,否则后面启动服务的时候会报错
找到:
JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss128k -XX:PermSize=16m -XX:MaxPermSize=96m"
改为:
JVM_OPTIONS="-server -Xms512m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m"

3.测试读写分离
# cd /usr/local/amoeba/bin/
# ./launcher& //(也可通过nohup后台启动,或者自己写一个脚本来启动。 )
启动的Amoeba默认端口为8066

为了方便判断主从的读写过程,在master和slave上面mysql配置文件中添加一条日志:
#vim /etc/my.cnf
log = /data/mysql/mysql.log //注意行语句仅用于测试使用,测试完注释掉,不然会生成很大的日志文件
保存后重启mysql服务。
#tail -f /data/mysql/mysql.log (主从上,查看此动态日志,监控mysql读写执行情况)

在客户端连接Amoeba测试:(此处我用的amoeba这台服务器)
#service mysqld start
# mysql -uroot –p123456 -h192.168.213.65 --port 8066
mysql> show databases;
mysql> use test; //选择默认测试库 test
mysql>create table zhang (id int(10) ,name varchar(10),address varchar(20));
mysql>select * from zhang;
mysql>insert into zhang values('1','sdasd','w');
mysql>select * from zhang;
mysql>insert into zhang values('2,'dwqe','w');
mysql>select * from zhang;

输入完以上的测试语句,在主上会发现只有insert的记录,而从上面会有select的记录,insert记录是通过主从复制而得到。
至此实验完成!

Responses