===========================================
主從復制只是一個同步數據的方式
讀寫分離:只在主的上面寫,只在從的上面讀
讀寫分離方案:【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 總之,從服務器的數據不會同時出現。
===========完成!!!!!!!===========
