9.mysql(linux)读写分离(一)

2015-01-23 22:04:31 · 作者: · 浏览: 9

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行
root
amoeba//连接两个服务器(读写)都要用,即这个账户可以连接读服务器,也可以连接写服务器,如果没有需要都添加这个用户,并且给这个ip授权(需要理解)
修改28,29,,30行
28 amoeba//mysql服务器的通用用 户密码
复制一下代码,并在此代码下面粘贴两次
42
43
44
45 127.0.0.1
46

47

修改后的效果如下:添加两个db服务器定义,并且分别设置三个mysql server的ip地址,ip地址使用的是mysql-mmm的虚拟IP。
42
43
44
45 192.168.1.111
46

47

48
49
50
51
52 192.168.1.112
53

54

修改配置文件的最下方
64 //定义虚拟节点池的名字
65
66
67 1 //负载均衡算法
68
69
70 Slave1 //虚拟节点池的成员
71

72

2. 配置amoeba.xml

11 8066 //amoeba监听端口,不用修改
修改第30行
root
amoeba//修改amoeba的用户名为amoeba
修改第32行

amoeba//修改amoeba的用户名为amoeba

115行 ?120行

115 Master
116
117 Master
118 Slave1
119 true
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