1.讀寫分離的思路
1.1 原理
顧名思義刨晴,讀寫分離基本的原理是讓主數(shù)據(jù)庫處理事務(wù)性增路翻、改狈癞、刪操作蝶桶,而從數(shù)據(jù)庫處理查詢操作脐雪。數(shù)據(jù)庫復(fù)制被用來把事務(wù)性操作導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫恢共。
1.2 實現(xiàn)方式
實現(xiàn)方式有很多,但是不外乎分為內(nèi)部配置和使用中間件,下面列舉幾個常用的方法:
1.配置多個數(shù)據(jù)源透硝,根據(jù)業(yè)務(wù)需求訪問不同的數(shù)據(jù)狰闪,指定對應(yīng)的策略:增加,刪除蹬铺,修改操作訪問對應(yīng)數(shù)據(jù)囱淋,查詢訪問對應(yīng)數(shù)據(jù)媒役,不同數(shù)據(jù)庫做好的數(shù)據(jù)一致性的處理。由于此方法相對易懂,簡單躬充,不做過多介紹。
- 通過mycat來實現(xiàn)讀寫分離:使用mycat提供的讀寫分離功能挣跋,mycat連接多個數(shù)據(jù)庫衷咽,數(shù)據(jù)源只需要連接mycat,對于開發(fā)人員而言他還是連接了一個數(shù)據(jù)庫(實際是mysql的mycat中間件)谁撼,而且也不需要根據(jù)不同業(yè)務(wù)來選擇不同的庫歧胁,這樣就不會有多余的代碼產(chǎn)生。
每個方法都有優(yōu)缺點厉碟,我們選擇對程序代碼改動最小(只改數(shù)據(jù)源)的方法三喊巍,講解mycat的配置和使用。
2.Mycat安裝和配置
2.1安裝步驟
#安裝Java環(huán)境(mycat基于java)
yum install java-1.8.0-openjdk.x86_64
# 下載mycat
wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
# 解壓
tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
# 剪切到/usr/local下
mv mycat /usr/local/
# 創(chuàng)建專門運行mycat賬號
adduser mycat
# 切換到mycat文件夾路徑下
cd /usr/local
# 將文件權(quán)限賦給mycat賬號
chown mycat:mycat -R mycat
#配置環(huán)境變量并添加 export JAVA_HOME=/usr export MYCAT_HOME=/usr/local/mycat(如下圖所示)
vim /etc/profile
按Esc箍鼓,輸入:wq保存退出
# 刷新環(huán)境變量文件
source /etc/profile
# 切換mycat用戶
su mycat
#切換目錄
cd /usr/local/mycat/bin/
#啟動mycat
./mycat start
好了崭参,mycat啟動成功,我們來看一下讀寫分離的配置和mycat的連接配置!
3.配置Mycat的讀寫分離
3.1 Mycat的目錄結(jié)構(gòu)
根目錄
進到conf文件夾里面查看配置文件:
3.2 配置讀寫分離信息
進入配置文件
vi /usr/local/mycat/conf/schema.xml
以下是兩種配置方式和配置說明
1. 提供一個數(shù)據(jù)庫內(nèi)所有表的權(quán)限:
2. 只顯示一個數(shù)據(jù)庫的指定表:
這樣對于數(shù)據(jù)庫的讀寫信息就配置完成了款咖;一般剛開始做何暮,先使用第一種方法。
4.配置Mycat的連接信息(賬號密碼)
#進入配置文件
vi /usr/local/mycat/conf/server.xml
設(shè)置端口和mycat連接信息
對于<dataHost>標簽铐殃,它里面重要的參數(shù)列舉如下:
balance指的負載均衡類型海洼,目前的取值有4種:
1. balance=”0”, 不開啟讀寫分離機制,所有讀操作都發(fā)送到當前可用的writeHost上富腊。
2. balance=”1”坏逢,全部的readHost與stand bywriteHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1词疼,M2->S2俯树,并且M1與 M2互為主備),
正常情況下贰盗,M2,S1,S2都參與select語句的負載均衡许饿。
3. balance=”2”,所有讀操作都隨機的在writeHost舵盈、readhost上分發(fā)陋率。
4. balance=”3”,所有讀請求隨機的分發(fā)到wiriterHost對應(yīng)的readhost執(zhí)行秽晚,writerHost不負擔讀壓力
注意:balance=3只在1.4及其以后版本有瓦糟,1.3沒有。
writeType屬性:
1.writeType=”0”,所有寫操作發(fā)送到配置的第一個writeHost,第一個掛了切到還生存的第二個writeHost,重新啟動后以切換后的為準赴蝇,切換記錄在配置文件中:dnindex.properties.
2.writeType=”1”,所有寫操作都隨機地發(fā)送到配置的writeHost,1.5以后廢棄不推薦菩浙。
switchType指的是切換的模式,目前的取值也有4種:
1. switchType=’-1’ 表示不自動切換
2. switchType=’1’ 默認值句伶,表示自動切換
3. switchType=’2’ 基于MySQL主從同步的狀態(tài)決定是否切換,心跳語句為 show slave status
4. switchType=’3’基于MySQLgalary cluster的切換機制(適合集群)(1.4.1)劲蜻,心跳語句為 show status like ‘wsrep%’。
注意:估計Mycat1.4才開始支持switchType考余。1.3版本配置該屬性的話先嬉,日志里會報錯:org.xml.sax.SAXParseException;lineNumber: 61; columnNumber: 86;
Attribute “switchType” must bedeclared for element type “dataHost”。
MyCAT心跳檢查詢句配置為 show slave status 楚堤,dataHost 上定義兩個新屬性: switchType=”2” 與slaveThreshold=”100”疫蔓,
此時意味著開啟MySQL主從復(fù)制狀態(tài)綁定的讀寫分離與切換機制,Mycat心跳機制通過檢測 show slave status 中的 “Seconds_Behind_Master”,”Slave_IO_Running”,
”Slave_SQL_Running”三個字段來確定當前主從同步的狀態(tài)及Seconds_Behind_Master主從復(fù)制時延身冬,當Seconds_Behind_Master>slaveThreshold時衅胀,
讀寫分離篩選器會過濾掉此Slave機器,防止讀到很久以前的舊數(shù)據(jù)酥筝,當主節(jié)點宕機后滚躯,切換邏輯會檢查Slave上的Seconds_Behind_Master是否為0
,為0時則表示主僅同步樱哼,可安全切換,否則不會切換剿配。
5搅幅、測試連接
Mycat的配置到這里就算完成了,現(xiàn)在我們重啟Mycat并連接測試
#切換路徑
cd /usr/local/mycat/bin
#重啟
./mycat restart