NLB Test Tool Guide - cloud-barista/cb-spider GitHub Wiki


NLB 기능 및 검증 시험 도구

1. 시험 항목 및 가이드

  • 시험 항목은 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
          
      • GCP 경우 다음 시험 항목만 가능

        • (2)웹 서비스 시험 [CASE-2], (3)UDP 서비스 시험 항목에서 HealthChecker 프로토콜 HTTP 항목
        • 사유: VM에 Health Checking을 위한 HTTP Server 존재 필수, HealthChecker HTTP Protocol만 가능

2. 시험 도구 위치

  • 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
    

3. 시험 도구 구성 및 시험 스크립트 개요

  • (1) NLB Test 준비 도구: NLB 시험에 필요한 자원 생성/삭제 및 VM nginx 설치/설정 등
    • 대상 스크립트: 0.prepare-, 8.teardown-

  • (2) NLB 기능 시험 도구: NLB 생성, 정보 제공, VM 추가/제거 및 삭제 등 주요 기능 시험
    • 대상 스크립트: 1.create-* ~ 7.delete-*

  • (3) NLB 분산 호출 검증 도구: 연속되는 LB 호출에 VM이 분산 호출(교차 선택) 되는 지 확인하는 시험
    • 대상 스크립트: check-*

4. 시험 준비 및 환경

  • (1) 대상 CSP connection config 등록 및 image, Spec 등 시험 환경 설정

    • aws 경우: ./aws/setup.env 확인
    • aws2와 같이 경로 추가하여 새로운 설정 구성 가능
  • (2) 시험 단말 환경

    • Spider 서버와 동일 노드에서 모든 시험 실행 필요
    • ssh, curl, nmap, ncat 등 필요

5. 시험 절차

  • (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
      
  • (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 실행 스크립트가 달라지며 세부 내용은 다음과 같습니다.

    • Create NLB 시험 스크립트 선택 방법

      • [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
        ...
        
      • 위 실행은 다음 설정으로 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
        
    • Heahth Check 스크립트 실행 방법

      • 아래와 같이 NLB VMGroup의 health check를 실행한다.
        ./6.gethealth-nlb-test.sh aws
        
    • 검증 시험 중 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
            
  • (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
        
    • 모든 시험 종료 후에는 prepare 했던 자원을 아래의 스크립트를 실행하여 반납합니다.
      • VM 삭제 ~ VPC 삭제
        ./8.teardown-nlb-test.sh aws
        

6. 시험 결과

History

- V0.1 => V0.2
  - UDP 서비스 시험 항목 및 시험 결과 추가
⚠️ **GitHub.com Fallback** ⚠️