读写分离要建立在主从复制的基础上,关于主从复制的搭建方法这里不再叙述,大家可以看博主其他文章。
这里使用amoeba来实现mysql读写分离。
大概的一个原理图如下。都是centos6.5的系统 5台服务器。
这里是准备好的了主从关系。
下面开始。
amoeba上的配置:
amoeba是给予jdk1.5开发的,建议使用1.5或者1.6的环境,不要太高。
http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html
这个是java环境包下载的网站。
系统自带的有点高,要把java的环境重新部署一下。
下面是安装jdk环境的步骤
mv jdk-6u45-linux-x64.bin /usr/local/
cd /usr/local/
chmod +x jdk-6u45-linux-x64.bin
./jdk-6u45-linux-x64.bin
mv jdk1.6.0_45 jdk1.6
vim /etc/profile
末尾添加
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
java -version
可以看到版本号已经成了1.6的了。
---------------------------------------------------------------------------
在主mysql上面建一个授权用户稍后给amoeba使用。
grant all on *.* to aaa@'192.168.43.%' identified by '123456';
----------------------------------------------------------------------
配置amoeba
amoeba的包大家可以去网上下载。
mkdir /usr/local/amoeba
tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba
cd /usr/local/amoeba/
----------------------------------------------------------------------------------
vim conf/dbServers.xml
26行左右
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
43行
-------------------------------------------------------------------------------------------------
63行
保存。
-------------------------------------------------------------------------------------------
vim conf/amoeba.xml
-----------------------------------------------------------------------------------------------------------
在115行左右
这里调用了上一个文件里的定义的服务器名
/usr/local/amoeba/bin/amoeba start # 开启 amoeba
如果遇到这个报错
The stack size specified is too small, Specify at least 160k
Could not create the Java virtual machine.
解决方法:
vim/usr/local/amoeba/bin/amoeba
58行最后一个数字改大 这改成了160
保存然后启动。
------------------------------------------------------------------------------------
好了测试效果。
打开一个服务器作客户端
yum install -y mysql
mysql -uamoeba -p123456 -h 192.168.43.60 -P 8066
使用的用户是刚才在配置文件指定的用户和密码 amoeba端口是8066
主mysql上创建个数据库和表
create database aa;
use aa;
create table aa (id int(10),name varchar(10));
关掉两个从mysql的IO线程不然会复制数据看不出来效果
第一个从服务器上:
mysql> stop slave;
mysql> insert into aa values ('1','zhang');
Query OK, 1 row affected (0.01 sec)
--------------------------------
第二个从服务器上:
mysql> stop slave;
mysql> insert into aa values ('2','wang');
Query OK, 1 row affected (0.01 sec)
客户端上查看效果
use aa; #切换数据库然后查看表内容发现里面一次是slave1的内容一次是slave2的内容。负载均衡的作用
--------------------------------------------
在客户端写入一下
mysql> insert into aa values ('3','master');
Query OK, 1 row affected (0.02 sec)
然后去服务器上查表内容可以发现主服务上有写入的内容 其他服务器上没 证明写的操作是在主服务器上的。
如果从服务器开着主从复制那么就会同步数据。
读写分离,完毕。