mysql读写分离
环境介绍:
amoeba服务器: 192.168.3.99
master mysql 服务器: 192.168.3.100
slave1 mysql 服务器: 192.168.3.101
slave2 mysql 服务器: 192.168.3.102
客户端: 192.168.3.150
在192.168.3.99(amoeba)配置
chmod +x jdk-6u14-linux-x64.bin
./jdk-6u14-linux-x64.bin
mv jdk1.6.0_14 /usr/local/jdk1.6
vim /etc/profile.d/jdk.sh
#!/bin/bash
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin
source /etc/profile.d/jdk.sh
mkdir /usr/local/amoeba
tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/
查看启动脚本
[root@localhost profile.d]# /usr/local/amoeba/bin/amoeba
amoeba start|stop
配置读amoeba写分离
分别在3台数据库上(3.100 3.101 3.102)授权用户,使amoeba能够访问3台数据库
grant all on *.* to 'test'@'192.168.3.%' identified by '123.com';
flush privileges;
1.修改amoeba.xml,设置登陆amoeba的帐号密码。
cd /usr/local/amoeba/conf
vim amoeba.xml
#修改30 32行
<property name="user">amoeba</property>
<property name="password">123456</property>
114 <property name="LRUMapSize">1500</property>
115 <property name="defaultPool">master</property>
118 <property name="writePool">master</property>
119 <property name="readPool">slaves</property>
注意:删除注释
3. 修改dbServers.xml,设置数据库、登陆MySQL的帐号和密码。
vim /usr/local/amoeba/conf/dbServers.xml
修改以下红色部分。注意启用29行的密码
25 <!-- mysql user -->
26 <property name="user">test</property>
27
28 <!-- mysql password -->
29 <property name="password">123.com</property>
44 <dbServer name="master" parent="abstractServer">
45 <factoryConfig>
46 <!-- mysql ip -->
47 <property name="ipAddress">192.168.3.100</property>
48 </factoryConfig>
49 </dbServer>
44-49行原文没有配置,此为我们手动添加的配置
50
51 <dbServer name="slave1" parent="abstractServer">
52 <factoryConfig>
53 <!-- mysql ip -->
54 <property name="ipAddress">192.168.3.101</property>
55 </factoryConfig>
56 </dbServer>
57
58 <dbServer name="slave2" parent="abstractServer">
59 <factoryConfig>
60 <!-- mysql ip -->
61 <property name="ipAddress">192.168.3.102</property>
62 </factoryConfig>
63 </dbServer>
65 <dbServer name="slaves" virtual="true">
71 <property name="poolNames">slave1,slave2</property>
注意71的配置必须用逗号隔开。用句号会报错
4.启动amoeba
如图为启动成功
端口已经正常启动
5.测试
在客户端上连接amoeba
mysql -uamoeba -p123456 -h 192.168.3.99 -P8066
首先我们测试mysql的读的负载均衡功能。
关闭所有的mysql的防火墙
service iptables stop
我们在master上创建一个数据库,然后自动同步到从服务器上。然后在关闭从服务器的slaves功能。在插入区别语句
(1)在master mysql(3.100)上创建数据库。并且创建表
mysql> create database db_test;
Query OK, 1 row affected (0.00 sec)
mysql> use db_test;
Database changed
mysql> create table benet (id int(10),name varchar(10),address varchar(20));
Query OK, 0 rows affected (0.07 sec)
(2) 停掉两台从服务(3.101 3.102)
slave stop;
(3)然后在master (3.100)上插入内容。
insert into benet values ('1','zhang','this_is_master');
(4)我们手动向两台从(3.101 3.102)服务器的benet表中插入内容
192.168。3.101 操作以下命令
use db_test;
insert into benet values ('2','zhang','this_is_master');
192.168.3.102 操作以下命令
use db_test;
insert into benet values ('3','zhang','this_is_master');
通过在客户端上查询,为两台从服务器的轮询效果
(5)测试写操作
在客户端上(3.150)插入一条数据
use db_test;
insert into benet values ('4','zhang','this_is_master');
但是在客户端查询不到,但是在master上查询到新数据,说明我们已经将数据写入到了master(3.100)上