今天小木給大家來講一講搭建MySQL讀寫分離,如果有所幫助,歡迎關注我哦!
注意要關閉客戶機和代理服務器的防火牆 命令 關掉防火牆 chkconfig -- level 2345 iptables off
關閉防火牆 service iptables stop
vim /etc/sysconfig/selinux :修改/etc/selinux/config文件中的SELINUX="" 為 disabled ,
在Amoeba上安裝Java環境
第一步 chmod +x jdk-6u14-linux-x64.bin (權限)
第二步 ./jdk-6u14-linux-x64.bin (//根據提示按Enter健完成即可)
第三步 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/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin
第五步 source /etc/profile
第六步 java –version (查看)
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode)
Java環境已配置成功
安裝並配置Amoeba軟件
第一步 mkdir /usr/local/amoeba (創建)
第二步 tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba (拷貝)
第三步 chmod -R 755 /usr/local/amoeba (權限)
第五步 amoeba
amoeba start|stop (顯示此內容說明Amoeba安裝成功)
配置amoeba讀寫分離
1) 在master、slave數據庫服務器上創建測試用戶:test,並賦予其權限
GRANT all ON *.* TO 'test'@'192.168.10.%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
編輯amoeba.xml,修改以下主要內容:
第六步 cd /usr/local/amoeba (進入)
1) vim conf/amoeba.xml (全部修改成一下內容)
<property name="authenticator">
...
<property name="user">amoeba</property> (第30行)
<property name="password">123456</property> (第31行)
...
<property name="sqlFunctionFile">
...
<property name="defaultPool">master</property> (第115行)
<property name="writetPool">master</property> (第118行)
<property name="readPool">slaves</property> (第119行)
編輯dbServers.xml,修改以下主要內容
2) vim conf/dbServers.xml (全部修改成一下內容)
<!-- mysql user -->
<property name="user">test</property> (第26行)
<property name="password">123456</property> (第29行)
<dbServer name="master" parent="abstractServer"
...
<!-- mysql ip -->
<property name="ipAddress">192.168.10.1</property> (第48行 MySQL主IP地址)
<dbServer name="slavel" parent="abstractServer"
...
<!-- mysql ip -->
<property name="ipAddress">192.168.10.2</property>... (第55行 MySQL從IP地址)
<dbServer name="slaves" virtual="true" (第59行)
...
<property name="poolNames">slavel,slave2</property>
啟動amoeba
/usr/local/amoeba/bin/amoeba start &
netstat -anpt | grep java (查看 8066端口)
測試
在Client主機上
安裝 yum -y install mysql
通過代理訪問MySQL
mysql -u amoeba -p123456 -h 192.168.10.10 -P8066
七、測試Mysql數據庫的讀、寫分離
1、在master服務器的db_test數據庫(該庫在前面測試主、從複製功能時已創建)中創建表zang
mysql -u root -p123456
use db_test;
create table zang(id int(10),name varchar(10),address varchar(20));
2、在slave1和slave2服務器上停止數據庫的slave功能:
mysql -u root -p123456
stop slave;
3、在master數據庫服務器上插入表記錄1
insert into zang values('1','zhang','this_is_master');
4、在slave1上,手動插入表記錄2:
use db_test;
insert into zang values('2','zhang','this_is_slave');
5、在client上執行第1次查詢:
select * from zang;
只能看到在slave1上插入的記錄2,而無法看到master上插入的記錄1(因為slave1和slave2的Mysql數據庫已停止slave功能)
6、在slave2上,手動插入表記錄3:
use db_test;
insert into zang values('3','zhang','this_is_slave');
7、在client上執行第2次查詢:
select * from zang;
能看到在slave2上插入的表記錄,依然無法看到master上插入的表記錄(原因同上)
8、在client上執行第3次查詢:
select * from zang;
查詢結果又切換到slave1上的表記錄(說明2臺slave數據庫具有負載平衡的功能)
9、在client上插入表記錄4:
use db_test;
insert into zang values('4','zhang','this_is_slave');
10、在client上執行第4次查詢:
select * from zang;
無法看到剛插入的第4條表記錄,
而在master上執行查詢
select * from zang;
好了,今天小木就些到這裡了,如果對你有幫助,歡迎點擊關注我。我會定期分享最新的乾貨知識!