Network Load Balancer(NLB) Guide - cloud-barista/cb-spider GitHub Wiki
CB-Spider Network Load Balancer Guide
1. CB-Spider NLB Overview
- ์ฌ์ฉ์๋ VPC ๋ด์ VM์ ํฅํ ์ธ๋ถ์ Client ์์ฒญ ๋ฐ ์
๋ ฅ ์คํธ๋ฆผ์ ๋ํ ๋ถํ ๋ถ์ฐ(Load Balancing)์ ๊ด๋ฆฌํ๊ธฐ ์ํด์
- ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํน์ VPC์ ์์๋๋ Network Load Balancer(์ดํ NLB)๋ฅผ ์์ฑ ๋ฐ ๊ตฌ์ฑํ ์ ์๋ค.
- NLB ์์ฑ์์ ๋์ VM(VM Group)์ ํจ๊ป ์ค์ ํ ์๋ ์๊ณ , NLB ์์ฑ ํ์ VM์ ์ถ๊ฐํ ์๋ ์๋ค.
- ์์ธ: KT NLB๋ VPC๊ฐ ์๋ Subnet ๋์์ผ๋ก ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
- KT NLB๋ ๋์ VM(VM Group)๊ณผ ํจ๊ป ์์ฑํ๋ ๋ฐฉ์๋ง ์ง์ํ๋ฉฐ, ์ค์ ํ VM์ด ์ํ Subnet์ NLB๊ฐ ์์ฑ๋๋ค.
- ๋ํ, NLB์ ๋์ผํ Subnet์ VM๋ค๋ง VM Group์ ์ถ๊ฐ ๋ฐ ์ด์์ด ๊ฐ๋ฅํ๋ค.
- NLB๋ Public ํ์
๊ณผ Internal ํ์
์ ์ ํํ์ฌ ์์ฑํ ์ ์๋ค.
- Public ํ์ (default): ์ธ๋ถ ์ธํฐ๋ท์ ํตํ ์ฌ์ฉ์์ ํด๋ผ์ด์ธํธ ์คํธ๋ฆผ์ ๋ํ ๋ถํ ๋ถ์ฐ
- Internal ํ์ : ๋ด๋ถ VM ๊ฐ์ ์คํธ๋ฆผ์ ๋ํ ๋ถํ ๋ถ์ฐ
- Public ํ์ ์ ๊ณต ์ค์ฌ์ผ๋ก ์ ๊ฐ๋ฐ ๋ฐ ์ฐ์ ํ์ฉ
- NLB๋ Region ๋ฒ์์ Global ๋ฒ์์ ์ด์์ ์ ํํ์ฌ ์์ฑํ ์ ์๋ค.
- Regional NLB(default): ๋จ์ผ Region์์ ์ด์๋๋ ๋ก๋ ๋ฐธ๋ฐ์
- Global NLB: ๋ฉํฐ Region์์ ์ด์๋๋ ๋ก๋ ๋ฐธ๋ฐ์
- Regional NLB ์ ๊ณต ์ค์ฌ์ผ๋ก ์ ๊ฐ๋ฐ ๋ฐ ์ฐ์ ํ์ฉ
2. CB-Spider NLB Components
- NLB๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ๋ก ํธ์๋(Frontend) ์์ญ๊ณผ ๋ฐฑ์๋(Backend) ์์ญ์ผ๋ก ๊ตฌ๋ถ๋๋ฉฐ,
์์ญ๋ณ ์ฃผ์ ๊ตฌ์ฑ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
-
[NLB-Frontend Tier]
(1) ํ๋ก ํธ์๋ ๋ฆฌ์ค๋(Frontend Listener)
- ๋ฆฌ์ค๋๋ Client์ ์์ฒญ ๋ฐ ์ ๋ ฅ ์คํธ๋ฆผ์ ์์ ํ์ฌ ๋ฐฑ์๋ ์์ญ์ VM๊ทธ๋ฃน์ผ๋ก ์ ๋ฌํ๋ค.
- ํ๋์ NLB๋ ํ๋์ ๋ฆฌ์ค๋๋ฅผ ํฌํจํ๋ฉฐ, ์์ ํ๋กํ ์ฝ, IP ๋ฐ ์์ ํฌํธ๋ก ๊ตฌ์ฑ๋๋ค.
- ์ ํ ๊ฐ๋ฅํ ์์ ํ๋กํ ์ฝ์ TCP ๋ฐ UDP์ด๋ฉฐ, IP๋ CSP ๋๋ ๋์ Driver์์ ์๋ ์์ฑ ๋ฐ ๊ด๋ฆฌ๋๋ค.
- ์์ ํฌํธ๋ 1-65535 ๋ฒ์์ ๊ฐ์ผ๋ก ์ค์ ์ด ๊ฐ๋ฅํ๋ค.
- โป ๋ฆฌ์ค๋ IP์ DNS-Name: ๋๋ค ์ ๊ณตํ๊ฑฐ๋ ๋์ค ํ๋๋ง ์ ๊ณตํ ์ ์์
-
[NLB-Backend Tier]
(2) ๋ฐฑ์๋ VM ๊ทธ๋ฃน(Backend VM Group)
- VM ๊ทธ๋ฃน์ ๋์ผํ ์๋น์ค(nginx, redis, ์ฌ์ฉ์ ๊ฐ๋ฐ ์๋น์ค ๋ฑ)๋ฅผ ์ ๊ณตํ๋ VM๋ค์ ์งํฉ์ด๋ฉฐ, VM์ ๋ฑ๋ก ๋๋ ์ ์ธ๊ฐ ๊ฐ๋ฅํ๋ค.
- VM ๊ทธ๋ฃน์ ํฌํจ๋ ์ ์๋ VM์ NLB์ ๋์ผํ VPC์ ์ํด ์๋ VM๋ค๋ก ํ์ ๋๋ค.
- ํ๋์ NLB๋ ํ๋์ VM ๊ทธ๋ฃน์ ํฌํจํ๋ฉฐ, VM ๊ทธ๋ฃน์ ์์ ํ๋กํ ์ฝ, ์์ ํฌํธ ๋ฐ VM๋ค๋ก ๊ตฌ์ฑ๋๋ค.
- ์ ํ ๊ฐ๋ฅํ ์์ ํ๋กํ ์ฝ์ TCP, UDP์ด๋ฉฐ,
- VM ๊ทธ๋ฃน์ ํ๋์ ์์ ํฌํธ๋ฅผ ์ค์ ํ ์ ์๋ค. (ํฌํธ๋ฒ์: 1-65535)
- VM ๊ทธ๋ฃน ๋ด์ VM๋ค์ VM ๊ทธ๋ฃน ์ค์ ๊ณผ ๋์ผํ ํ๋กํ ์ฝ ๋ฐ ํฌํธ ๋ฒํธ๋ฅผ ํตํด์ ์๋น์ค ์ ๊ณต์ด ๊ฐ๋ฅํ๋ค.
(3) ํฌ์ค ์ฒดํฌ๊ธฐ(Health Checker)
-
ํ๋์ NLB๋ ํ๋์ ํฌ์ค ์ฒดํฌ๊ธฐ๋ฅผ ํฌํจํ๋ฉฐ,
-
ํฌ์ค ์ฒดํฌ๊ธฐ๋ VM ๊ทธ๋ฃน์ ํฌํจ๋ VM๋ค์ ํฌ์ค ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
- Healthy VM ๋ชฉ๋ก, Unhealthy VM ๋ชฉ๋ก ๋ฑ ์ ๊ณต
- ์ถ๊ฐ๋ VM์ ์ต์ด ํฌ์ค ์ํ ์ฒดํฌ๋ ์์ด~์๋ถ ์ ๋ ์์
-
ํฌ์ค ์ฒดํฌ๊ธฐ์ ์ ํ ๊ฐ๋ฅํ ํ๋กํ ์ฝ์ TCP ๋ฐ HTTP์ด๋ฉฐ,
-
VM ๊ทธ๋ฃน์ ์์๋ VM๋ค์ ํฌ์ค ์ํ๋ฅผ ์ฒดํฌํ๊ธฐ ์ํด์ VM ๊ทธ๋ฃน๊ณผ ๋์ผํ ํฌํธ๋ฅผ ํ์ฉํ๊ฑฐ๋
-
๋ณ๋์ ํฌ์ค ์ฒดํฌ ์ ์ฉ ํฌํธ(๊ทธ๋ฆผ์์ Port 81)๋ฅผ ๋ณ๋๋ก ์ค์ ํ ์ ์๋ค.
-
๊ฐ VM์ ์๋น์ค ํฌํธ ๋ฐ ํฌ์ค ์ฒดํฌ์ฉ ํฌํธ ์ฉ๋์ ์๋น์ค ๋ฐ๋ชฌ์ ์ฌ์ฉ์์ ์ํด ์ค๋น๋์ด์ผ ํ๋ค.
-
ํฌ์ค ์ฒดํฌ๊ธฐ๋ ์ํ ์ฒดํฌ ์ฃผ๊ธฐ(Interval), Timeout ๋ฐ Threadhold ๊ฐ์ ์ค์ ํ ์ ์์ผ๋ฉฐ,
-
์ฌ์ฉ์๊ฐ ๊ฐ์ ์ค์ ํ์ง ์๊ฑฐ๋,
default๊ฐ์ ๋ช ์ํ ๊ฒฝ์ฐ, default ๊ฐ์ด ์ค์ ๋๋ค.โป cf) Health Check Interval, Timeout, Threshold default ๊ฐ ๋ฐ ์ค์ ์กฐ๊ฑด ๋ฑ
-
[Interval]
CSP TCP defaultHTTP default์ค์ ์กฐ๊ฑด, ๋ฒ์ ๋ฐ ํน์ด์ฌํญ AWS 10 10 * ๋ฒ์: 10, 30๋ง ๊ฐ๋ฅ Azure 10 10 * ๋ฒ์: 5 ์ด์ * ์กฐ๊ฑด: Interval * Threshold < 2147483647 GCP 10 10 * ๋ฒ์: 1~300 * ์กฐ๊ฑด: Timeout <= Interval Alibaba 10 10 * ๋ฒ์: 1~50 Tencent 10 10 * ๋ฒ์: 2~300 * ์กฐ๊ฑด: Timeout <= Interval IBM 10 10 * ๋ฒ์: 2~60 * ์กฐ๊ฑด: Timeout < Interval OpenStack 10 10 * ๋ฒ์: 2147483647(int ์ต๋๊ฐ) * ์กฐ๊ฑด: Timeout <= Interval NCP 10 10 * ๋ฒ์: 5~300 NHN 10 10 * ๋ฒ์: 1~5000 * ์กฐ๊ฑด: Timeout < Interval -
[Timeout]
CSP TCP defaultHTTP default์ค์ ์กฐ๊ฑด, ๋ฒ์ ๋ฐ ํน์ด์ฌํญ AWS 10 6 * ์ค์ ๋ถ๊ฐ * TCP: 10s, HTTP: 6s ๊ณ ์ Azure 10 10 * ์ค์ ๋ถ๊ฐ * Interval๊ณผ Azure default Timeout( 30) ์ค ์์ ๊ฐGCP 10 6 * ๋ฒ์: 1 ์ด์ * ์กฐ๊ฑด: Timeout <= Interval Alibaba 10 6 * ๋ฒ์: 1~300 Tencent 10 6 * ๋ฒ์: 2~60 * ์กฐ๊ฑด: Timeout <= Interval IBM 9 6 * ์์ธ * ์กฐ๊ฑด: Timeout < Interval OpenStack 10 6 * ๋ฒ์: 2147483647(int ์ต๋๊ฐ) * ์กฐ๊ฑด: Timeout <= Interval NCP 10 6 * ๋ฒ์: 1~3600 NHN 10 6 * ๋ฒ์: 1~5000 * ์กฐ๊ฑด: Timeout < Interval -
[Threshold]
CSP TCP defaultHTTP default์ค์ ์กฐ๊ฑด, ๋ฒ์ ๋ฐ ํน์ด์ฌํญ AWS 3 3 * ๋ฒ์: 2~10 Azure 3 3 * ๋ฒ์: 1 ์ด์ * ์กฐ๊ฑด: Interval * Threshold < 2147483647 GCP 3 3 * ๋ฒ์: 1~10 Alibaba 3 3 * ๋ฒ์: 2~10 Tencent 3 3 * ๋ฒ์: 2~10 IBM 3 3 * ๋ฒ์: 1~10 OpenStack 3 3 * ๋ฒ์: 1~10 NCP 3 3 * ๋ฒ์: 2~10 NHN 3 3 * ๋ฒ์: 1~10
-
โป ์๋น์ค ๊ทธ๋ฃน ์คํ ์ค์ผ์ผ๋ง(Service Group Auto-Scaling)
- ์คํ ์ค์ผ์ผ๋ง ์ ์ ๋ฐ ์ง์ ์ฌ๋ถ ๋ฑ ์ถํ ๊ณ ๋ ค
-
3. CB-Spider NLB Operation Flow
- NLB ์ฃผ์ ๋์ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
- โ Client -> Frontend ์๋น์ค ์์ฒญ
- Client๋ TCP, HTTP ๋๋ UDP ํ๋กํ ์ฝ ๊ธฐ๋ฐ์ผ๋ก Frontend ๋ฆฌ์ค๋ IP ๋ฐ ๋ฆฌ์ค๋ ํฌํธ๋ฅผ ํตํด์ ์๋น์ค๋ฅผ ์์ฒญํ๋ค.
- Client์ HTTP ํ๋กํ ์ฝ ํธ์ถ์ ๊ฒฝ์ฐ VMGroup ์์ ํ๋กํ ์ฝ์ด TCP์ ๊ฒฝ์ฐ ๊ฐ๋ฅํ๋ค.
- โก Frontend -> Backend ์๋น์ค ๋ผ์ฐํ
- ๋ฆฌ์ค๋์ ์ํด ์์ ๋ ์ฌ์ฉ์ ์์ฒญ์ TCP ๋๋ UDP ๊ธฐ๋ฐ์ผ๋ก VM ๊ทธ๋ฃน ํฌํธ๋ก ๋ผ์ฐํ ๋๋ค.
- โข ๋ผ์ฐํ
๋์ VM ์ ์ ๋ฐ ๋ผ์ฐํ
(๋์ CSP์์ ์ํ)
- VM ๊ทธ๋ฃน์ ํฌํจ๋ VM๋ค ์ค Healthy ์ํ์ VM์๊ฒ Client ์์ฒญ ๋ฐ ์ ๋ ฅ ์คํธ๋ฆผ์ ๋ผ์ฐํ ํ๋ค.
- VM ๊ทธ๋ฃน์ ํฌํจ๋ ๋ชจ๋ VM๋ค์ด Unhealthy ์ํ์ธ ๊ฒฝ์ฐ CSP๋ณ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋์ ํ๋ค.
- VM ๊ทธ๋ฃน์ ํฌํจ๋ ๋ชจ๋ VM์ ๋ผ์ฐํ ํ๋ CSP: AWS, GCP, Tencent
- Client ์คํธ๋ฆผ์ ๋ผ์ฐํ ํ์ง ์๋ CSP: Azure, IBM
- โป Health Checking
- ํฌ์ค ์ฒดํฌ๊ธฐ๋ ์ฃผ๊ธฐ์ ์ผ๋ก VM ๊ทธ๋ฃน์ ํฌํจ๋ VM์ Health ์ํ๋ฅผ ํ์ ํ๊ณ ์ ๊ณตํ๋ค.
- โ Client -> Frontend ์๋น์ค ์์ฒญ
5. CB-Spider NLB API ํ์ฉ
-
API Usage Examples
- NLB ์์ฑ: VMGroup ์ค์ ์ ์ธ, HealthCheck ์ฃผ๊ธฐ ๋ฑ ์๋ต(
default์ค์ )
curl -sX POST http://localhost:1024/spider/nlb \ -H 'Content-Type: application/json' \ -d '{ "ConnectionName": "aws-config01", "ReqInfo": { "Name": "nlb-01", "VPCName": "vpc-01", "Type": "PUBLIC", "Scope": "REGION", "Listener": { "Protocol": "TCP", "Port": "22" }, "HealthChecker": { "Protocol": "TCP", "Port": "22" } } }'- NLB ์์ฑ: VMGroup(vm-01, vm-02) ์ค์ , HealthCheck ์ฃผ๊ธฐ ๋ฑ
default์ค์
curl -sX POST http://localhost:1024/spider/nlb \ -H 'Content-Type: application/json' \ -d '{ "ConnectionName": "aws-config01", "ReqInfo": { "Name": "nlb-01", "VPCName": "vpc-01", "Type": "PUBLIC", "Scope": "REGION", "Listener": { "Protocol": "TCP", "Port": "22" }, "VMGroup": { "Protocol": "TCP", "Port": "22", "VMs": ["vm-01", "vm-02"] }, "HealthChecker": { "Protocol": "TCP", "Port": "22", "Interval": "default", "Timeout": "default", "Threshold": "5" } } }'- VM Group ์ํ ์ ๋ณด ํ์ธ
curl -X 'GET' 'http://localhost:1024/spider/nlb/nlb-01/health?ConnectionName=aws-config01' \ -H 'accept: application/json'{ "healthinfo" : { "AllVMs" : [ { "NameId" : "vm-02", "SystemId" : "i-0747a8efd719fa1a7" }, { "NameId" : "vm-01", "SystemId" : "i-06a0dc51237bc777d" } ], "HealthyVMs" : [ { "NameId" : "vm-02", "SystemId" : "i-0747a8efd719fa1a7" }, { "NameId" : "vm-01", "SystemId" : "i-06a0dc51237bc777d" } ], "UnHealthyVMs" : [] } }- NLB ์ญ์
curl -X 'DELETE' 'http://localhost:1024/spider/nlb/nlb-01' \ -H 'Content-Type: application/json' \ -d '{ "ConnectionName": "aws-config01" }' - NLB ์์ฑ: VMGroup ์ค์ ์ ์ธ, HealthCheck ์ฃผ๊ธฐ ๋ฑ ์๋ต(