===========================================
主从复制只是一个同步数据的方式
读写分离:只在主的上面写,只在从的上面读
读写分离方案:【1】基于程序代码内部 (生产环境中应用最广泛,性能最好,需要开发人员来实现)
【2】基于中间代理层的实现
amoeda 是阿里巴巴使用的产品
===========================================
实验要求
5台机器
web服务器 1台 :192.168.200.66
amoeba 服务器一台:192.168.200.67
数据库3台
数据库A :192.168.200.68 (mysql主服务器)
数据库B :192.168.200.69 (mysql从服务器)
数据库C :192.168.200.70 (mysql从服务器)
===========================================
amoeba :67
chmod +x jdk-6u31-linux-x64.bin
./jdk-6u31-linux-x64.bin
mv jdk1.6.0_31/ /usr/local/jdk1.6
安装amoeba 不仅需要amoeba软件包还需要有jdk-6u31-linux-x64.bin
/amoeba 软件是基于jdk1.5版本开始的。
ls
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=$PATH=$PATH:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeda
export PATH=$PATH:$AMOEBA_HOME/bin
保存退出
source /etc/profile
java -version
rm -rf /usr/bin/java
source /etc/profile
java -version
mkdir /usr/local/amoeba
tar xf amoeba........tat.gz -C /usr/local/amoeba
chmod -R 755 /usr/local/amoeba
---------------------------------------------
3台数据库服务器都要做授权,让amoeba可以进行访问
grant all on *.* to 'test'@'192.168.200.%' identified by '123.com'; //用户名是test 密码是123.com
flush privileges;
----------------------------------------------
修改amoeba的配置文件
主机amoeba 67 操作
cd /usr/local/amoeba/
ls
cd conf
ls
cp amoeba.xml{,.bak}
vim amoeba.xml //修改30行左右的文件内容amoeba123456 //指定客户端连接时的用户名和密码
///115行左右master
去掉以下两行的注释master //写交合主 slaves //读交给从slaves是从的组,里面包含slave1和slave2
保存退出
cp dbServers.xml{,.bak}
vim dbServers.xml //找到以下内容进行修改test
/去掉注释的mysql password 改为以下内容123.com
找到dbServer192.168.200.68
192.168.200.69192.168.200.70
声明slaves组 找到以下内容1slave1,slave2
保存退出
cd
nohup /usr/local/amoeba/bin/amoeba start & ///不依赖于任何终端,放到后台执行
netstat -lnpt //查看端口是否开启
注意:cat nohup.out
ps aux |grep amoeba //查看端口8066
---------------------------------------------------------------------------
web 服务器66
yum -y install mariadb
mysql -u amoeba -p123456 -h 192.168.200.67 -p 8066 //客户机做连接
=====测试amoeba是否能进行读写分离=========
【1】在数据库主服务器上创建
create database db_test;
use db_test;
create table student(id int(10),name varchar(10),address varchar(20));
show databases;
【2】在两台数据库从服务器上进行检测,看是否同步
show databases;
【3】先把两台数据库从服务器的复制功能停止
stop slave;
【4】在主数据库中插入数据
insert into student values('1','crushlinux','this_is_master');
【5】在slave1 slave2中分别插入以下数据
-----slave1
use db_test;
insert into student values('2','crushlinux','this_is_slave1');
-----slave2
use db_test;
insert into student values('3','crushlinux','this_is_slave2');
【6】web客户端查询测试
use db_test;
select * from student;
///测试结果是能够看到里面内容是轮询的。 而且只能看到从数据库上面的内容。
【7】web客户端插入数据
use db_test;
insert into student values('4','crushlinux','this_is_web');
【8】web客户端检查
use db_test;
select * from student;
【9】主数据库中查看是否有4的数据
use db_test;
select * from student;
【10】开启两台从数据库的主从复制功能
start slave;
show slave status; //查看是否开启
【11】在web客户端查看
use db_test;
select * from student; //会看到124 或者134 的数据
在插入一条数据
insert into student values('5','crushlinux','this_is_web');
///结果是1245或者是1345 总之,从服务器的数据不会同时出现。
===========完成!!!!!!!===========