Mysql--讀寫分離

文章目錄

一、MySQL 讀寫分離原理

二、關(guān)于 Amoeba

三、配置實例

第一步:配置 Amoeba 服務(wù)器

第二步:在三臺 mysql 服務(wù)器上添加權(quán)限,開放給 amoeba 訪問(即三臺mysql允許amoeba對它們進(jìn)行訪問)

第三步:在 amoeba 服務(wù)器上配置讀寫分離功能

第四步:客戶端測試

四、總結(jié)

一、Mysql 讀寫分離原理

讀寫分離就是只在主服務(wù)器上寫,只在從服務(wù)上讀;
主數(shù)據(jù)庫處理事務(wù)性查詢,從數(shù)據(jù)庫處理 select 查詢;
數(shù)據(jù)庫復(fù)制被用來把事務(wù)性查詢導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫

二、關(guān)于 Amoeba

(1)Amoeba是一個以MySQL為底層數(shù)據(jù)存儲,并對應(yīng)用提供MySQL協(xié)議接口的proxy。它集中地響應(yīng)應(yīng)用的請求,依據(jù)用戶事先設(shè)置的規(guī)則,將SQL請求發(fā)送到特定的數(shù)據(jù)庫上執(zhí)行?;诖丝梢詫崿F(xiàn)負(fù)載均衡、讀寫分離、高可用性等需求。
(2)Amoeba相當(dāng)于一個SQL請求的路由器,目的是為負(fù)載均衡、讀寫分離、高可用性提供機(jī)制,而不是完全實現(xiàn)它們。需要結(jié)合使用MySQL的 Replication等機(jī)制來實現(xiàn)副本同步等功能。

三、配置實例

環(huán)境說明:
準(zhǔn)備三臺 Mysql服務(wù)器(一臺為主服務(wù)器,其余兩臺為從服務(wù)器);
一臺 Amoeba,用來實現(xiàn)讀寫分離,寫的操作交給主服務(wù)器,讀的操作發(fā)給兩臺從服務(wù)器;
實驗驗證:在客戶機(jī)上執(zhí)行寫的操作,在主、從服務(wù)器上驗證。

Mysql -- 讀寫分離

創(chuàng)新互聯(lián)是一家專業(yè)提供賽罕企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計制作、成都網(wǎng)站設(shè)計、H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為賽罕眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進(jìn)行中。

說明:Mysql 主從復(fù)制與讀寫功能是密切相關(guān)的,通過主從復(fù)制來實現(xiàn)數(shù)據(jù)同步,再通過讀寫分離來提升數(shù)據(jù)庫的并發(fā)負(fù)載能力。
應(yīng)用客戶端 192.168.220.131
Amoeba 192.168.220.129
主服務(wù)器 192.168.220.141
從服務(wù)器 1 192.168.220.140
從服務(wù)器 2 192.168.220.136

第一步:配置 Amoeba 服務(wù)器

(1)關(guān)閉防火墻:
 systemctl stop firewalld.service
 setenforce 0
(2)安裝管理 jdk:
1、安裝 jdk
 cp jdk-6u14-linux-x64.bin  /usr/local/     //復(fù)制

./jdk-6u14-linux-x64.bin                    
//安裝jdk ,注意這一步,一路按回車到最后,提示輸入yes,等待安裝

Mysql -- 讀寫分離

2、方便管理,將jdk包重新命名:
mv jdk1.6.0_14/ /usr/local/jdk1.6
3、修改 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
使環(huán)境變量生效:
source /etc/profile
(3)解壓 amoeba包:
1、先創(chuàng)建一個文件
mkdir /usr/local/amoeba
2、解壓
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
3、賦權(quán),并驗證是否安裝成功
chmod -R 755 /usr/local/amoeba/
輸入:/usr/local/amoeba/bin/amoeba ,按回車檢查是否成功

Mysql -- 讀寫分離

第二步:在三臺 mysql 服務(wù)器上添加權(quán)限,開放給 amoeba 訪問(即三臺mysql允許amoeba對它們進(jìn)行訪問)
進(jìn)入數(shù)據(jù)庫,輸入以下命令:
grant all on *.* to test@'192.168.220.%' identified by '123.com';
//允許ip為192.168.220網(wǎng)段從任意終端通過123.com的密碼進(jìn)行訪問
第三步:在 amoeba 服務(wù)器上配置讀寫分離功能
1、cd /usr/local/amoeba
vim conf/amoeba.xml

