Mysql主从互备之后,为了将两台(或多台)机器充分利用,读写分离的必要性凸显出来。优缺点这里不是讨论的重点!
Mysql读写分离有三种方法:
1. Mysql-proxy
2. Amoeba(变形虫)
3. 另一种用的很少
这里所用的是amoeba,第一种用到lua语言,而且听说性能上有些许不好!
所需机器:
写:192.168.1.111
读:192.168.1.112 (此两台机器已经设置了主从,否则读写分离就失去了意义)
Amoeba:192.168.1.112(本人这里,amoeba安装的机器和mysql(读)在一台机器)
一、 准备工作
1. 安装java支持
1) 下载java SE 1.6
地址:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html
官网,没有找到1.6 所以勉强下了1.7版本。
2) 安装
# mkdir /usr/local/jdk
# tar zxvf jdk-7u71-linux-x64.gz ?C /usr/local/jdk
2. 安装amoeba
1) 下载
地址:http://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.1.0-RC5.tar.gz/download
2) 安装
# mkdir /usr/local/amoeba
# tar zxvf amoeba-mysql-binary-2.1.0-RC5.tar.gz?C /usr/local/amoeba
# chmod ?R +x /usr/local/amoeba/bin
二、 配置环境
1. Java
#vi /etc/profile
#for java
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
2. Amoeba
#vi /etc/profile
#for amoeba
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin
完成后:
#source /etc/profile
3. 测试是否成功
Java:
#java ?version //显示如下
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
Amoeba:
#amoeba //显示如下
amoeba start|stop
三、 配置amoeba
需要配置两个文件:dbServer.xml 和 amoeba.xml
1. 配置dbServer.xml,直接贴出我的配置
# vi dbServer.xml
修改26行
原
改
修改28,29,,30行
28
复制一下代码,并在此代码下面粘贴两次
42
43
44
45
46
47
修改后的效果如下:添加两个db服务器定义,并且分别设置三个mysql server的ip地址,ip地址使用的是mysql-mmm的虚拟IP。
42
43
44
45
46
47
48
49
50
51
52
53
54
修改配置文件的最下方
64
65
66
67
68
69
70
71
72
2. 配置amoeba.xml
11
修改第30行
原
改
修改第32行
原
改
115行 ?120行
115
116
117
118
119
120
四、 测试
1. 启动amoeba
# amoeba start &
log4j:WARN log4j config load completed from file:/usr/local/amoeba/conf/log4j.xml
2015-01-08 11:20:15,858 INFO context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-mysql-amoeba-proxy-2.1.0-RC5
log4j:WARN ip access config load completed from file:/usr/local/amoeba/conf/access_list.conf
2015-01-08 11:20:16,061 INFO net.ServerableConnectionManager - Amoeba for Mysql listening on 0.0.0.0/0.0.0.0:8066.
2015-01-08 11:20:16,066 INFO net.ServerableConnectionManager - Amoeba Monitor Server listening on /127.0.0.1:37064.
跳出这些以后,自己ctrl+c即可,已经后台启动!
2. 测试
在 192.168.1.112
a. mysql ?u amoeba ?P8806 ?h 192.168.1.112 ?pamoeba //测试amoeba是否正常启动
b. mysql ?u amoeba ?h192.168.1.111 ?pamoeba //测试能否登录写数据库
c. mysql ?u amoeba ?h192.168.1.112 ?pamoeba//测试能否登录读服务器
如果三个都能登录成功,在继续以下测试,不能成功,需要检验:a.是否有此用户 b.是否授权此IP登录等
3. 测试amoeba的读写
在 192.168.1.112(读)上,mysql>stop slave;//关闭主从复制
# mysql ?u amoeba ?P8806 ?h 192.168.1.112?pamoeba //登录amoeba
Mysql> use test;
Mysql> insert into test1 (a)values (123);
Mysql> select *from test1;
发现刚才插入的并没有查询出来,说明读写已经分离
五、 问题
1. Q: amoeba start 跳出
The stack size specified too small, Specify at least 228k
Error: Could not create the Java Virtual Machine.
Err