《雙機(jī)房災(zāi)備架構(gòu)搭建實(shí)踐》要點(diǎn):
本文介紹了雙機(jī)房災(zāi)備架構(gòu)搭建實(shí)踐,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
作為運(yùn)維哥,每逢佳節(jié)倍擔(dān)心,除了定期到機(jī)房貼符拜拜,我們還有什么辦法,保障我們的服務(wù)不受硬件故障的困擾呢.
對(duì)很多互聯(lián)網(wǎng)企業(yè)來(lái)說(shuō),服務(wù)長(zhǎng)時(shí)間停擺,意味著無(wú)法估量的損失.接下來(lái)我們介紹一個(gè)簡(jiǎn)單快捷的方法,搭建雙機(jī)房災(zāi)備服務(wù).當(dāng)業(yè)務(wù)所在機(jī)房發(fā)生網(wǎng)絡(luò)或者機(jī)器故障時(shí),能夠迅速轉(zhuǎn)移并恢復(fù)我們的服務(wù).
不同產(chǎn)品的組件和架構(gòu)差別很大.下面是基于lnmp的web站點(diǎn),最基本的雙機(jī)房災(zāi)備服務(wù)架構(gòu), 僅供參考.
M機(jī)房為主機(jī)房,S機(jī)房為冷備機(jī)房,滿(mǎn)足現(xiàn)有業(yè)務(wù),并且方便未來(lái)擴(kuò)展的前提下,我們盡可能把架構(gòu)設(shè)計(jì)得越簡(jiǎn)單越好.華麗而復(fù)雜的組件,通常也伴隨著可觀的維護(hù)成本.
web程序同步其實(shí)就是文件的同步,最簡(jiǎn)單的就是定時(shí)rsync.不過(guò)這個(gè)方式太古老,后來(lái)我們測(cè)試了lsyncd和sersync兩款基于inotify的實(shí)時(shí)同步工具.最終選定整體性能和穩(wěn)定性表現(xiàn)更好的lsyncd作為我們的代碼同步工具.
這里簡(jiǎn)單貼下適合我們使用場(chǎng)景的測(cè)試條件和結(jié)果:
測(cè)試結(jié)果如下:
lsyncd的官網(wǎng): https://github.com/axkibe/lsyncd
rsync daemon和lsyncd的安裝方法就不再贅述.這里給一個(gè)lsyncd同步web程序的參考配置(lua語(yǔ)法):
settings ?{ ? logfile = “/usr/local/lsyncd/logs/lsyncd.log”, ? statusFile = “/usr/local/lsyncd/logs/lsyncd.status”, ? maxDelays = 100, ? delay = 5, ? exitcodes = {[0] = “ok”, [1] = “again”, [2] = “die”}, ? maxProcesses = 5, ? statusInterval = 5 } — 同步到主機(jī) sync { ? ?default.rsync, ? ?source ? ?= “/opt/web/ser”, ? ?target ? ?= “rsy_user@19.68.111.222::ser_master”, ? — 排除隱藏文件及臨時(shí)文件,可以按具體需求修改 ? ?exclude={ “.*”, “*.tmp”, “*.bak”, “*.swp” }, ? ?rsync ? ? = { ? ? ? ?compress = false, ? ? ? ?archive = true, ? ? ? ?verbose = true, ? ? ?— _extra用于手動(dòng)指定rsync參數(shù),默認(rèn)建議設(shè)置超時(shí),避免rsync進(jìn)程卡死 ? ? ?_extra = {“–timeout=3600”}, ? ? ? ?password_file = “/usr/local/lsyncd/etc/ser_master.pas” ? ?} }
還可以把web服務(wù)端的配置文件(比如nginx vhost配置文件)也加到lsyncd自動(dòng)同步中,然后定義觸發(fā)重新加載配置的命令,這個(gè)就交給你自己發(fā)揮了.
mysql數(shù)據(jù)同步,是利用mysql雙向主從來(lái)完成的,俗稱(chēng)mysql主主同步.
兩個(gè)機(jī)房之間mysql數(shù)據(jù)同步,要考慮數(shù)據(jù)傳輸安全性和避免數(shù)據(jù)沖突.
(1) 數(shù)據(jù)傳輸安全性
可以參考之前我們的文章《遠(yuǎn)程訪(fǎng)問(wèn)mysql?教你為數(shù)據(jù)傳輸再加把安全鎖!》. 下面介紹基于ssl進(jìn)行數(shù)據(jù)加密同步.
首先使用openssl或者easyrsa配置生成ca、私鑰和證書(shū)等.生成好證書(shū)后,配置到my.cnf中:
master
[mysqld] server-id=1 ssl ssl-ca=/opt/ssl/cacert.pem ssl-cert=/opt/ssl/srv.crt ssl-key=/opt/ssl/srv.key
slave
[mysqld] server-id=2 ssl ssl-ca=/opt/ssl/cacert.pem ssl-cert=/opt/ssl/srv.crt ssl-key=/opt/ssl/srv.key
(2) 避免數(shù)據(jù)沖突
mysql采用奇偶分離的配置,表在設(shè)計(jì)時(shí)以自增id為主鍵,一邊寫(xiě)入id為奇數(shù),一邊寫(xiě)入為偶數(shù),即使發(fā)生兩邊同時(shí)寫(xiě)入的情況,也能保證主鍵不沖突.在前面的配置,繼續(xù)增加下面內(nèi)容:
master
[mysqld] ##自動(dòng)增量為2,允許最多2臺(tái)數(shù)據(jù)庫(kù)實(shí)例加入. auto_increment_increment = 2 ##表示偏移值,每個(gè)數(shù)據(jù)庫(kù)的偏移值必須唯一,且在1和auto_increment_increment之間. auto_increment_offset ? = 1
slave
[mysqld] auto_increment_increment = 2 auto_increment_offset ? = 2
稍有點(diǎn)用戶(hù)量的網(wǎng)站,web程序直接讀寫(xiě)mysql,機(jī)器很快會(huì)撐不住,這時(shí)就少不了緩存技術(shù)的使用.
我們選用安裝簡(jiǎn)單(rpm方式)、配置管理(web方式)同樣簡(jiǎn)單的couchbase,而且完全兼容memcached的使用.
官網(wǎng)下載鏈接:https://www.couchbase.com/downloads
安裝方案參考官網(wǎng)文檔.
安裝完成后,可以看到我們兩個(gè)機(jī)房?jī)膳_(tái)機(jī)器在同一個(gè)集群里,緩存數(shù)據(jù)就能夠相互同步了.
異地服務(wù)兩個(gè)節(jié)點(diǎn):
memcached實(shí)例:
dnspod為我們解析站點(diǎn)域名,同時(shí)有一個(gè)D監(jiān)控功能,在我們的雙機(jī)房災(zāi)備中,起到自動(dòng)進(jìn)行故障轉(zhuǎn)移,切換到其他正常運(yùn)行機(jī)器的作用.
到這里,我們已經(jīng)明白搭建雙機(jī)房災(zāi)備服務(wù)的關(guān)鍵步驟.不過(guò)想想這套冷備方案也有一些明顯的缺點(diǎn),比如
(1) 備機(jī)一直空跑,雖然可以拿來(lái)做定時(shí)數(shù)據(jù)備份,但是否還是有點(diǎn)浪費(fèi)資源.
(2) 如果運(yùn)氣不錯(cuò),一年半載都沒(méi)切換過(guò)備機(jī),如果下次真的需要切換時(shí),是否有信心立即切換過(guò)去.
(3) dns切換期間,域名解析大概需要5分鐘生效時(shí)間,其實(shí)用戶(hù)是受影響的,可否把影響再繼續(xù)降低些.
要解答這些問(wèn)題,我們需要更高級(jí)的設(shè)計(jì)架構(gòu).冷備讓我們心中有了保障,然而異地雙活才是優(yōu)雅的遠(yuǎn)方.
在異地雙活改造時(shí),一開(kāi)始想著把冷備激活就可以了.然后發(fā)現(xiàn)有些業(yè)務(wù)必須依賴(lài)于兩地?cái)?shù)據(jù)的強(qiáng)一致性.就算拉個(gè)專(zhuān)線(xiàn),或者提供多線(xiàn)路的切換容災(zāi),但因?yàn)榫W(wǎng)絡(luò)延時(shí)的不穩(wěn)定,數(shù)據(jù)的一致性還是沒(méi)法絕對(duì)保證.甚至有可能被利用來(lái)惡意重復(fù)刷取站點(diǎn)資源.
在茫然無(wú)解的時(shí)候,因?yàn)橐粋€(gè)不完美思想的指導(dǎo),重新找回了方向.接下來(lái)將從這幾個(gè)方面進(jìn)行異地雙活的實(shí)現(xiàn):
(1) 從業(yè)務(wù)層面,梳理出重點(diǎn)核心業(yè)務(wù),優(yōu)先考慮核心業(yè)務(wù)的異地雙活.
(2) 再按雙活實(shí)現(xiàn)難易程度,把既核心又容易實(shí)現(xiàn)的業(yè)務(wù)排在第一位實(shí)現(xiàn).
(3) 同時(shí)一個(gè)業(yè)務(wù)流程下來(lái),中間涉及的小業(yè)務(wù)模塊也跟著實(shí)現(xiàn)異地雙活,保證核心流程在一個(gè)地方就能獨(dú)立順利完成.
舉個(gè)例子,有一個(gè)站點(diǎn)包括注冊(cè)、登錄、充值3個(gè)服務(wù).
從業(yè)務(wù)量和影響面來(lái)分析,我們發(fā)現(xiàn)登錄請(qǐng)求占90%以上,然后登錄剛好也是最不依賴(lài)于數(shù)據(jù)實(shí)時(shí)一致性的業(yè)務(wù),用戶(hù)注冊(cè)完,資料就開(kāi)始進(jìn)行同步了,以后再登錄的時(shí)候,數(shù)據(jù)早已經(jīng)兩地同步完成,就算在兩地快速切換,最多因?yàn)榫彺娴膩G失,只是要求用戶(hù)重新登錄一次,不會(huì)出現(xiàn)登錄失敗的情況.
而注冊(cè)或者充值平時(shí)業(yè)務(wù)量小,如果做了雙活,在出現(xiàn)故障,快速進(jìn)行兩地切換時(shí),可能存在注冊(cè)信息沖突不一致,或者兩地重復(fù)充值的情況.所以平時(shí)我們只要給登錄、充值做好冷備服務(wù)就可以了.
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/1962.html