網絡架構容災
網絡是數字世界的基礎設施,沒有網絡的聯通,所有信息都無法交互,因此網絡架構的設計在應用系統中至關重要,特別是針對網絡架構的高可用及容災能力的設計,是業務在異常發生時,實現快速恢復、降低業務損失的關鍵。
云上網絡規劃設計
為滿足云上網絡安全、可擴展及高可用的需求,云上網絡規劃設計應滿足以下原則:
預留IP地址空間用于網絡擴容
在單個Region中,預留IP地址空間用于新建VPC;
在單個VPC中,預留IP地址空間用于新建交換機;
在單個交換機中,需要關注交換機的剩余可用IP地址數目。
規劃不同Region、可用區及業務系統的IP地址空間
在單個Region中,根據業務需求規劃不同的VPC,各VPC使用獨立的IP地址空間;
在單個VPC中,根據業務需求規劃交換機的可用區、IP地址空間;
部分云服務可能短時間占用較多IP地址,可考慮針對性規劃交換機避免IP地址資源不足。
云上網絡互聯方案設計
大型企業一般都會有多個部門,每個部門又由多個團隊組成,例如開發、測試、運維等。不同部門和團隊使用云產品時,一般會使用多個VPC把業務隔離,不同的VPC承載不同部門或團隊的業務。但不同團隊和部門間在特定場景下也需要互相訪問雙方的服務,這時就需要實現不同VPC間的互通。
實現不同VPC之間的互通在阿里云上有兩個主要方式:VPC對等連接及云企業網。
使用VPC對等連接兩兩互通:兩兩VPC之間需要互通的都需要配置對應的對等連接,在VPC數量較多的場景下,需要建立較多的對等連接,對網絡管理復雜度有比較高的挑戰。
使用云企業網實現fullmesh全互通:所有需要互通的實例,例如VPC/VBR/VPN等,都連接到云企業網CEN,云企業網CEN就像一個Hub一樣連接所有實例,任意一個VPC無論想與哪個VPC互通,都先經過CEN進行轉發路由,這樣降低了網絡配置的復雜度。而且云企業網上可以配置豐富的路由策略,限速規則等功能,可以更好的滿足大型企業的組網需求。
互聯網出口設計
在設計云上互聯網出口建設方案時,應滿足以下原則:
避免不必要的公網暴露
云服務器ECS使用固定公網IP或者彈性公網IP的時候,通過安全組限制端口暴露面;
用網絡云服務(如負載均衡SLB、公網NAT網關)為云服務ECS提供公網訪問入口,而非直接在云服務器ECS上使用公網IP。
合理使用公網NAT網關實現云上公網訪問
在安全訪問較嚴格的場景中,使用主機粒度SNAT規則而非交換機粒度SNAT規則;
同一SNAT規則中各EIP帶寬上限應保持一致;
根據業務需求使用不同的EIP配置不同的SNAT規則;
注意SNAT規則中EIP數目所能提供的并發連接數上限是否滿足業務需求。
合理使用共享帶寬提升云上公網訪問能力
建議不同流量模型的業務使用不同的共享帶寬實例,以便于配置不同的計費方式,降低業務成本;
建議為對公網帶寬有資源隔離需求的業務配置單獨的共享帶寬實例。
混合云互通高可用設計
隨著企業逐步將新增業務、對外業務系統部署至云上,一些原有自建IDC機房的企業就需要打通云上和IDC以組成混合云。同時部分企業為了進一步提升業務高可用,也會使用多家云廠商的資源,以實現單家云廠商故障時,業務的快速逃逸,因此不同云廠商之間的往來互通也是混合云組網的必要條件。
實現混合云組網建設應滿足以下原則:
鏈路冗余性:在混合云組網中需要至少兩條線路進行冗余或者主備負載,當一條鏈路異常的時候可以切換到另外一條線路。實現鏈路冗余大體可以分為以下幾類:
雙專線冗余:通過兩條專線與IDC/其它云互通,其中一條鏈路中斷可以快速切換到另外一條線路,需要注意在進行專線接入的時候盡可能選擇兩個不同的專線接入點提升高可用。如果為了滿足業務對延遲等需求,必須選擇相同接入點,也必須保證兩條專線在兩個不同的接入設備上,這樣即使有一臺設備故障導致其中一條線路異常時,也可以保證另外一條線路正常運轉。
專線/VPN主備:在物理專線、IPSec-VPN連接、BGP動態路由協議均正常運行的情況下,VPC實例可以通過物理專線和IPSec-VPN連接同時學習到本地IDC的網段,本地IDC也可以通過物理專線和IPSec-VPN連接同時學習到VPC實例的路由。系統默認通過物理專線學習到的路由的優先級高于通過IPSec-VPN連接學習到的路由,因此VPC實例和本地IDC之間的流量默認通過物理專線傳輸。當物理專線異常時,系統會自動撤銷通過物理專線學習到的路由,通過IPSec-VPN連接學習到的路由會自動生效,VPC實例和本地IDC之間的流量會通過IPSec-VPN連接進行傳輸;當物理專線恢復后,VPC實例和本地IDC之間的流量會重新通過物理專線進行傳輸,IPSec-VPN連接會重新成為備用鏈路。此方案相比雙專線冗余方案可節約成本,因IPSec-VPN成本較專線更低。但IPSec-VPN可承載流量上限一般不超過1Gbps,對于流量較小的業務可以采用此方案。
VPN冗余:如果本地數據中心擁有多個本地網關設備(本地網關設備上均擁有公網IP地址),用戶可以使用其中的2個本地網關設備分別與阿里云專有網絡VPC(Virtual Private Cloud)建立IPSec-VPN連接,每個IPSec-VPN連接關聯不同的VPN網關,實現本地數據中心與VPC之間鏈路的高可用,同時實現流量的負載分擔。本地數據中心可以分別通過兩個VPN網關學習到VPC的路由,本地數據中心去往VPC的流量可以同時通過這兩個VPN網關進行傳輸,實現流量的負載分擔。在其中一個VPN網關不可用時,當前VPN網關下的流量默認會自動通過另一個VPN網關進行傳輸,實現鏈路的高可用。VPC可以分別通過兩個VPN網關學習到本地數據中心的路由,但是VPC默認僅通過一個VPN網關(系統優先選擇實例ID較小的VPN網關)轉發從VPC去往本地數據中心的流量,在當前VPN網關不可用后,才會通過另一個VPN網關轉發流量(系統自動切換),因此VPC去往本地數據中心的流量可以通過兩個VPN網關實現鏈路的高可用,但不支持負載分擔。
帶寬容量設計:在選擇混合云互通方案的時候,一定要考慮互通的帶寬容量需求,不同的帶寬對方案的選型至關重要,例如大型企業對混合云流量需求較大,可達到數Gbps或者上百Gbps,此時就需要使用冗余專線的方案,而且需要確保冗余專線的水位保持在50%以下,達到或者接近50%就需要及時擴容,因為兩條專線都在50%的水位運行,當有一條線路異常的時候,流量就會全部負載到另外一條線路,導致另外一條線路水位達到100%無法承接所有流量從而影響業務。
鏈路快速倒換:如果企業已經實現了冗余線路打通IDC,也需要通過技術方案實現異常時的快速切換。
雙專線冗余:專線場景下可以使用BGP與IDC互通,也可以使用靜態路由。如果使用BGP建議配合BFD協議來實現冗余切換,當鏈路異常的時候BFD可以在毫秒級別探測到線路異常,快速撤銷異常路由,使流量轉發到正常線路。如果使用靜態路由方式與IDC互通,需要在云上配置健康檢查功能,通過健康檢查實時探測專線質量,如果探測失敗立即切換線路到正常線路。
專線/VPN主備:專線和VPN主備場景下,無法支持線路的冗余,而且只能支持專線為主,VPN為備,因為一般專線的可用性是高于VPN的。專線和VPN使用BGP協議學習IDC路由,當線路異常時專線BGP路由撤銷,路由經過VPN進行轉發。
VPN冗余:VPN的冗余方案與專線類似,也是通過BGP路由撤銷方式來快速倒換路由到正常鏈路。
業務服務高可用設計
現在企業對業務可用性要求越來越高,但是物理設備異常,應用異常,網絡抖動等情況無法避免。為應對異常情況就需要設計服務的高可用。如果業務只使用單臺ECS服務器對外提供服務,假設此臺ECS業務異常就會導致業務受損,而且恢復時間往往無法預估。但是如果配置多臺服務器直接對外提供訪問,業務上又需要將域名解析到多個ECS外網IP,當ECS服務很多的時候就會導致解析數量巨大不易于管理,而且不利于彈性擴縮容。
為實現服務高可用的目標可以使用阿里云負載均衡產品。負載均衡代理多臺后端真實的業務服務器對外服務,真實服務器不對外暴露,也無需配置公網IP。當某臺后端服務器異常時候,負載均衡可以自動的隔離服務器,使業務轉發到正常的服務器上繼續提供服務從而達到業務高可用的能力。
負載均衡實例采用集群部署,可實現會話同步,以消除服務器單點故障,提升冗余,保證服務的穩定性。其中四層負載均衡通過LVS(Linux Virtual Server)+ keepalived的方式實現,七層負載均衡通過Tengine(淘寶網發起的Web服務器項目,在Nginx的基礎上,針對有大訪問量的網站需求進行了優化)實現。
來自公網的請求通過等價多路徑路由(ECMP)到達LVS集群,LVS集群內的每臺LVS通過組播報文將會話同步到該集群內的其它LVS機器上,從而實現LVS集群內各臺機器間的會話同步。同時,LVS集群會對Tengine集群進行健康檢查,將異常機器從Tengine集群移除,保證七層負載均衡的可用性。
單CLB實例的高可用
為了向廣大用戶提供更穩定可靠的負載均衡服務,阿里云負載均衡已在大部分地域部署了多可用區以實現同地域下的跨機房容災。當主可用區出現故障或不可用時,負載均衡有能力在非常短的時間內(約30秒)切換到備可用區并恢復服務;當主可用區恢復時,負載均衡同樣會自動切換到主可用區提供服務。
為了更好的利用負載均衡的主備可用區機制,建議在支持主備可用區的地域創建負載均衡實例,即在購買負載均衡實例時選擇可用區類型為多可用區的地域。
當選擇CLB的主備可用區時,可以根據ECS實例的可用區分布進行選擇。將大部分ECS實例位于的可用區選擇為CLB的主可用區,以獲取最小的訪問延遲。但并不建議將全部ECS實例都部署在同一可用區內,建議在CLB的備可用區同時部署少量ECS實例,以保障在極端情況下(主可用區整體不可用時),切換到備可用區后仍舊可以正常處理負載均衡轉發的請求。
多CLB實例的高可用
如果業務對可用性的要求較高,單臺負載均衡實例自身的可用性保障機制可能無法滿足高可用需求。例如當網絡攻擊或配置錯誤等情況導致負載均衡實例不可用時,由于未出現可用區級故障,不會觸發負載均衡實例的可用區切換。此時,建議創建多個CLB實例,通過云解析DNS對訪問進行調度,或通過全球負載均衡解決方案實現跨地域容災備份。可以在一個地域內的多個可用區或多個地域內部署負載均衡實例和后端ECS實例,然后使用云解析DNS對訪問進行調度。
后端ECS實例的高可用
負載均衡通過健康檢查來判斷后端ECS實例的可用性。健康檢查機制提高了前端業務整體可用性,避免了后端ECS異常對總體服務的影響。
開啟健康檢查功能后,當后端某個ECS實例健康檢查出現異常時,負載均衡會自動將新的請求分發到其他健康檢查正常的ECS實例上,而當該ECS實例恢復正常運行時,負載均衡會將其自動恢復到負載均衡服務中。為了使健康檢查功能正常運作,需要開啟并正確配置健康檢查。
流量容災調度
隨著互聯網的快速發展,為保證業務的持續高可用,同城多活、異地多活已成為各企業的不二之選。服務設置多中心,中心內部多地址負載,是多數企業采用的常規做法。這種情況下,如何對流量進行有效控制以達到最佳的用戶訪問效率、部分地域業務異常如何快速業務容災到其他地域,業務具備全球流量調度以及容災能力變得尤為重要,列舉其中幾個典型場景。
業務需要實現用戶就近訪問服務中心減少網絡耗時。
服務中心多個IP地址如何實現負載均攤或者權重輪詢,且保證整體負載的穩定性。
服務中心某IP地址故障后,快速發現并實現隔離,地址恢復后自動添加至解析列表,完全無需人為干預。
當某中心故障發生時,快速切流到其他中心,減少中斷時間。
阿里云全局流量管理(Global Traffic Manager,簡稱GTM)可以有效解決上面幾個問題,它基于阿里云DNS入口調度和分布式云監控,旨在幫助企業實現用戶訪問應用服務的就近接入、高并發負載均攤、應用服務的健康檢查,并能夠根據健康檢查結果實現故障隔離或流量切換,方便企業靈活快速的構建同城多活和異地容災服務。
與傳統DNS解析相比,GTM主要具備如下特點:
地址池: 傳統DNS解析到單個地址,而GTM則引入地址池概念。如下圖中的PoolA/B/C所示,一個地址池代表一組提供相同應用服務,即具備相同運營商或地區屬性的IP地址或域名地址。通過地址池可對應用服務的IP地址進行統一管理。實現將終端用戶訪問解析到應用服務地址池(如下圖中序號1所示),既可實現高負載情況下的流量均攤,又可實現自定義流量分配。同時當地址池整體不可用時,可以做備份切換。
健康檢查: 依托于云監控強大的分布式監控功能,GTM新增了HealthCheck模塊,如下圖中序號2所示,從多個地區對地址池內的多個應用服務IP地址發起健康探測,目前已支持HTTP/HTTPS、TCP、ping三種方式。當地址池中地址發生故障時,HealthCheck模塊會準確的檢測到異常情況并與DNS交互(如下圖中序號3所示),摘除故障地址(如下圖中序號4所示),這樣用戶端會自動解析到可用的地址池(如下圖中序號5所示)。并當故障地址恢復時,自動恢復至解析返回列表。
訪問策略: 訪問策略旨在解決根據請求來源和地址池健康情況進行地址池切換的問題。既能做到地址池維度智能解析,又可實現故障自動切換功能。當地址池整體出現故障時,GTM會根據用戶自定義策略進行地址池分鐘級切換,并當地址池恢復時切回。
異地容災
下面以異地雙活為例介紹如何借助GTM實現快速容災切換。如下圖所示,某服務的用戶主要分為海外用戶和中國或中國內地用戶,后端服務采用一套部署方案。通過GTM對不同地區用戶請求進行智能調度,將用戶訪問請求流量路由至不同的接入服務點,即海外用戶訪問新加坡中心(Singapore),中國或中國內地用戶訪問杭州中心(CN-Hangzhou)。當某站點發生故障災難時,各接入站點自建互相備份,最終實現業務的高可用。
通過以下5個步驟接入GTM,實現異地容災:
全局配置:基礎配置,主要配置負載均衡策略、全局TTL、報警通知組等相關信息。
地址池配置:新建地址池Singapore和CN-Hangzhou。每個地址池中均配置該區域下多個服務IP,以及最小可用地址數量。當地址池存活地址數小于該地址池數量時,則地址池視為不可用。此外,根據全局配置中負載均衡策略自動實現流量分配。
開啟健康檢查:即對地址池中的IP地址配置健康檢查,開啟后可實現實時監測地址的可用性狀態。根據地址的可用性進行故障自動隔離,并通知相應報警組。當地址恢復后,自動添加至解析列表。此外,當地址池整體出現問題時,觸發默認地址池與備用地址池之間自動切換。能達到5分鐘內,90%流量的切換速度。
訪問策略配置:根據用戶的請求來源設置最終用戶訪問哪一個地址池。如圖所示,海外用戶希望訪問Singapore地址池,則需設置相應訪問策略,請求來源設置海外地區,默認地址池為Singapore,備用地址池設置CN-Hangzhou。則正常請求下,則海外用戶訪問Singapore中心,發生故障后會快速切換至CN-Hangzhou中心。
CNAME接入配置:需要將用戶訪問的主域名CNAME至全局流量管理的實例域名,才能最終實現對應用服務進行容災、智能接入。即將圖中的www.cloud-example.com CNAME到我們提供的接入域名。
配置完成后,我們將根據健康配置實時探測地址池中地址,當地址發生報警時,則根據下圖的流程進行判斷,實現容災切換,以上圖中IP地址A報警為例。由此可見,當默認地址池(Singapore)地址池可用時,則解析列表摘除地址A,當默認地址池整體不可用時則切換備用地址池(CN-Hangzhou),切換過程自動完成,并縮小時間至分鐘級。從而有效保證異地容災的切換效率。
容災預案
此外,全局流量管理新增的容災預案功能可以幫助用戶實現日常容災演練,或在應用服務出現故障時實現快速切換流量。容災預案支持批量地址池故障模擬及回滾,幫用戶驗證切換策略是否符合預期。