標籤:master memcached replication parallel
如何提升replication的效能:
延遲 :
對於mysql replication來說,在沒有發生故障的情況下,出現master與slave資料不同步,延遲分為以下兩種情況:
經常性延遲 : 非同步同步的資料差距比較大 ,周期性的,迴圈。
暫時性延遲 : 突發情況,導致延遲
其主要原因就是:
網路頻寬
I/O
如何減少replication延遲??
1,最好使用內網或者專線鏈路傳輸binlog資料 (千兆網卡、還不夠的話,bounding 技術,擴充頻寬) 在my.cnf中強制使用內網ip傳輸資料bind-address=ip
2,將二進位儲存在獨立的儲存介質上(提升I/O)
3,買多核CPU,使用多線程方式傳輸二進位日誌 ()
4,如果二進位日誌不是row格式,則儘可能不要再insert 或者update的時候使用select ,statement模式會給master傳輸二進位時候造成大的壓力
5,想盡辦法減少master的寫I/O(memcached)(既要寫自己的二進位日誌,也要負責讀自己的二進位日誌寫給slave伺服器),master上的I.O越低,越能快的將binlog傳輸給slave、
加memcached 緩衝層,資料庫上次做個緩衝池放到記憶體中,由memcached管理,周期性的將資料同步給資料庫,把大並發的寫操作,合并成小量的寫操作。以此減少master寫I/O
架構設計1:
主從伺服器可以使用不同的儲存引擎,master上使用innodb,利用事務,行鎖等進階鎖特性,slave上使用MYISAM,讀效能更好,節省記憶體,容易備份。還可以使用不同的資料類型,例如
master上用varchar,slave上用char。不僅節省空間的,還可以使用myisam的靜態表特性。
M-S--Muti SLAVE方案中,中繼slave還可以使用blackhole儲存引擎,blackhole儲存引擎值記錄日誌,不寫資料,此特性可以讓中繼日誌效能提升很多,但是,這種方案不支援GTIDs模式下的
replication,因為blackhole只能搭配statement格式的二進位日誌使用,row和mixed格式都不支援。
在讀寫分離中,主存伺服器採用不同索引採用不同方案,master可以只保留主鍵或者唯一索引等保證資料關係的索引,而slave針對查詢做索引最佳化、
架構設計2:
讓更新頻繁,且需要即時的資料查詢放到master上,再通過持久化session,讓發生修改的使用者先看到結果,其他人等待同步完後同步replication,
如果開發做不到,用下面的memcached,在資料之前加上memcached
讓使用者對資料庫的更改先儲存到memcached中,memcached是一種記憶體中的儲存引擎(獨立第三方技術),由於記憶體的讀寫效能很高 ,可以把讀寫特別頻繁的更新資料儲存到這裡,每隔5分鐘
,再把資料同步到master,對於另一個用戶端來說,讓他優先到master找資料,即在master上的memcached中讀資料,在讀slave。這樣可以優先將更改的資料由記憶體返回給使用者,這樣降低了
降低硬碟IO,對於那些已經同步後資料把他分離到slave,這樣master就可以轉們做有關於的資料更新的寫操作,完全分離了master的讀。
動態緩衝是講使用者請求比較頻繁的動態資料緩衝到memcached中,使得後續的訪問使用者可以直接從memcached中取資料
replication容量:
是指:replication延遲程度、
將replication暫停一段時間(M),再重新開啟,並觀察slave多久可以達到於master一致(N)
replication容量=N:M
建議保持容量在3倍以上,即1:3 (1小時的M,20分鐘的N)
多線程傳輸二進位日誌:
mysql5.6開始支援多線程方式傳輸二進位日誌
只能工作在GTIDs 模式下
只有對不同的庫執行的操作才能採用多線程傳輸。同一個庫不同表的操作只能單獨用單進程傳輸。
my.cnf
[mysqld]
slave-parallel-workers=N 預設是0 表示不開啟 線程數
N 根據CPU的核心數來決定,幾核就寫幾,和資料庫的數量一一對應,幾個庫就是幾個線程來傳輸二進位日誌 ,qps上萬的話,多線程傳輸會有很明顯的效能提升
本文出自 “crazy_sir” 部落格,請務必保留此出處http://douya.blog.51cto.com/6173221/1606236
如何提升mysql replication的效能&&多線程傳輸二進位日誌