作者:MeshCloud脈時云公有云架構師 鄧軍
一、引言
在多云和全球化線上業務背景下,為統一業務入口、同時減少對現有業務環境的侵入性,我們建議采用單NLB多端口的方式實現。配置簡單,低成本、高可用,非常適合對內業務系統的架構部署。
二、技術架構
三、技術簡介
本方案主要解決同一個VM 對外提供多種對外應用服務,前端采用Network Load Balancing(Region后端服務)+ UMIG+GCE(多可用區) 實現,特定業務系統采用靜態IP對外提供服務。其中主要涉及幾個方面的概念:
(1)Network Load Balance與TCP Proxy Load Balance的區別;
(2)UMIG非托管實例組的prot mApping的使用;
(3) Backend Service會話親和性的設置;
(4)后端服務
Connection-draining-timeout,連接排空時間的設置。
四、目標
成功訪問NLB同一個靜態IP對應不同的后端服務,主要是解決無狀態服務的跨zone可用性問題。
五、準備工作
5.1 在同VPC 下的同Region不同Zone 建立相同后端服務的GCE實例,GCE 上會提供不同的對外服務。
5.2 創建Instance Group(類型為UMIG,非托管實例組),將GCE 與UMIG進行綁定,并完成基于不同端口的服務Port Mapping(端口映射)
(1)UMIG “admas-us1a”配置示例,“admas-us1c”配置一樣。
5.3 創建用于服務的健康檢查規則,并注意檢查網絡防火墻規則對于HC(Heath Check)端口的放行。
說明:一個Load Banlance后端服務只能創建一個健康檢查
5.4 創建基于不同服務的對外服務靜態IP 地址
說明:提前保留的Static IP Address 35.226.123.74
六、實施步驟
- 創建TCP NLB-選擇負載均衡器
說明:NLB僅支持Region級別,若選擇Multiple Regions則會創建TCP Proxy Load Balancer。而TCP Proxy Load Balancing 有前端固定端口限制。
- 配置后端服務-Instance Group
說明:(1)定義NLB名稱;(2)選擇NLB作用的Region;(3)選擇預先創建好的UMIG。
此處分別創建2個同步可用區的UMIG主要是實現同一服務分布在不同Zone,實現業務高可用性。
- 配置后端服務-會話保持
說明:(1)選擇預先創建好的Health Check服務;(2)設置會話親和性為Client IP;(3)設置連接排空時間為300s。
- 客戶端 IP、目的地 IP (CLIENT_IP),來源 IP 地址和目的地 IP 地址的 2 元組哈希
- Connection-draining-timeout,連接排空過程旨在確保在從實例組中移除虛擬機或從區域 NEG 中移除端點時,為進行中的現有請求留出一定的時間,讓這些請求可以完成。超時持續時間必須介于 0 到 3600 秒之間(含邊界值)
- 配置前端服務-外部IP和Port
說明:(1)網絡層級建議選擇“Premium”;(2)選擇IP地址為預留的靜態IP或新建靜態IP;(3)選擇端口為“Multiple”;(4)設置多端口,80,8080,22。
- 檢查NLB狀態及是否正確配置
(1)檢查NLB服務是否正常
(2)檢查后端服務健康檢查是否正常。
七、驗證
驗證NLB 訪問,通過NLB 的外部IP 訪問后端服務
(1)驗證22端口訪問
(2)驗證80端口訪問
(3)驗證8080端口訪問
八、參考鏈接
【1】Cloud Load Balancing 后端服務概覽
https://cloud.google.com/load-balancing/docs/backend-service
【2】基于后端服務的外部 TCP/UDP 網絡負載平衡概覽
https://cloud.google.com/load-balancing/docs/network/networklb-backend-service
【3】健康檢查-SSL 和 TCP 成功標準
https://cloud.google.com/load-balancing/docs/health-check-concepts#criteria-protocol-ssl-tcp
【4】啟用連接排空
https://cloud.google.com/load-balancing/docs/enabling-connection-draining
【5】防火墻規則
https://cloud.google.com/load-balancing/docs/network/networklb-backend-service#firewall_rules
【6】Multiple port numbers for a named port
https://cloud.google.com/compute/docs/instance-groups/creating-groups-of-unmanaged-instances#multiple_port_numbers_for_a_named_port