高可用是通過某種協議或技術,協調服務端為客戶端提供持續性服務。

歸納為三種方式:
客戶端對服務端服務進行健康管理,自動容錯
服務端通過容錯或網關協議提供統一的服務地址
服務端通過高可用模塊通知客戶端更新服務地址。
從客戶端調用服務端維度來考慮,高可用就是 客戶端調用服務端持續可用,兩種方法,一種在客戶端來做,一種在服務端來做:
客戶端調用多個服務端地址,客戶端通過自動容錯服務端,保證高可用。
客戶端調用一個服務端地址,服務端通過容錯協議提供高可用地址,保證高可用。
客戶端調用一個服務端地址,服務端通過高可用模塊檢測故障,通知客戶端更新服務地址,保證高可用。
一次完整的服務請求過程包括以下組件:
DNS
LB
Webapp
Service
DB
應用整體高可用需要每層每個組件高可用。
我們依次分析各層各個組件的高可用情況。
客戶端客戶端為邊緣節點,是最終使用者。
客戶端配置主備DNS地址,主DNS故障時,請求被DNS
客戶端調用一個負載均衡地址,負載均衡保證該地址高可用
外部與下游服務
主備DNS
高可用LB
DNS通過提供主備DNS,提供域名解析服務的高可用,同時輔以本地DNS緩存。
對外提供主備DNS地址
主DNS故障時,備DNS提供服務。
通過 區域傳輸技術 實現主備配置數據同步。
外部與下游服務
主備DNS
https://www.rfc-editor.org/rfc/rfc1995https://www.rfc-editor.org/rfc/rfc1995 Incremental Zone Transfer in DNS傳統LB
https://www.rfc-editor.org/rfc/rfc5936 DNS Zone Transfer Protocol (AXFR)
DNS 客戶端解析超時
這里指內網負載均衡
傳統LB一般采用 Keepalived+反向代理 方案, 通過Keepalived基于 VRRP協議 實現負載均衡的高可用。
對外提供VIP
Keepalived負載負載均衡高可用
Keepalived通過配置優先級選擇主Keepalived實例
主實例故障時,選擇優先級高的備實例為主實例
主實例周期性的向備實例發送VRRP通告報文
備實例三個周期間隔沒有收到通告報文,備實例發起VRRP通告報文,根據優先級,選擇優先級高的作為主實例。
Keepalived對反向代理進行健康管理,保證反向代理可用性
反向代理對后端實例進行健康檢測,保證后端服務可用性
外部與下游服務
多實例Webapp
https://datatracker.ietf.org/doc/rfc3768/https://datatracker.ietf.org/doc/rfc3768/ Virtual Router Redundancy Protocol (VRRP)騰訊CLB
https://datatracker.ietf.org/doc/rfc5798/ Virtual Router Redundancy Protocol (VRRP) Version 3 for IPv4 and IPv6
騰訊CLB集群由多臺LD組成,通過OSPF協議保證集群高可用性。
若一臺LD發生故障,OSPF協議可以保證10秒以內把LD服務器從集群中剔除。
跨集群通過上層輪詢來保證可用性。
騰訊支持機架級容災。機房級(跨AZ)容災在內測中。阿里SLB
https://www.rfc-editor.org/rfc/rfc2328 OSPF Version 2
阿里SLB,通過BGP協議實現跨可用區容災,通過云解析DNS等產品實現跨地域容災。
以同一個地域雙可用區為例,即同城雙機房:
每個機房部署各兩個節點
兩個機房共用負載均衡配置信息,通過配置大小段路由控制流量指向。
當一個機房故障時,通過BGP協議自動秒級收斂路由,外部訪問的流量會被轉發給另外一個機房的SLB。
阿里SLB支持機房級容災。
https://www.rfc-editor.org/rfc/rfc4271https://www.rfc-editor.org/rfc/rfc4271 A Border Gateway Protocol 4 (BGP-4)Webapp
https://help.aliyun.com/document_detail/67915.html 產品高可用
Webapp負責業務頁面層,掛載到LB后邊。
對外提供多個實例地址
實例通常為無狀態可橫向擴展
單個故障不影響服務,負載均衡會對其進行健康檢測,自動剔除與恢復
外部與下游服務
服務注冊與發現
多實例Service
服務注冊與發現作為關鍵組件,需要提供高可用注冊與發現服務Service
不同的服務注冊與發現的高可用大同小異,使用到的關鍵組件均做到高可用。
除了部署多實例,上游服務一般會緩存服務發現的結果,即使服務注冊與發現系統出現短暫的故障,也對業務影響較小。
Service負責業務層,提供專項服務。
對外提供多個實例地址
實例通常為無狀態可橫向擴展
單個故障不影響服務,客戶端與服務注冊與發現組件會對service進行健康管理,保證Service服務整體可用
外部與下游服務
Service
DB
緩存
消息中間件
Service間調用與webapp調用service相同傳統DB
數據庫用于保存服務數據,是業務的核心。
以MySQL為例,采用MySQL+Keepalived方案提供高可用
對外提供VIP
默認主實例提供讀寫,主實例故障Keepalived漂移VIP到備實例,備實例提供讀寫服務
主備通過半同步保證數據一致性,網絡波動時降級為異步復制,存在數據不一致的情況
主備切換,可能因為網絡問題出現數據丟失的問題。騰訊云 云數據庫 MySQL
網絡出現分區,存在腦裂的情況,腦裂導致數據庫多主,業務數據出現錯亂,需要盡量避免這種情況
建議當出現主實例停止服務,網絡分區等故障時,備實例提供只讀服務,避免因多主導致業務數據錯亂,較難恢復的情況。
數據強一致性問題,可以考慮采用基于分布式一致性協議的新數據庫系統
騰訊云數據庫MySQL內網使用IP端口訪問,外網使用域名端口訪問。
資料較少,可能與實際情況不符,僅供參考。
內網訪問路徑為:SLB,MySQL
外網訪問路徑為:DNS,SLB,MySQL
Proxy訪問路徑為:Proxy MySQL
DNS通過主備提供高可用
SLB通過OSPF內部網關協議,提供高可用
MySQL主實例故障后,自動檢測,自動故障遷移到備實例,DNS、SLB地址不變
Proxy
采用集群架構部署,多節點保證故障平滑轉移。
可以通過跨可用區部署的方式來提升數據庫代理的可用性。
數據庫訪問路徑為:DNS,SLB,Proxy,RDS
對外提供唯一DNS地址訪問,應用應關閉相關DNS緩存
高可用模塊檢測到主數據庫實例故障時,切換到備數據庫實例服務,DNS地址不變
資料較少,可能與實際情況不符,僅做參考。總結
把RDS當成一個應用來看,每一層都需要保證高可用
DNS通過主備提供高可用
SLB通過網關協議BGP提供高可用
獨享代理是高可用架構,擁有2個節點,并且出現故障時會自動切換到備節點。
RDS通過高可用模塊檢測故障,通知上層更新后端地址,實現RDS高可用(有狀態應用上層掛載一個后端地址,與普通無狀態應用不同,無狀態應用上層直接掛載多個后端地址)
總結以上高可用方案,發現以下特點
多實例
客戶端連接多個地址,服務端提供多個連接地址。
客戶端對服務端進行健康管理,自動容錯
應用客戶端操作系統對DNS服務進行健康管理
Keepalived對反向代理服務進行健康管理
反向代理對Webapp服務進行健康管理
Webapp對Service服務進行健康管理
Service對DB服務進行健康管理(Service使用mysql connector連接多個TiDB Server啟用故障轉移)
同時可以結合中間服務(服務注冊與發現),提高服務容錯效率(服務發現通知客戶端隔離某個服務)。
客戶端連接一個地址,服務端通過某種協議與技術,提供一個地址,保證其高可用。
Keepalived通過VRRP協議,保證VIP高可用
騰訊CLB通過OSPF協議,保證VIP高可用
阿里SLB通過BGP協議,保證VIP高可用
阿里RDS通過HA模塊,通知上層更新連接地址,保證服務高可用(類似于服務注冊與發現)
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
分享文章:高可用技術分析-創新互聯
轉載來于:http://www.yijiale78.com/article48/cspcep.html
成都網站建設公司_創新互聯,為您提供App設計、網站內鏈、微信公眾號、定制網站、網站收錄、全網營銷推廣
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