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