廣州 網(wǎng)站建設(shè)網(wǎng)絡(luò)推廣網(wǎng)頁(yè)設(shè)計(jì)免費(fèi)推廣廣告鏈接
讀寫分離
讀寫分離,基本的原理是讓主數(shù)據(jù)庫(kù)處理事務(wù)性增、改、刪操作(INSERT、UPDATE、DELETE),而從數(shù)據(jù)庫(kù)處理SELECT查詢操作。數(shù)據(jù)庫(kù)復(fù)制被用來(lái)把事務(wù)性操作導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫(kù)
讀寫分離的好處
因?yàn)閿?shù)據(jù)庫(kù)的“寫”(寫10000條數(shù)據(jù)可能要3分鐘)操作是比較耗時(shí)的
但是數(shù)據(jù)庫(kù)的“讀”(讀10000條數(shù)據(jù)可能只要5秒鐘)
所以讀寫分離,解決的是,數(shù)據(jù)庫(kù)的寫入,影響了查詢的效率
mysql支持的復(fù)制類型
- STATEMENT:基于語(yǔ)句的復(fù)制。在服務(wù)器上執(zhí)行sql語(yǔ)句,在從服務(wù)器上執(zhí)行同樣的語(yǔ)句,mysql默認(rèn)采用基于語(yǔ)句的復(fù)制,執(zhí)行效率高。
- ROW:基于行的復(fù)制。把改變的內(nèi)容復(fù)制過(guò)去,而不是把命令在從服務(wù)器上執(zhí)行一遍。
- MIXED:混合類型的復(fù)制。默認(rèn)采用基于語(yǔ)句的復(fù)制,一旦發(fā)現(xiàn)基于語(yǔ)句無(wú)法精確復(fù)制時(shí),就會(huì)采用基于行的復(fù)制。
主從復(fù)制的工作過(guò)程
- Master節(jié)點(diǎn)將數(shù)據(jù)的改變記錄成二進(jìn)制日志(bin log),當(dāng)Master上的數(shù)據(jù)發(fā)生改變時(shí),則將其改變寫入二進(jìn)制日志中
- Slave節(jié)點(diǎn)會(huì)在一定時(shí)間間隔內(nèi)對(duì)Master的二進(jìn)制日志進(jìn)行探測(cè)其是否發(fā)生改變,如果發(fā)生改變,則開始一個(gè)I/O線程請(qǐng)求 Master的二進(jìn)制事件
- 同時(shí)Master節(jié)點(diǎn)為每個(gè)I/O線程啟動(dòng)一個(gè)dump線程,用于向其發(fā)送二進(jìn)制事件,并保存至Slave節(jié)點(diǎn)本地的中繼日志(Relay log)中,Slave節(jié)點(diǎn)將啟動(dòng)SQL線程從中繼日志中讀取二進(jìn)制日志,在本地重放,即解析成 sql 語(yǔ)句逐一執(zhí)行,使得其數(shù)據(jù)和 Master節(jié)點(diǎn)的保持一致,最后I/O線程和SQL線程將進(jìn)入睡眠狀態(tài),等待下一次被喚醒
MySQL 讀寫分離原理
讀寫分離就是只在主服務(wù)器上寫,只在從服務(wù)器上讀。基本的原理是讓主數(shù)據(jù)庫(kù)處理事務(wù)性操作,而從數(shù)據(jù)庫(kù)處理 select 查詢。數(shù)據(jù)庫(kù)復(fù)制被用來(lái)把主數(shù)據(jù)庫(kù)上事務(wù)性操作導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫(kù)。
MySQL 讀寫分離分類
- 基于程序代碼內(nèi)部實(shí)現(xiàn)
在代碼中根據(jù) select、insert 進(jìn)行路由分類,這類方法也是目前生產(chǎn)環(huán)境應(yīng)用最廣泛的。
優(yōu)點(diǎn)是性能較好,因?yàn)樵诔绦虼a中實(shí)現(xiàn),不需要增加額外的設(shè)備為硬件開支;缺點(diǎn)是需要開發(fā)人員來(lái)實(shí)現(xiàn),運(yùn)維人員無(wú)從下手。
- 基于中間代理層實(shí)現(xiàn)
代理一般位于客戶端和服務(wù)器之間,代理服務(wù)器接到客戶端請(qǐng)求后通過(guò)判斷后轉(zhuǎn)發(fā)到后端數(shù)據(jù)庫(kù),有以下代表性程序。
- MySQL-Proxy。MySQL-Proxy 為 MySQL 開源項(xiàng)目,通過(guò)其自帶的 lua 腳本進(jìn)行SQL 判斷
- Atlas? 是由奇虎360的Web平臺(tái)部基礎(chǔ)架構(gòu)團(tuán)隊(duì)開發(fā)維護(hù)的一個(gè)基于MySQL協(xié)議的數(shù)據(jù)中間層項(xiàng)目。它是在mysql-proxy 0.8.2版本的基礎(chǔ)上,對(duì)其進(jìn)行了優(yōu)化,增加了一些新的功能特性。360內(nèi)部使用Atlas運(yùn)行的mysql業(yè)務(wù),每天承載的讀寫請(qǐng)求數(shù)達(dá)幾十億條。支持事物以及存儲(chǔ)過(guò)程
- Amoeba? 由陳思儒開發(fā),作者曾就職于阿里巴巴。該程序由Java語(yǔ)言進(jìn)行開發(fā),阿里巴巴將其用于生產(chǎn)環(huán)境。但是它不支持事務(wù)和存儲(chǔ)過(guò)程
MySQL主從復(fù)制延遲
- master服務(wù)器高并發(fā),形成大量事務(wù)
- 網(wǎng)絡(luò)延遲
- 主從硬件設(shè)備導(dǎo)致? cpu主頻、內(nèi)存io、硬盤io
- 本來(lái)就不是同步復(fù)制、而是異步復(fù)制
從庫(kù)優(yōu)化Mysql參數(shù);比如增大innodb_buffer_pool_size,讓更多操作在Mysql內(nèi)存中完成,減少磁盤操作
從庫(kù)使用高性能主機(jī),包括cpu強(qiáng)悍、內(nèi)存加大。避免使用虛擬云主機(jī),使用物理主機(jī),這樣提升了i/o方面性;從庫(kù)使用SSD磁盤
網(wǎng)絡(luò)優(yōu)化,避免跨機(jī)房實(shí)現(xiàn)同步
實(shí)驗(yàn)
主從復(fù)制
master:192.168.154.10
slave1:192.168.154.20
slave2:192.168.154.40
1、配置ntp文件
2、同步時(shí)間
3、主服務(wù)器配置
192.168.154.10
4、兩臺(tái)從服務(wù)器配置
192.168.154.20
192.168.154.40
5、驗(yàn)證
讀寫分離
master:192.168.154.10
slave1:192.168.154.20
slave2:192.168.154.40
amoeba客戶端:192.168.154.50
mariadb:192.168.154.60
接著主從復(fù)制的實(shí)驗(yàn)繼續(xù)
1、安裝jdk
192.168.154.10
2、裝amoeba
192.168.154.50
3、主從服務(wù)器 開放amoeba權(quán)限
192.168.154.10
192.168.154.20
192.168.154.40
4、配置amoeba.xml文件
5、配置dbServers.xml文件
6、安裝mariabd
192.168.154.60
7、測(cè)試主從服務(wù)器查詢情況
master服務(wù)器
8、slave1、slave2
9、測(cè)試關(guān)閉slave,master的情況
關(guān)閉兩個(gè)slave服務(wù)器?是查詢不到數(shù)據(jù)