第30行:<property name="user">amoeba</property>
第32行:<property name="password">123456</property>

117行去掉注釋:
 <property name="writePool">master</property>
 <property name="readPool">slaves</property>

Mysql -- 讀寫分離

Mysql -- 讀寫分離

2、vim conf/dbServers.xml
26-29行:去掉注釋,設(shè)置登錄用戶名和密碼
<property name="user">test</property>
<property name="password">123.com</property>

找到主服務(wù)器和從服務(wù)器模塊,修改好名稱和對應(yīng)IP地址:
主服務(wù)器:
<dbServer name="master" parent="abstractServer">
<property name="ipAddress">192.168.220.141</property>

第一臺從服務(wù)器:
<dbServer name="slave1" parent="abstractServer">
<property name="ipAddress">192.168.220.140</property>

第二臺從服務(wù)器:
<dbServer name="slave2" parent="abstractServer">
<property name="ipAddress">192.168.220.136</property>

指定從服務(wù)器池:
<dbServer name="slaves" virtual="true">
<property name="poolNames">slave1,slave2</property>

Mysql -- 讀寫分離
Mysql -- 讀寫分離
Mysql -- 讀寫分離

3、啟動 amoeba
/usr/local/amoeba/bin/amoeba start&        //&表示將進(jìn)程放到后臺,時間較長,稍等待
1

第四步:客戶端測試

1、客戶端虛擬機(jī),可以直接用yum安裝一個mysql服務(wù)
yum install -y mysql
2、連接 amoeba 服務(wù)器
(1)指定密碼和端口連接 amoeba
mysql -u amoeba -p 123456 -h 192.168.220.129 -P8066
(2)創(chuàng)建一個 名為 school 的庫,再創(chuàng)建一個叫 info 的表
MySQL [school]> create table info (
    -> id int(4) not null primary key,      //指定id號,為primary key,不為空
    -> name varchar(10) not null,           //名字
    -> score decimal(4,1) not null);        //成績
Query OK, 0 rows affected (0.03 sec)

Mysql -- 讀寫分離

3、三臺mysql服務(wù)器驗證實驗結(jié)果
首先驗證寫的操作是否分離:
(1)此時,我們在主服務(wù)器上,直接進(jìn)入數(shù)據(jù)庫,就會發(fā)現(xiàn)也多了一個名為 info的表

Mysql -- 讀寫分離

(2)但是,兩臺從服務(wù)器上并沒有:

Mysql -- 讀寫分離

所以,我們在客戶端寫入的語句,在主服務(wù)器上會查詢到,但是兩臺從服務(wù)器上并沒有,此時寫的操作就直接交給了主服務(wù)器。
接下來是驗證讀的操作:
(1)在兩臺從服務(wù)器上的各自也創(chuàng)建一個 info 表,也都各自寫入兩條信息。

Mysql -- 讀寫分離

Mysql -- 讀寫分離

(2)客戶端查詢 info 表的內(nèi)容,因為做了讀寫分離操作,所以查詢的內(nèi)容應(yīng)該是 兩臺從服務(wù)器上 info表的內(nèi)容。

Mysql -- 讀寫分離

因此,用戶讀取數(shù)據(jù),同時通過從服務(wù)器,這樣就減輕了主服務(wù)器的并發(fā)量。

四、總結(jié)

這篇博客,為了展示讀寫分離的實驗效果,并沒有同時做主從同步,在企業(yè)網(wǎng)中,主從同步和讀寫分離是密不可分的。這樣,客戶對數(shù)據(jù)庫進(jìn)行寫的操作時,就由主服務(wù)器承擔(dān);進(jìn)行讀取,查詢等操作時,就由從服務(wù)器來承擔(dān)(由于做了主從同步,每臺從服務(wù)器的數(shù)據(jù)和主服務(wù)器是一樣的)
在高并發(fā)請求時,實現(xiàn)了負(fù)載均衡,保證數(shù)據(jù)的安全性,服務(wù)器的高效運行

分享文章:Mysql--讀寫分離
鏈接分享:http://bm7419.com/article16/iihhgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計服務(wù)器托管、網(wǎng)站內(nèi)鏈動態(tài)網(wǎng)站、微信小程序、

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司