收藏
在生產(chǎn)應(yīng)用中,某臺(tái)“Nginx+PHP+MySQL”接口數(shù)據(jù)服務(wù)器,扮演的角色十分重要,如果服務(wù)器硬件或Nginx、MySQL發(fā)生故障,而短時(shí)間內(nèi)無(wú)法恢復(fù),后果將非常嚴(yán)重。為了避免單點(diǎn)故障,我設(shè)計(jì)了此套方案,編寫了failover.sh腳本,實(shí)現(xiàn)了雙機(jī)互備、全自動(dòng)切換,故障轉(zhuǎn)移時(shí)間只需幾十秒。
一、雙機(jī)互備、全自動(dòng)切換方案:
(2)、默認(rèn)情況下,由主機(jī)綁定內(nèi)、外網(wǎng)虛擬IP,備機(jī)作為備份,當(dāng)主機(jī)的MySQL、Nginx或服務(wù)器出現(xiàn)故障無(wú)法訪問時(shí),備機(jī)會(huì)自動(dòng)接管 內(nèi)、外網(wǎng)虛擬IP。兩臺(tái)服務(wù)器都啟動(dòng)負(fù)責(zé)監(jiān)控、自動(dòng)切換虛擬IP的守護(hù)進(jìn)程/usr/bin/nohup /bin/sh /usr/local/webserver/failover/failover.sh 2>&1 > /dev/null & (3)、主機(jī)和備機(jī)上的MySQL服務(wù)器互為主從,互相同步。在主機(jī)處于活動(dòng)狀態(tài)(即由主機(jī)綁定虛擬IP)時(shí),讀寫主機(jī)的MySQL,寫到主機(jī) 的數(shù)據(jù)會(huì)同步到備機(jī);在備機(jī)處于活動(dòng)狀態(tài)時(shí),讀寫備機(jī)的MySQL,寫到備機(jī)的數(shù)據(jù)會(huì)同步到主機(jī)(如果主機(jī)上的MySQL死掉暫時(shí)無(wú)法同步,主機(jī)上的 MySQL恢復(fù)后,數(shù)據(jù)會(huì)自動(dòng)從備機(jī)上同步過來(lái),反之亦然)。 (4)、主機(jī)處于活動(dòng)狀態(tài)時(shí),每20秒會(huì)把/data0/htdocs/(網(wǎng)頁(yè)、程序、圖片存放目錄)、/usr/local /webserver/php/etc/(php.ini等配置文件目錄)、/usr/local/webserver/nginx/conf /(Nginx配置文件目錄)三個(gè)目錄下的文件通過rsync推送到備機(jī)服務(wù)器上的對(duì)應(yīng)目錄(增量推送,兩臺(tái)服務(wù)器上一樣的文件不會(huì)重復(fù)推送),反之如果 備機(jī)處于活動(dòng)狀態(tài)時(shí),每20秒會(huì)嘗試把文件推送到主機(jī)。rsync的配置文件見兩臺(tái)服務(wù)器的/etc/rsyncd.conf,rsync守護(hù)進(jìn)程的啟動(dòng) 命令為rsync --daemon 3、自動(dòng)切換流程 (2)、備機(jī)綁定虛擬IP后,會(huì)發(fā)送ARPing包給內(nèi)、外網(wǎng)網(wǎng)關(guān),通知網(wǎng)關(guān)更新虛擬IP的MAC地址為備機(jī)的MAC地址,從而保證了切換后能夠通過虛擬IP及時(shí)訪問到備機(jī)。 (3)、如果主機(jī)的MySQL、Nginx啟動(dòng)起來(lái),全部恢復(fù)正常訪問,主機(jī)上的failover.sh守護(hù)進(jìn)程會(huì)檢測(cè)主機(jī)上的MySQL數(shù)據(jù) 是否已經(jīng)完全從備機(jī)上同步過來(lái)。如果同步延遲時(shí)間為0,主機(jī)會(huì)自動(dòng)接管內(nèi)、外網(wǎng)虛擬IP,并發(fā)送ARPing包給內(nèi)、外網(wǎng)網(wǎng)關(guān),而備機(jī)也會(huì)自動(dòng)摘除內(nèi)、外 網(wǎng)虛擬IP。 (4)、整個(gè)切換流程均由failover.sh自動(dòng)完成,無(wú)需人工處理。 4、注意事項(xiàng)(很重要): (2)、/data0/htdocs/目錄內(nèi)任何用ln -s建立的軟連接,rsync不會(huì)自動(dòng)同步,如果在一臺(tái)服務(wù)器上建了軟連接,需要手工在另外一臺(tái)服務(wù)器上也建相同的軟連接。 (3)、如果要?jiǎng)h除/data0/htdocs/目錄內(nèi)的某些文件或目錄,需要先刪除處于活動(dòng)狀態(tài)(即綁定了虛擬IP)服務(wù)器上的文件或目錄,再刪除處于備用狀態(tài)服務(wù)器上的文件或目錄。 (4)、除了/data0/htdocs/(網(wǎng)頁(yè)、程序、圖片存放目錄)、/usr/local/webserver/php/etc /(php.ini等配置文件目錄)、/usr/local/webserver/nginx/conf/(Nginx配置文件目錄)三個(gè)目錄之外的其他 配置修改,需要在兩臺(tái)服務(wù)器上都做修改。
輸入一些內(nèi)容并保存:
(2)、啟動(dòng)rsync守護(hù)進(jìn)程
這里就不詳細(xì)寫出互為主從的配置過程了,如果不懂的朋友可以在Google上搜一下。有一點(diǎn)需要指出,my.cnf配置文件中請(qǐng)加上skip-name-resolve參數(shù),使用IP來(lái)進(jìn)行MySQL賬號(hào)驗(yàn)證。
3、主機(jī)、備機(jī)兩臺(tái)服務(wù)器負(fù)載監(jiān)控、虛擬IP自動(dòng)切換的failover.sh守護(hù)進(jìn)程
(2)、停止failover.sh守護(hù)進(jìn)程:
會(huì)顯示以下信息: root 15428 1 0 Nov17 ? 00:00:03 /bin/sh /usr/local/webserver/failover/failover.sh
發(fā)表于 @ 2008年11月27日 |
|
來(lái)自: shaolong007 > 《我的圖書館》