MySQL MMM是一種MySQL高可用性的解決方案,其原理是通過(guò)多主復(fù)制來(lái)實(shí)現(xiàn)自動(dòng)切換和負(fù)載均衡。
MMM由3個(gè)角色組成:monitor、master和standby。Monitor通過(guò)對(duì)每個(gè)MySQL實(shí)例進(jìn)行心跳檢測(cè)來(lái)監(jiān)控MySQL的狀態(tài)。
monitor { nodes { node1 { host = "127.0.0.1" port = 3306 ... } node2 { host = "127.0.0.2" port = 3306 ... } } }
當(dāng)其中一個(gè)MySQL實(shí)例出現(xiàn)問(wèn)題時(shí),Monitor會(huì)將該節(jié)點(diǎn)的狀態(tài)設(shè)置為“失效”,并自動(dòng)將該節(jié)點(diǎn)上的數(shù)據(jù)同步到其他節(jié)點(diǎn)上。這些節(jié)點(diǎn)會(huì)在請(qǐng)求中被平均分配,從而實(shí)現(xiàn)負(fù)載均衡。
master { ... } standby { ... repl_user = "repl_user" repl_password = "repl_password" master = "127.0.0.1:3306" }
Master角色處理所有寫操作,并將數(shù)據(jù)傳輸?shù)剿蠸tandby節(jié)點(diǎn)。當(dāng)Master節(jié)點(diǎn)故障時(shí),某個(gè)Standby節(jié)點(diǎn)會(huì)自動(dòng)被提升為新的Master節(jié)點(diǎn)。
當(dāng)網(wǎng)絡(luò)閃斷或MK-Heartbeat進(jìn)程出現(xiàn)故障時(shí),MMM會(huì)觸發(fā)自動(dòng)故障轉(zhuǎn)移過(guò)程。在轉(zhuǎn)移過(guò)程中,某個(gè)Standby節(jié)點(diǎn)會(huì)被選舉為新Master,并將所有寫操作重定向到新的Master節(jié)點(diǎn)。
heartbeat { device = "/dev/eth0" interval = 1 script "pidof mysqld >/dev/null || service mysql start >/dev/null" }
因此,MySQL MMM可以實(shí)現(xiàn)高可用性、自動(dòng)切換和負(fù)載均衡,有效保證MySQL系統(tǒng)的穩(wěn)定性和可靠性。