成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

MySQL主從同步加速的方案-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“MySQL主從同步加速的方案”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“MySQL主從同步加速的方案”吧!

成都創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元大慶做網(wǎng)站,已為上家服務(wù),為大慶各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108

一、問題起源
MySQL的主從同步一直有從庫延遲的問題,背景資料網(wǎng)上很多,原因簡單描述如下:
    1、 MySQL從庫上有一個IO線程負責(zé)從主庫取binlog到寫到本地。另外有一個SQL線程負責(zé)執(zhí)行這些本地日志,實現(xiàn)命令重放;
   2、 正常網(wǎng)絡(luò)狀況下IO線程沒有性能問題(這個待會會用到),問題是SQL線程只有一個,更新速度跟不上。所以經(jīng)常會看到從庫的CPU idle很高,但同步性能就是上不去。
 
二、方案雛形
單線程的SQL線程是造成這個問題的主要原因。比較直接的想法是把它改成多線程版本,這個據(jù)說官方版本開發(fā)中,其實我們也有一個這樣的patch,但是直接寫大片代碼在線上提供服務(wù)的slave機器上這種事兒,都會因為擔(dān)心穩(wěn)定性而很難推動(寫patch的和運維的同學(xué),你們懂的)。
所以打算用一個“第三方”工具中轉(zhuǎn),來實現(xiàn)多線程同步?;窘Y(jié)構(gòu)如下:
 
       說明:
1、這些transefer從master上各自同步一部分的數(shù)據(jù),分別獨立更新slave。多進程還是多線程均可。
2、Transfer與master之間異步更新日志,transfer與slve之間同步更新數(shù)據(jù)
3、從這可以看出這個方案的缺點之一:更新能夠被獨立分開。比較直觀的想法是,按照表分。
 
三、關(guān)于transfer
作為這個關(guān)鍵的轉(zhuǎn)發(fā)工具transfer,需要提供如下功能:
1、能夠指定同步master中的哪部分?jǐn)?shù)據(jù),并且能夠方便地修改這個配置以應(yīng)對master的加表需求;
2、支持stop slave、start slave。支持快速切換到新主庫的change master命令。
3、能夠記錄讀取點,transfer自己重啟或master重啟后能夠按照記錄點繼續(xù)讀后面的binlog;
4、能夠記錄分發(fā)點,transfer自己重啟或slave重啟后能夠按照記錄點繼續(xù)同步給slave
用起來就會發(fā)現(xiàn)還有好多要求。。。
 
四、方案實現(xiàn)
Transfer的這么多功能,自己造輪子就累了。這里直接用MySQL來充當(dāng)此角色。為了方便描述,下文還將之稱為transfer。Transfer更新slave在功能上可以使用federated引擎,但由于其糾結(jié)的實現(xiàn)導(dǎo)致性能上達不到要求,因此在MySQL框架層中作了一點修改――讀到同步日志后,直接發(fā)送給slave。
方案簡單描述如下:
    1、 Slave機器上搭另外的若干個MySQL(transfer),將其設(shè)為Master的從庫,且設(shè)置replicate-do-table, 每個transfer承擔(dān)一部分的表。
   2、 所有Transfer的更新目標(biāo)都設(shè)置為slave,其更新方式是讀到日志后直接_real_query執(zhí)行到slave上。
從這可以看出這個方案的缺點之二:只能支持statement格式的同步方式。其實row也能支持,后面再說。
 
五、仍然延遲?
在transfer放棄federated引擎改用直接發(fā)送后,性能提升不少,從庫同步性能增加一倍,但從本文第一個圖的數(shù)據(jù)對比就知道,延遲還很大。
發(fā)現(xiàn)這個時候slave的機器cpu已經(jīng)很忙了,idle 20%一下――這個算是好消息,總比idle很高但性能上不去好。
實際上是因為每個transfer,雖然設(shè)置只同步其中的部分表,但在實現(xiàn)上是IO線程把master上的所有命令都備份到本地,然后在SQL線程執(zhí)行的時候再判斷,若不符合replicate-do-table,再放棄。
這樣存在的問題,是n個transfer,磁盤寫了n倍,更嚴(yán)重的是導(dǎo)致SQL線程空轉(zhuǎn)。
我們上文提到整個流程中IO線程是比較空閑的,因此修改IO線程邏輯,在寫入磁盤前先判斷,若不符合本transfer的replicate-do-table設(shè)置,不寫盤,直接放棄。
六、效果

從庫的QPS由于線程切換會有抖動,但總的執(zhí)行時間與主庫相同。從庫的cpu idle下降,與主庫幾乎同時恢復(fù)到100。
 
七、小結(jié)
描述完了,總結(jié)一下,方案的代價:
1、要求在slave機器上多配置n個transfer(是否在從庫上均可)
2、目前只能支持statement的binlog格式,實際上row可以支持,方案定了,開發(fā)計劃中。
3、跨表更新的語句,會按照其更新的第一個表,分發(fā)到一個transfer,沒有重復(fù)更新的問題,但有時序性問題。
 
方案的好處:
1、功能比較齊全。直接使用MySQL,原有的管理功能基本都能用,主庫從庫重啟/換庫的代價比較小。
2、開發(fā)量小,只在transfer上修改兩處,不包括配置讀取部分,300行以內(nèi)
3、風(fēng)險相對小。不直接修改master和slve上的代碼,線上比較容易接收。

到此,相信大家對“MySQL主從同步加速的方案”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)建站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

新聞標(biāo)題:MySQL主從同步加速的方案-創(chuàng)新互聯(lián)
文章地址:http://jinyejixie.com/article26/hejcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、網(wǎng)站策劃、微信小程序、Google小程序開發(fā)、做網(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)

外貿(mào)網(wǎng)站建設(shè)
辉县市| 嘉禾县| 广安市| 金华市| 鄂温| 漯河市| 青川县| 永城市| 越西县| 儋州市| 临江市| 曲阜市| 巴林左旗| 陈巴尔虎旗| 尚志市| 霍林郭勒市| 新疆| 普格县| 普格县| 饶阳县| 清远市| 布尔津县| 贡觉县| SHOW| 资溪县| 社会| 马公市| 安达市| 新沂市| 潜江市| 南宁市| 犍为县| 新蔡县| 南雄市| 惠来县| 濮阳市| 漠河县| 舒城县| 吉林省| 山丹县| 安化县|