這是一篇雜談…………
前文介紹單節(jié)點寫的雙主結(jié)構(gòu),和failover。
后文…………就當(dāng)個段子看看吧,是談?wù)撋畹碾s談。
在MySQL HA方案中,有一個基于復(fù)制的簡單架構(gòu),需要三臺MySQL實例,正常的情況下,結(jié)構(gòu)是這樣的,其中紅色的箭頭代表寫請求。
可以把它叫作“單節(jié)點寫主主復(fù)制”。
注,此處為簡化,Proxy的存在被略去。
簡單的介紹一下這個結(jié)構(gòu):
雖說是雙主,但此處的復(fù)制結(jié)構(gòu)為單節(jié)點寫,按Oracle Dataguard的說法:
即M1作為真正的Primary,而M2作為Standby,S作為Primary的從庫。
假設(shè)M1和M2和S為姓名,那么Primary和standby就是它的職能……
而Client在此處作為三臺實例存在的必要,因為有Client的業(yè)務(wù)請求,才有M1、M2和S的存在。
那么這三臺實例(或者說三個數(shù)據(jù)庫成員)在這樣的架構(gòu)中,起到什么作用呢?
M1:作為Primary,一直在頂著client給它的各種請求,包括寫,也包括讀。
M2:當(dāng)M1出現(xiàn)故障的時候,作為Standby的M2會頂替M1,搶占VIP,此時M2的開始接收client給它的讀寫請求。
S:它的作用……就比較悲慘了,它是不重要但可能又不能少的:
可能它要需要為Primary分擔(dān)讀請求的壓力……
可能它硬件配置也不如M1或者M(jìn)2……
可能它會每天被拿來做備份,承擔(dān)高密集的IO壓力……
可能還會被當(dāng)做部分?jǐn)?shù)據(jù)不一致的主要
最最最慘的是,這臺slave:
永遠(yuǎn)是M1或者M(jìn)2的slave……
永遠(yuǎn)是被設(shè)置上read_only=1,super_read_only=1的存在……
連給Client讀寫請求的賬戶都不需要創(chuàng)建。
也就是說,這臺實例永遠(yuǎn)不能成為Primary。
當(dāng)M1出現(xiàn)故障時,此時架構(gòu)圖就變成了:
(這個切換Primary的過程被稱作failover)
當(dāng)M1出現(xiàn)問題的時候,比如宕機,自身進(jìn)程crash等等。
此時M2拿到了VIP,并宣告:“我就是Primary”,一般把這種“切換”叫做failover。
這個切換時間取決于keepalived的判斷(比如是否真的不可用,是否M2有落后等)。
此時,Client會開始將讀寫請求發(fā)送給新的Primary也就是M2。
S則會開始復(fù)制M2的數(shù)據(jù),繼續(xù)默默工作。
當(dāng)然,S則還是那個slave,繼續(xù)為了Client做著“犧牲”。
而且,以后的每一次failover,都和S關(guān)系不大。
本著嚴(yán)謹(jǐn),認(rèn)認(rèn)真真對這個HA方案做了介紹。
上面如果說是給DBA從業(yè)人員看的。那么下面就是我想說的,也是任何人都可以看的。先來看看上述“專業(yè)名詞”在translate.google.com上的解釋:
Primary(也可以叫做Master):adjective
主 main, primary
主要 main, major, primary, principal, chief
Standby(也可以叫做Secondary):noun
依靠 stand-by
支撐 bracing, brace, steady, foothold, stand-by
支援 stand-by
adjective
待用 stand-by, inactive
Slave(好像只能被叫做Slave):
noun
奴隸 slave
奴 slave
附件 annex, attachment, accessory, appendix, enclosure, slave
verb
拼命工作 slave
網(wǎng)站標(biāo)題:從MySQL雙主高可用架構(gòu),談戀愛關(guān)系。-創(chuàng)新互聯(lián)
網(wǎng)站URL:
http://weahome.cn/article/dcpdsc.html