目錄
一、讀寫(xiě)分離是什么?
二、常見(jiàn)的MySQL讀寫(xiě)分離方案
1.基于程序代碼內(nèi)部實(shí)現(xiàn)
2.基于中間代理層實(shí)現(xiàn)
3.Amoeba
三、分離步驟
1.在主機(jī)Amoeba上安裝java環(huán)境
2.安裝并配置Amoeba
3.配置Amoeba讀寫(xiě)分離,兩個(gè)Slave讀負(fù)載均衡
4.測(cè)試
4.1?在Client上進(jìn)行訪問(wèn)測(cè)試
4.2?通過(guò)代理訪問(wèn)MySQL
四、驗(yàn)證
1.主服務(wù)器操作
2.分別在兩臺(tái)從服務(wù)器上操作
3.主從服務(wù)器添加
4.操作驗(yàn)證 - 讀(負(fù)載均衡)
4.1?在測(cè)試機(jī)上第1次查詢(xún)結(jié)果
4.2?在測(cè)試機(jī)上第2次查詢(xún)結(jié)果
4.3?在測(cè)試機(jī)上第3次查詢(xún)結(jié)果
5.操作驗(yàn)證 - 寫(xiě)(讀寫(xiě)分離)
一、讀寫(xiě)分離是什么?
- ????????在實(shí)際的生產(chǎn)環(huán)境中,如果對(duì)數(shù)據(jù)庫(kù)的讀和寫(xiě)都在同一個(gè)數(shù)據(jù)庫(kù)服務(wù)器中操作,無(wú)論是安全性,高可用還是并發(fā)等各個(gè)方面都不能完全滿足實(shí)際需求的,因此一般來(lái)說(shuō)都是通過(guò)主從復(fù)制的方式來(lái)同步數(shù)據(jù),再通過(guò)讀寫(xiě)分離來(lái)提供數(shù)據(jù)的高并發(fā)負(fù)載能力這樣的方案來(lái)進(jìn)行部署。
- ????????簡(jiǎn)單來(lái)說(shuō),讀寫(xiě)分離就是只在主服務(wù)器上寫(xiě),只在從服務(wù)器上讀,基本的原理是讓主數(shù)據(jù)庫(kù)處理事務(wù)性查詢(xún),而從數(shù)據(jù)庫(kù)處理select查詢(xún),數(shù)據(jù)庫(kù)復(fù)制被用來(lái)把事務(wù)性查詢(xún)導(dǎo)致的改變更新同步到集群中的從數(shù)據(jù)庫(kù)。
二、常見(jiàn)的MySQL讀寫(xiě)分離方案
1.基于程序代碼內(nèi)部實(shí)現(xiàn)
在代碼中根據(jù)select,insert進(jìn)行路由分類(lèi),這類(lèi)方法也是目前大型生產(chǎn)環(huán)境應(yīng)用最廣泛的,優(yōu)點(diǎn)是性能最好,因?yàn)樵诔绦虼a中實(shí)現(xiàn),不需要增加額外的設(shè)備作為硬件開(kāi)支,缺點(diǎn)是需要開(kāi)發(fā)人員來(lái)實(shí)現(xiàn),運(yùn)維人員無(wú)從下手
2.基于中間代理層實(shí)現(xiàn)
代理一般位于客戶端和數(shù)據(jù)庫(kù)服務(wù)器之間,代理服務(wù)器接到客戶端請(qǐng)求后通過(guò)判斷轉(zhuǎn)發(fā)到后端數(shù)據(jù)庫(kù),代表性程序:
- ??? ? ? mysql-proxy為mysql開(kāi)發(fā)早期開(kāi)源項(xiàng)目,通過(guò)其自帶的lua腳本進(jìn)行SQL判斷,雖然是mysql的官方產(chǎn)品,但是mysql官方不建議將其應(yīng)用到生產(chǎn)環(huán)境。
- ????????Amoeba(變形蟲(chóng))該程序由java語(yǔ)言及逆行開(kāi)發(fā),阿里巴巴將其應(yīng)用于生產(chǎn)環(huán)境,它不支持事物和存儲(chǔ)過(guò)程。
-
3.Amoeba
-
????????Amoeba(變形蟲(chóng))項(xiàng)目開(kāi)源框架于2008年發(fā)布一款A(yù)moeba for mysql軟件,這個(gè)軟件致力于mysql的分布式數(shù)據(jù)庫(kù)前端代理層,主要為應(yīng)用層訪問(wèn)mysql的時(shí)候充當(dāng)SQL路由功能,并具有負(fù)載均衡,高可用性,SQL過(guò)濾,讀寫(xiě)分離,可路由到相關(guān)的目標(biāo)數(shù)據(jù)庫(kù),可并發(fā)請(qǐng)求多臺(tái)數(shù)據(jù)庫(kù),通過(guò)Amoeba能夠完成多數(shù)據(jù)源的高可用,負(fù)載均衡,數(shù)據(jù)切片的功能,目前Amoeba已經(jīng)在很多企業(yè)的生產(chǎn)線上使用。
-
三、分離步驟
-
1.在主機(jī)Amoeba上安裝java環(huán)境
- 查看現(xiàn)有Java環(huán)境
- java -version
- 移除過(guò)高版本Java
- which java
- rm -rf /usr/bin/java
-
- chmod +x jdk-6u14-linux-x64.bin
-
./jdk-6u14-linux-x64.bin
-
-
-
mv jdk1.6.0_31/ /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:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$HOME/bin
????????export AMOEBA_HOME=/usr/local/amoeba
????????export PATH=$PATH:$AMOEBA_HOME/bin
source /etc/profile
java -version
-
注:因?yàn)锳moeba是基于jdk1.5版本開(kāi)發(fā)的,所以官方推薦使用1.5或者1.6版本,高版本不建議使用。
-
2.安裝并配置Amoeba
- mkdir /usr/local/amoeba
- tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
- chmod -R 755 /usr/local/amoeba/
-
3.配置Amoeba讀寫(xiě)分離,兩個(gè)Slave讀負(fù)載均衡
-
在Master、Slave1、Slave2服務(wù)器中配置Amoeba的訪問(wèn)授權(quán)
-
grant all on *.* to 'test'@'192.168.42.%' identified by '123.com';
-
flush privileges;
-
-
編輯amoeba.xml配置文件
-
vim /usr/local/amoeba/conf/amoeba.xml
-
-
編輯dbServer.xml配置文件
?vim /usr/local/amoeba/conf/dbServers.xml
-
-
-
-
配置無(wú)誤后,啟動(dòng)Amoeba軟件,默認(rèn)端口是TCP協(xié)議8066
-
netstat -lnpt | grep 8066
-
-
4.測(cè)試
-
4.1?在Client上進(jìn)行訪問(wèn)測(cè)試
-
yum -y install mariadb mariadb-devel
-
4.2?通過(guò)代理訪問(wèn)MySQL
mysql -uamoeba -p123456 -h 192.168.42.138 -P 8066
驗(yàn)證步驟就是在MySQL主服務(wù)器上創(chuàng)建一個(gè)表,會(huì)自動(dòng)同步到各個(gè)從服務(wù)器上,然后關(guān)掉各個(gè)服務(wù)器上的Slave功能,在分別插入語(yǔ)句測(cè)試。
注:此處命令中的IP是amoeba服務(wù)器的IP。
-
四、驗(yàn)證
-
1.主服務(wù)器操作
-
create database Rich;
-
use Rich;
-
create table student (id int(10),name varchar(10),address varchar(20));
-
-
2.分別在兩臺(tái)從服務(wù)器上操作
-
show databases;
-
use Rich;
-
-
show tables;
-
-
stop slave;
-
-
3.主從服務(wù)器添加
- Master
-
use Rich;
-
insert into student values('1','Rich','this_is_master');
-
- Slave1
-
insert into student values('2','Rich','this_is_slave1');
-
- Slave2
-
insert into student values('3','Rich','this_is_slave2');
-
-
4.操作驗(yàn)證 - 讀(負(fù)載均衡)
-
4.1?在測(cè)試機(jī)上第1次查詢(xún)結(jié)果
- use Rich;
-
select * from student;文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-615180.html
-
-
4.2?在測(cè)試機(jī)上第2次查詢(xún)結(jié)果
select * from student;
-
4.3?在測(cè)試機(jī)上第3次查詢(xún)結(jié)果
select * from student;
-
5.操作驗(yàn)證 - 寫(xiě)(讀寫(xiě)分離)
-
在Client上插入一條語(yǔ)句
?insert into student values?('4','Rich','write_test');
?
但在Client上查詢(xún)不到,最終只有在Master上才能看到這條語(yǔ)句內(nèi)容,說(shuō)明寫(xiě)操作在master服務(wù)器上
由此驗(yàn)證,已經(jīng)實(shí)現(xiàn)了MySQL讀寫(xiě)分離,目前所有的寫(xiě)操作都在Master主服務(wù)器上,用來(lái)避免數(shù)據(jù)的不同步,所有的讀操作都平分給了Slave從服務(wù)器,用來(lái)分擔(dān)數(shù)據(jù)庫(kù)壓力。
分別在兩臺(tái)從服務(wù)器上啟用slave功能
start slave;
現(xiàn)在在Client測(cè)試機(jī)上查看
select * from student;
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-615180.html
到了這里,關(guān)于【MySQL 基于Amoeba讀寫(xiě)分離】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!