在 Amoeba 服务器上安装 Java 环境
systemctl stop firewalld.service
setenforce 0
cp jdk-6u14-linux-x64.bin /usr/local/
cd /usr/local
./jdk-6u14-linux-x64.bin #回车,输入"yes",回车
mv jdk1.6.0_14/ /usr/local/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 #刷新环境变量
安装并配置 Amoeba 软件
# mkdir /usr/local/amoeba
# tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
# chmod -R 755 /usr/local/amoeba/
# /usr/local/amoeba/bin/amoeba
amoeba start|stop #显示此内容说明 Amoeba 安装成功
在三台主从 MySQL 服务器上开放权限给 Amoeba 访问(三台服务器都要添加)
grant all on *.* to test@'192.168.100.%' identified by '123456';
在 Amoeba 服务器上编辑 amoeba.xml 配置文件
# vim /usr/local/amoeba/conf/amoeba.xml
--30行--
amoeba #用户访问amoeba服务器的身份验证
--32行--
123456
--115行--
master #默认权限
--117-去掉注释-
master #赋予master写权限
slaves #赋予slaves读权限
# vi conf/dbServers.xml
-23行注释掉 作用:默认进入test库 以防mysql中没有test库时,会报错
--26--29--去掉注释-- #赋予amoeba用户权限
test
123456
-----42-主服务器地址---
192.168.100.200
--52-从服务器主机名-
--55-从服务器1地址-
192.168.100.201
--(这里上面6行复制修改)从服务器2地址
192.168.100.202
--64行--
--70行--
slave1,slave2
开启服务
/usr/local/amoeba/bin/amoeba start&
netstat -anpt | grep java
测试读写分离
客户机
systemctl stop firewalld.service
setenforce 0
mysql -u amoeba -p123456 -h 192.168.100.203 -P8066 #使用amoeba远程登录MySQL
Master 服务器
mysql -u root -p
mysql> create database wang;
mysql> use wzn;
mysql> create table wzn (id int(10),name varchar(10),address varchar(20));
Slave 服务器
mysql -u root -p
mysql> stop slave;
mysql> use wang;
mysql> use wzn;
# Slave1 服务器
mysql> insert into zang values('2','wzn','this_is_slave1');
# Slave2 服务器
mysq> insert into zang values('3','wzn','this_is_slave2');
此时我们通过客户机访问,使用select * from wzn;可以看到在两台 Slave 服务器上分别创建的数据。
我们在客户端上插入一条数据,此时查看表 wzn ,是看不到刚写的数据的,因为数据是写在 Master 服务器上,此时同步没有开启,但是我们登录 Master数据库可以看到数据写入成功。尝试开启同步,我们可以看到,数据同步到 Slave 数据库之后,我们可以看到新建的数据了。
由此可以证实:数据的写入是在 Master 服务器上;数据的读取是在 Slave 服务器上。