NLB Test Tool Guide - cloud-barista/cb-spider GitHub Wiki
- NLB Test Tool Guide v0.2
- μ ν μ°Έκ³ μλ£
- μν νλͺ© λ° κ²°κ³Ό μμ½ μλ£
- NLB μν νλͺ© λ° μν κ²°κ³Ό(μμ )
- μ΄ν λ΄μ©μ μμ μ ν¨κ» 보μλ κ²μ΄ μ΄ν΄μ λμμ΄ λ©λλ€.
- μ΄ν λ΄μ©κ³Ό μμ λ΄μ©μ΄ λ€λ₯Ό κ²½μ° μμ μ΄ μ΅μ λ΄μ©μ λλ€.
-
μν νλͺ©μ NLB κΈ°λ₯ μνκ³Ό NLB κ²μ¦ μνμΌλ‘ ꡬμ±λμ΄ μμ΅λλ€.
- κΈ°λ₯ μνμ NLB μμ±, μ 보 μ 곡 λ° μμ λ± NLB κΈ°λ₯μ λν μνμ λλ€.
- κ²μ¦ μνμ NLBμ μν΄ λΆν λΆμ°μ΄ μ λλ‘ λμ λλ μ§ νμΈνλ μνμ λλ€.
-
νμ¬ κ²μ¦ μν νλͺ©μ μ¬μ©μμ TCP, HTTP λ° UDP μλΉμ€μ λν NLB μ 곡 μλλ¦¬μ€ μ€μ¬μ μνμ λλ€.
-
VMμ νμ¬λλ μ¬μ©μ μλΉμ€λ₯Ό μ€μ¬μΌλ‘
(1)TCP μλΉμ€
μ(2)μΉ μλΉμ€
그리κ³(3)UDP μλΉμ€
λ‘ κ΅¬λΆνμ¬ μν-
(1) TCP μλΉμ€ μν: VMμ TCP μλΉμ€λ₯Ό NLBλ₯Ό ν΅ν΄μ μλΉμ€
-
μ¬μ μ€μ : SG TCP 23λ² ν¬νΈ κ°λ°©
-
[CASE-1] λμΌ νλ‘ν μ½, λμΌ ν¬νΈ
- Client μ κ·Ό: ssh {NLB IP or DNSName}
- Listener μ€μ : TCP : 22
- VMGroup μ€μ : TCP : 22
- HealthChecker μ€μ : TCP : 22
-
[CASE-2] λμΌ νλ‘ν μ½, 리μ€λ ν¬νΈ λ³κ²½
- Client μ κ·Ό: ssh {NLB IP or DNSName} -p 23
- Listener μ€μ : TCP : 23
- VMGroup μ€μ : TCP : 22
- HealthChecker μ€μ : TCP : 22
-
-
(2) μΉ μλΉμ€ μν: VMμ μΉ μλΉμ€λ₯Ό NLBλ₯Ό ν΅ν΄μ μλΉμ€
-
μ¬μ μ€μ : SG TCP 80λ² ν¬νΈ κ°λ°©, VMGroupμ λͺ¨λ VMμ nginx μ€μΉ(80λ² ν¬νΈ)
-
[CASE-1] λμΌ νλ‘ν μ½, λμΌ ν¬νΈ
- Client μ κ·Ό: curl {NLB IP or DNSName}
- Listener μ€μ : TCP : 80
- VMGroup μ€μ : TCP : 80
- HealthChecker μ€μ : TCP : 80 # GCP μ μΈ(TCP μ§μ μν¨)
-
[CASE-2] HTTP ν¬μ€μ²΄ν¬ (GCP κ³ λ €)
- Client μ κ·Ό: curl {NLB IP or DNSName}:81
- Listener μ€μ : TCP : 81
- VMGroup μ€μ : TCP : 80
- HealthChecker μ€μ : HTTP : 80
-
-
(3) UDP μλΉμ€ μν: VMμ UDP μλΉμ€λ₯Ό NLBλ₯Ό ν΅ν΄μ μλΉμ€
-
μ¬μ μ€μ : SG TCP 80λ², UDP 100λ² ν¬νΈ κ°λ°©, VMGroupμ λͺ¨λ VMμ nginx μ€μΉ(80λ² ν¬νΈ) λ° UDP λ°λͺ¬(100λ² ν¬νΈ) κ°λ
-
[CASE-1] TCP ν¬μ€μ²΄ν¬
- Client μ κ·Ό: ncat {NLB IP or DNSName} {PORT}
- Listener μ€μ : UDP : 80
- VMGroup μ€μ : UDP : 100
- HealthChecker μ€μ : TCP : 80
-
[CASE-2] 리μ€λ ν¬νΈ λ³κ²½, HTTP ν¬μ€μ²΄ν¬
- Client μ κ·Ό: ncat {NLB IP or DNSName} {PORT}
- Listener μ€μ : UDP : 100
- VMGroup μ€μ : UDP : 100
- HealthChecker μ€μ : HTTP : 80
-
-
νμ¬ Health Checkerμ Interval, Timeout, Threshold μ€μ κ°μ λ€μκ³Ό κ°μ΄ κ³ μ νμ¬ μν
- Azure, GCP, Alibaba, Tencent, IBM: λ€μ κ°μΌλ‘ μ€μ
Interval: 10 Timeout: 9 Threshold: 3
- AWS: λ€μ κ°μΌλ‘ μ€μ
Interval: 10 Timeout: -1 Threshold: 3
- Azure, GCP, Alibaba, Tencent, IBM: λ€μ κ°μΌλ‘ μ€μ
-
GCP κ²½μ° λ€μ μν νλͺ©λ§ κ°λ₯
- (2)μΉ μλΉμ€ μν [CASE-2], (3)UDP μλΉμ€ μν νλͺ©μμ HealthChecker νλ‘ν μ½ HTTP νλͺ©
- μ¬μ : VMμ Health Checkingμ μν HTTP Server μ‘΄μ¬ νμ, HealthChecker HTTP Protocolλ§ κ°λ₯
-
-
-
https://github.com/cloud-barista/cb-spider/tree/master/test/nlb-test-curl
-
μ£Όμ μν μ€ν¬λ¦½νΈκ° λ€μκ³Ό κ°κ³ , μν νλͺ©λ³ νμ©ν΄μΌ ν μ€ν¬λ¦½νΈλ NLB μν νλͺ© λ° μν κ²°κ³Ό(μμ )μμ μν νλͺ©λ³
Test Script
μ°Έκ³. |-- 0.prepare-kill-udp-daemon-nlb-test.sh |-- 0.prepare-nginx-nlb-test.sh |-- 0.prepare-nlb-test.sh |-- 0.prepare-udp-nlb-test.sh |-- 1.create-nlb-TCP-22-test-AWS.sh |-- 1.create-nlb-TCP-22-test.sh |-- 1.create-nlb-TCP-23-test-AWS.sh |-- 1.create-nlb-TCP-23-test.sh |-- 1.create-nlb-TCP-80-HTTP-test-AWS.sh |-- 1.create-nlb-TCP-80-HTTP-test.sh |-- 1.create-nlb-TCP-80-test-AWS.sh |-- 1.create-nlb-TCP-80-test.sh |-- 1.create-nlb-TCP-81-test-AWS.sh |-- 1.create-nlb-TCP-81-test.sh |-- 1.create-nlb-UDP-100-HTTP-test-AWS.sh |-- 1.create-nlb-UDP-100-HTTP-test.sh |-- 1.create-nlb-UDP-80-test-AWS.sh |-- 1.create-nlb-UDP-80-test.sh |-- 2.list-get-nlb-test.sh |-- 3.get-owner-vpc-nlb-test.sh (μλ² μ μ© μν) |-- 4.1.addvm-nlb-test.sh |-- 4.2.removevm-nlb-test.sh |-- 5.change-nlb-test.sh (λ³κ²½ κΈ°λ₯ 보λ₯) |-- 6.gethealth-nlb-test.sh |-- 7.delete-nlb-test.sh |-- 8.teardown-nlb-test.sh |-- check-nlb-curl-call-test.sh |-- check-nlb-ssh-call-test.sh |-- check-nlb-udp-call-test.sh
- (1) NLB Test μ€λΉ λꡬ: NLB μνμ νμν μμ μμ±/μμ λ° VM nginx μ€μΉ/μ€μ λ±
- λμ μ€ν¬λ¦½νΈ: 0.prepare-, 8.teardown-
- (2) NLB κΈ°λ₯ μν λꡬ: NLB μμ±, μ 보 μ 곡, VM μΆκ°/μ κ±° λ° μμ λ± μ£Όμ κΈ°λ₯ μν
- λμ μ€ν¬λ¦½νΈ: 1.create-* ~ 7.delete-*
- (3) NLB λΆμ° νΈμΆ κ²μ¦ λꡬ: μ°μλλ LB νΈμΆμ VMμ΄ λΆμ° νΈμΆ(κ΅μ°¨ μ ν) λλ μ§ νμΈνλ μν
- λμ μ€ν¬λ¦½νΈ: check-*
-
(1) λμ CSP connection config λ±λ‘ λ° image, Spec λ± μν νκ²½ μ€μ
- aws κ²½μ°: ./aws/setup.env νμΈ
- aws2μ κ°μ΄ κ²½λ‘ μΆκ°νμ¬ μλ‘μ΄ μ€μ κ΅¬μ± κ°λ₯
-
(2) μν λ¨λ§ νκ²½
- Spider μλ²μ λμΌ λ Έλμμ λͺ¨λ μν μ€ν νμ
- ssh, curl, nmap, ncat λ± νμ
-
(1) μν λꡬ μμΉλ‘ μ΄λ
cd $CBSPIDER_ROOT/test/nlb-test-curl
-
(2) μνμ νμν μμ λ° VM λ± μ€λΉ (μμ λͺ λ Ήμ AWS κ²½μ°μ)
- VPC/Subnet/SG/Key λ° 2κ°μ VM(vm-01, vm-02) μμ±
./0.prepare-nlb-test.sh aws
- μΉ μλΉμ€ μν νλͺ©(80 by nginx)μ κ²½μ° λ€μμ μ€ννμ¬
- μλμ κ°μ΄ scriptλ₯Ό μ€ν μμΌμ λμ VM λͺ¨λμ nginxλ₯Ό μ€μΉ
- μλμ script μ€νμ, "Load key "XXX-keypair-01.pem": invalid format" μ΄λΌλ errorκ° λ°μνλ©΄, μμ±λμ΄ μ μ₯λ keypair νμΌμ μ΄μ΄μ μ λλ‘ μμ±λμλμ§ νμΈ νμ
- λμ VM nginx default pageμ VMμ Public IP μΆκ° νμ
- AddVMs() μ€νμΌλ‘ VM(vm-03, vm-04) μΆκ°νμΌλ©΄, μΆκ°ν VM μ΄λ¦ λμμΌλ‘ μ€ν νμ
- μλμ script μ€νμΌλ‘ nginx μ€μΉ/ꡬλμ΄ μλ£λλ©΄ health checkμ healthy VMμΌλ‘ ν¬ν¨λ¨.
./0.prepare-nginx-nlb-test.sh aws vm-01 ./0.prepare-nginx-nlb-test.sh aws vm-02
- μλμ κ°μ΄ scriptλ₯Ό μ€ν μμΌμ λμ VM λͺ¨λμ nginxλ₯Ό μ€μΉ
- VPC/Subnet/SG/Key λ° 2κ°μ VM(vm-01, vm-02) μμ±
-
(3) NLB κΈ°λ₯ λ° κ²μ¦ μν μ€ν
-
Create NLB μ€μ (νλ‘ν μ½, ν¬νΈ λ±)μ λ°λ₯Έ μν νλͺ© λ§λ€ λ€μ μμλ‘ μν μ€ν¬λ¦½νΈλ₯Ό μ€νν©λλ€.
* κΈ°λ₯ μν: 1.Create NLB -> 2.List/Get NLB * κ²μ¦ μν: 6.GetHealth: vm-01, vm-02 Healthy μν νμΈ * κ²μ¦ μν: check: vm-01, vm-02 κ΅μ°¨ νΈμΆ μ¬λΆ νμΈ * κΈ°λ₯ μν: 4.1.AddVMs(vm-03, vm-04) to NLB (μΉ μλΉμ€ μνμ κ²½μ°: μμμ μ€λͺ ν nginx μ€μΉ μ€ν¬λ¦½νΈ μ€ν νμ) * κ²μ¦ μν: 6.GetHealth: vm-01, vm-02, vm-03, mv-04 Healthy μν νμΈ * κ²μ¦ μν: check: vm-01, vm-02, vm-03, vm-04 κ΅μ°¨ νΈμΆ μ¬λΆ νμΈ * κΈ°λ₯ μν: 4.1.RemoveVMs(vm-03, vm-04) from NLB * κ²μ¦ μν: 6.GetHealth: vm-01, vm-02 Healthy μν νμΈ * κ²μ¦ μν: check: vm-01, vm-02 κ΅μ°¨ νΈμΆ μ¬λΆ νμΈ * κΈ°λ₯ μν: 7.Delete NLB
-
μν νλͺ©μ λ°λΌ Create NLBμ Check μ€ν μ€ν¬λ¦½νΈκ° λ¬λΌμ§λ©° μΈλΆ λ΄μ©μ λ€μκ³Ό κ°μ΅λλ€.
-
-
[TCP μλΉμ€μ κ²½μ°], μν νλͺ©μ λ§κ² λ€μ μ€ νλλ₯Ό μ€νν©λλ€. (AWS, GCP μ μΈ)
./1.create-nlb-TCP-22-test.sh azure ./1.create-nlb-TCP-23-test.sh azure ...
-
μ μ€νμ λ€μ μ€μ μΌλ‘ NLBλ₯Ό μμ±ν©λλ€.
* Listener: TCP:22 # λλ 23 * VMGroup: TCP:22 * HealthChecer: TCP:22 - Interval: 10 - Timeout: 9 - Threshold: 3
-
[μΉ μλΉμ€μ κ²½μ°], μν νλͺ©μ λ§κ² λ€μ μ€ νλλ₯Ό μ€νν©λλ€. (AWS, GCP μ μΈ)
- μΉ μλΉμ€μ κ²½μ° μΉ μλ²(nginx) μ€μΉ λ° κ΅¬λ νμ (μ
μΉ μλΉμ€ μν νλͺ©
μ°Έκ³ )
./1.create-nlb-TCP-80-test.sh azure ./1.create-nlb-TCP-81-test.sh azure ...
- μΉ μλΉμ€μ κ²½μ° μΉ μλ²(nginx) μ€μΉ λ° κ΅¬λ νμ (μ
-
μ μ€νμ λ€μ μ€μ μΌλ‘ NLBλ₯Ό μμ±ν©λλ€.
* Listener: TCP:80 # λλ 81 * VMGroup: TCP:80 * HealthChecer: TCP:80 - Interval: 10 - Timeout: 9 - Threshold: 3
-
[AWSμ κ²½μ°], μν νλͺ©μ λ§κ² λ€μ μ€ νλλ₯Ό μ€νν©λλ€. (Timeout=-1)
$ ls *AWS* 1.create-nlb-TCP-22-test-AWS.sh 1.create-nlb-TCP-80-test-AWS.sh 1.create-nlb-TCP-23-test-AWS.sh 1.create-nlb-TCP-81-test-AWS.sh
-
μ μ€νμ λ€μ μ€μ μΌλ‘ NLBλ₯Ό μμ±ν©λλ€.
* Listener: TCP:22 # λλ 23 * VMGroup: TCP:22 * HealthChecer: TCP:22 - Interval: 10 - Timeout: -1 - Threshold: 3
* Listener: TCP:80 # λλ 81 * VMGroup: TCP:80 * HealthChecer: TCP:80 - Interval: 10 - Timeout: -1 - Threshold: 3
-
[GCPμ κ²½μ°], μν νλͺ©μ λ§κ² λ€μ μ€ νλλ₯Ό μ€νν©λλ€. (Listener==VMGroup, HealthCheck=HTTP)
$ ls *GCP* 1.create-nlb-TCP-80-HTTP-test-GCP.sh
-
μ μ€νμ λ€μ μ€μ μΌλ‘ NLBλ₯Ό μμ±ν©λλ€.
* Listener: TCP:80 * VMGroup: TCP:80 * HealthChecer: HTTP:80 - Interval: 10 - Timeout: 9 - Threshold: 3
-
-
- μλμ κ°μ΄ NLB VMGroupμ health checkλ₯Ό μ€ννλ€.
./6.gethealth-nlb-test.sh aws
- μλμ κ°μ΄ NLB VMGroupμ health checkλ₯Ό μ€ννλ€.
-
-
TCP μλΉμ€λ sshλ‘ νΈμΆνκ³ , Web μλΉμ€λ curlμ μ΄μ©νμ¬ νΈμΆνμ¬ μνν©λλ€.
-
[TCP μλΉμ€ κ²½μ°], λμ NLBμ Listener μ€μ ν¬νΈμ λ°λΌμ λ€μ μ€ νλ μ€ν
./check-nlb-ssh-call-test.sh aws 22 ./check-nlb-ssh-call-test.sh aws 23
-
[μΉ μλΉμ€ κ²½μ°], λμ NLBμ Listener μ€μ ν¬νΈμ λ°λΌμ λ€μ μ€ νλ μ€ν
./check-nlb-curl-call-test.sh aws 80 ./check-nlb-curl-call-test.sh aws 81
-
μ°Έκ³
- NLB μ€μ μ΄ μ€μ λ‘ λ°μ λκΈ° μ κΉμ§λ check λͺ
λ Ήμ μ€ννλ©΄ λ³΄ν΅ μ무κ²λ μΆλ ₯μ΄ λμ§ μμ΅λλ€.
- NLB μ€μ λ°μμ μκ°μ΄ μ’ κ±Έλ¦΄ μ μμΌλ©°, AWS κ²½μ° μ½ 5λΆ μ λ μμλ©λλ€.
- μμ μΉ μλΉμ€ ν μ€νΈμ κ° VMμΌλ‘λΆν° μ λλ‘λ μλ΅μ΄ μμΌλ©΄, nginxκ° μ λλ‘ κ΅¬λλμ΄μλμ§ νμΈ νμ
- νΉμ, Check μ€ν μμ μλ¬ λ©μμ§λ₯Ό νμΈνκ³ μΆλ€λ©΄
- λ€μ νμΌμμ
>
(redirection)λ₯Ό ν¬ν¨ν λ· λΆλΆμ μ κ±°νλ©΄ νμΈ κ°λ₯ν©λλ€.vi common/check-nlb-ssh-test.sh
- λ€μ νμΌμμ
- NLB μ€μ μ΄ μ€μ λ‘ λ°μ λκΈ° μ κΉμ§λ check λͺ
λ Ήμ μ€ννλ©΄ λ³΄ν΅ μ무κ²λ μΆλ ₯μ΄ λμ§ μμ΅λλ€.
-
-
-
(4) NLB κ²μ¦ μν κ²°κ³Ό νκ° λ°©λ²
-
NLB μ€μ μ΄ μ λλ‘ λ°μλλ©΄,
-
SSH νΈμΆμ μ¬λ°λ₯Έ μΆλ ₯ μμλ λ€μκ³Ό κ°μ΅λλ€. (20ν νΈμΆν¨)
-
2κ° VMμ λν hostnameμ΄ κ΅μ°¨ μΆλ ₯ λλ©΄ μ±κ³΅μ λλ€.
-
κ΅μ°¨ λλ μμλ λΆκ·μΉμ μ λλ€.
./check-nlb-ssh-call-test.sh aws 22 # λλ 23
ip-10-0-10-195 ip-10-0-8-198 ip-10-0-10-195 ip-10-0-8-198 ip-10-0-10-195 ip-10-0-8-198 ip-10-0-8-198 ...
-
-
CURL νΈμΆμ μ¬λ°λ₯Έ μΆλ ₯ μμ(20ν νΈμΆν¨)
-
2κ° VMμ λν Public IPκ° κ΅μ± μΆλ ₯ λλ©΄ μ±κ³΅μ λλ€.
-
κ΅μ°¨ λλ μμλ λΆκ·μΉμ μ λλ€.
./check-nlb-curl-call-test.sh aws 80 # λλ 81
<title>Welcome to 18.217.189.175</title> <title>Welcome to 3.144.42.189</title> <title>Welcome to 3.144.42.189</title> <title>Welcome to 3.144.42.189</title> <title>Welcome to 3.144.42.189</title> <title>Welcome to 18.217.189.175</title> <title>Welcome to 18.217.189.175</title> ...
-
-
-
(5) NLB κΈ°λ₯ λ° λμ κ²μ¦ μλ£ ν μμ μμ λ°©λ²
- κ° μν μ€μ NLB μμ λ₯Ό μν΄μλ μλμ μ€ν¬λ¦½νΈλ₯Ό μ€ννμ¬ NLBλ₯Ό λ°λ©νλ€.
- NLBμ ν¬ν¨λ λͺ¨λ μμ λ°λ©
./7.delete-nlb-test.sh aws
- NLBμ ν¬ν¨λ λͺ¨λ μμ λ°λ©
- λͺ¨λ μν μ’
λ£ νμλ prepare νλ μμμ μλμ μ€ν¬λ¦½νΈλ₯Ό μ€ννμ¬ λ°λ©ν©λλ€.
- VM μμ ~ VPC μμ
./8.teardown-nlb-test.sh aws
- VM μμ ~ VPC μμ
- κ° μν μ€μ NLB μμ λ₯Ό μν΄μλ μλμ μ€ν¬λ¦½νΈλ₯Ό μ€ννμ¬ NLBλ₯Ό λ°λ©νλ€.
- λ€μ λ§ν¬ μ°Έκ³
- V0.1 => V0.2
- UDP μλΉμ€ μν νλͺ© λ° μν κ²°κ³Ό μΆκ°