AWS ELB NLB (Network Load Balancer) 創建 配置
20180723 Chenxin
ELB所在位置與創建前的准備
說明
ELB在EC2的導航欄中.
ELB分為3種,1為7層協議的HTTP和HTTPS.2為4層.3為old的方式的(aws最初的ELB).
這里我們一般選擇network Load Banlancer(NLB).
建議您啟用多個可用區。
原理說明: https://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html
准備
提前規划好對應的VPC,子網(3個子網分別位於a,b,c3個可用區),負載均衡的后端實例(a,b,c3個可用區各1個實例).
可以提前申請EIP(不申請的話,ELB也會拿到1個對應的DNS名稱,客戶端也是可以使用的).默認不用給靜態EIP,浪費資源.
完成ELB后,創建對應的ELB后端端口偵聽失效的報警機制,比如處於故障狀態的實例數量=>1,就觸發報警.
ELB的創建
EC2中的"負載均衡"分為2個創建步驟.
首先是"負載均衡器"的配置,然后是"目標群組".
創建中的步驟與具體參數說明
第一步,配置負載均衡器
負載均衡器管理的是:
名稱(自命名的負載均衡器名稱),
DNS(該ELB對應的自動生成的DNS名稱,配置於游戲客戶端.無論內網ELB,還是外網ELB,都會將該DNS發布至全球),
狀態(active),
VPC-id,可用區(-1c),只能選擇1個VPC.且每個可用區只能選擇1個子網(對應的子網可以對接1個EIP,多個子網可以對應多個EIP.或者默認就不用EIP都可以).
類型(network),
偵聽器,管理"偵聽器"(偵聽客戶端,如玩家請求的端口.會將請求轉發給后端的目標群組),如4399.這里是第一次填端口(偵聽器),之后端口號可以修改
第二步,配置路由(目標群組,對應的EC2需要注冊到這里來)
目標群組:
名稱(自命名的目標群組名稱),
端口(4399),這里是第二次填端口(路由),這個端口之后無法修改
協議(TCP),
目標類型(實例),可以是instance或者是IP兩種模式.如果是實例模式,則對應是DR(后端可以獲取玩家真實IP).若是IP模式,則是NAT模式(后端只能看到NLB的內網IP)
負載均衡器(綁定的負載均衡器名稱,就是上面創建的那個),
VPC(VPC-id),
目標群組里的其他概念
已注冊目標:就是注冊到這個目標群組的實例,可以添加或刪除.用於接收負載均衡器的請求的后端實例.目標狀態可以是healthy,或者unhealthy.
取消注冊延遲:意思就是將目標群組中的實例手動給剔除的時候,這個后端實例不會直接斷開,而是出於一種不接收新請求了,等XXX秒就自動下線.(默認是300秒,取值范圍0-3600秒).
運行狀況檢查:這里可以配置目標群組監聽EC2端口的健康狀況,默認跟轉發端口一致.也可以手動配置,選擇"編輯運行狀況檢查->端口->覆蓋->輸入端口號".這個端口只是作為檢查后端EC2服務是否異常,如果正常,則不會通知ELB剔除該實例.那么如果這里配置的是4399,而目標注冊的EC2那里配置4699,則ELB仍會把正常客戶端請求發給這個實例(認為這個實例正常,其實這個實例並沒有開4699的端口).
監控:略.
第三步,注冊目標
這里選擇需要加入到目標群組的哪些實例.這里對應的是各個EC2開放的各個端口(4399),這里是第三次填端口(注冊目標),端口號可以修改
第四步,審核
略.
其他說明:
創建的ELB可以創建"刪除保護"(ELB->屬性).
跨區域負載均衡,ELB->屬性->開啟.(注意,這里的跨區域指的是垮可用區,當我們結合auto scaling使用的時候,選擇a,b,c3個可用區的話,這里一定要打鈎)(Route 53 使用負載均衡器節點之一的IP地址響應每個請求.這里是針對可用區而言的.跨區域開啟的話,每個ELB會根據具體目標注冊情況分配路由流量.不開啟的話,a1和b1可能是平均分配流量,然后后端的注冊目標數目不同,對實例造成的壓力就不一樣了.比如a1里1個EC2,b1里有9個EC2,那a1里的那個壓力會非常大,會被分配50%的請求流量過來).
域名解析說明
aws會將域名發布到全球(即使是內網使用的ELB,其他非相關人員解析的時候,仍然能夠解析到內網IP,比如10.X.X.X).
數據流說明(對應端口說明)
客戶端訪問ELB的4499端口->
偵聽器4499ELB(第一次填的那個端口)接收請求->
轉發給目標群組4399端口(第二次填的那個端口)->
分發給EC2實例,這里不同實例可以配不同端口,比如4399,4499,4599等(第三次填的那個端口)
服務器如何獲取玩家源IP
源IP保留(目前默認instance模式,可以選擇IP模式)
在創建ELB的第二步,配置路由(新建目標組)中,目標類型是否使用實例 ID 或私有 IP 地址注冊目標.
如果您使用實例 ID 指定目標,則客戶端的源 IP 地址將保留並提供給您的應用程序。
目前默認就是這樣,已經測試.
刪除
因為"目標群組"是綁定在"負載均衡器"上的,所以需要先刪除ELB,才可以刪除目標群組.否則會報錯無法刪除目標群組.
結合auto scaling.
跨VPC的ELB,應該會涉及到Route53.
遇到的"坑"
跨區域負載均衡
1.負載均衡選擇了a,b,c3個可用區.只有a區有3台服務器提供服務.負載均衡器會在每個可用區給1個IP,ELB的域名會解析到這3個IP上(通過Route53).這里在"跨區域負載均衡"屬性上一定要勾選,否則綁定到b,c的IP無法將請求發送到a區內的服務器(這個選項會額外收費).
NLB會將后端不正常的服務主機剔除,且Route53也會將不正常的服務對應可用區IP給剔除.但DNS生效需要時間.下面是取消"跨區域負載均衡"勾選后,不同地區的DNS服務器表現情況,可以看到,成都電信DNS有大概率(大約是10%左右)解析出錯誤的IP地址(可能需要更長的時間才會正常),而谷歌的DNS沒有這個情況.
xbzj-nlb-consul-02-d68eed793aaef5cd.elb.us-east-1.amazonaws.com
服務器: ns.sc.cninfo.net
Address: 61.139.2.69
非權威應答:
名稱: xbzj-nlb-consul-02-d68eed793aaef5cd.elb.us-east-1.amazonaws.com
Addresses: 10.10.0.227 #后端服務主機正常
10.10.2.124 #后端無服務主機,且已經是禁用了"垮區域負載均衡"
10.10.1.144 #同上
xbzj-nlb-consul-02-d68eed793aaef5cd.elb.us-east-1.amazonaws.com
服務器: google-public-dns-a.google.com
Address: 8.8.8.8
非權威應答:
名稱: xbzj-nlb-consul-02-d68eed793aaef5cd.elb.us-east-1.amazonaws.com
Address: 10.10.0.227
2.啟用和停用"跨區域負載均衡"大約有5分鍾左右的生效時間.如果是內網的ELB,可以看到解析到不同可用區的IP地址段.
其他知識說明
連接空閑超時
對於客戶端通過網絡負載均衡器發出的每個請求,都將跟蹤該連接的狀態。
連接由目標終止。如果客戶端或目標通過連接發送數據的間隔超過空閑超時期限,則連接將關閉。
如果客戶端在空閑超時期限后發送數據,則會收到一個 TCP RST 數據包,以指示連接不再有效。
Elastic Load Balancing 將空閑超時值設為 350 秒。您不能修改此值。您的目標可以使用 TCP keepalive 數據包重置空閑超時值。
取消注冊延遲
Elastic Load Balancing 停止將請求發送到正在取消注冊的實例。
連接耗盡可確保進行中的請求在現有連接關閉前完成。
取消注冊的目標的初始狀態為 draining。默認情況下,取消注冊的目標的狀態在 300 秒后將變為 unused。
要更改 Elastic Load Balancing 在狀態更改為 unused 之前等待的時間長度,請更新取消注冊延遲值。
當將目標移到 Network Load Balancer 時,性能會下降
Classic Load Balancers 和 Application Load Balancers 兩者都使用多路復用連接,但 Network Load Balancers 不使用。
因此,您的目標可能會在 Network Load Balancer 后面收到更多的 TCP 連接。請確保您的目標准備好處理它們可能會收到的連接請求量。
