사용 가능한 노드를 만듭니다.Docker, NGINX 및 AWS ELB를 사용하는 js 응용 프로그램

8700 단어 devopsnginxawsdocker

로드 밸런싱이란 무엇입니까?


부하 균형은 전송된 네트워크 데이터를 한 서버에 분배하는 기술(알고리즘)이다.그것은 모든 공공 사용자에게 서버가 위탁 관리하는 서비스에 접근할 수 있도록 단일한 입구점을 제공했다.프로덕션 서버는 일반적으로 로드 밸런서 이후에 실행됩니다. 이는 서버 간의 전송 로드를 "밸런싱"하여 서버의 과부하를 방지합니다.부하 평형기는 데이터 흐름을 연결하는 서버에 보조 기능을 제공했다. 그것은 역방향 에이전트를 충당한다.역방향 에이전트는 서버 그룹과 사용자 사이의 중간자와 같다.리버스 프록시 처리의 모든 요청은 요청 조건에 따라 해당하는 서버로 전송됩니다.그리고 서버는 데이터로 응답을 하고, 역방향 에이전트에서 사용자로 데이터를 정합니다.이런 방식을 통해 r-proxies는 서버의 신분을 익명으로 유지하고 설정 파일, 영패, 기밀 등 민감한 데이터를 저장하는 메인 서버에 접근하는 것을 방지한다.

NGINX 및 AWS-ELB를 로드 밸런서로 사용


NGINX는 역방향 에이전트로 사용할 수 있는 빠르고 무료의 소스 로드 밸런스입니다.한편, ELB는 Amazon AWS에서 제공하는 로드 밸런싱 서비스입니다.ELB는 (1) ALB, (2) CLB 및 (3) NLB의 세 가지 주요 유형으로 나눌 수 있습니다.AWS가 제공하는 클라우드 서비스 시리즈에는 게이트웨이 부하 밸런스라는 새로운 부하 밸런스도 추가되었다.이 강좌의 생각은 다중 부하 평형기 체계 구조를 형성하여 높은 가용성 노드를 제공할 수 있다는 것이다.js 서버가 여러 포트에서 실행됩니다.

Note to users : There are many ways of implementing infrastructure for Node.js applications on AWS, including ones that utilize AWS’s own ECS and ECR ecosystem for docker applications. However, this tutorial doesn’t focus on that, and aims to better understand the mechanism behind EC2 instances, load balancers and how they interact with docker over load-balanced and proxied ports.


아키텍처 개요



이것이 바로 우리의 목표 구조다.AWS 및 NGINX에서 관리하는 다중 로드 밸런서는 EC2 인스턴스별로 여러 포트를 유지 관리하는 데 도움이 됩니다.이런 체계 구조의 장점은 이 두 실례가 서로 다른 가용성 구역(AZ1과 AZ2)에 위치하기 때문에 한 구역에 고장이 나더라도 다른 구역은 정상적으로 작동할 수 있다는 것이다.우리의 응용 프로그램은 붕괴되지 않을 것이다.

노드js 응용


간단히 보기 위해 다음과 같이 표준 starter Express 노드 애플리케이션을 사용합니다.

변수 포트는 응용 프로그램express를 통해 환경에 제공됩니다.이러한 포트 값은 Docker를 통해 제공합니다.docker compose 덕분에 아주 간단한 임무입니다.하지만 또 다른 환경 변수인 SERVER ID도 있습니다. 이 ID는 데모 목적으로만 사용되므로 걱정하지 마십시오.전체 설정이 완료되면 서버 ID는 로드 밸런서가 응답하는 서버를 알려줍니다.이것은 다중 부하 평형기/r-proxy를 사용하는 인프라 시설의 설정이 정상적으로 작동하는지 확인하는 데 도움을 줄 것입니다.
이런 유형의 배치는 생산 파이프에서 매우 흔히 볼 수 있다.이 경우 주 어플리케이션 서버는 일반적으로 VPC에 배치됩니다.부하 밸런스에 대한 정보점 중 하나는 1급 부하 밸런스는 보통 대중을 대상으로 하는 것으로 분류된다. 왜냐하면 실제 클라이언트 요청을 처리하기 때문이다. 2급 부하 밸런스는 내부 부하 밸런스이고 그 임무는 원본 간의 루트 요청이기 때문이다.

EC2 서버 시작


AWS 계정에 로그인하고 EC2 대시보드로 이동합니다.다음 절차에 따라 새 서버를 설정하고 Docker를 준비합니다.
  • 대시보드에서 오른쪽 상단의 Launch instances 를 클릭합니다.
  • 빠른 시작 섹션에서 Amazon Linux 2 AMI를 선택합니다.
  • 실례 유형 t2를 선택합니다.micro (이 실례 형식이 계정에서 사용할 수 있다면, 무료 층을 사용할 수 있습니다.)너도 네가 좋아하는 다른 유형을 선택할 수 있다.
  • 이 프레젠테이션에서만 두 인스턴스를 각각 시작합니다. 두 인스턴스가 서로 다른 가용성 영역에 있기를 원하기 때문입니다.나의 예에서, 구역은 us-east-1이기 때문에, 나는 us-east-1a의 기본 서브넷을 선택했다.

  • "사용자 데이터"부분에서 이 스크립트의 코드를 아래에 붙여넣습니다.이것은 실행 노드에 필요한 소프트웨어를 설치할 것이다.js docker 응용 프로그램

  • 저장 및 탭 추가 부분에 기본값을 보류하고 건너뛰기

  • 보안 그룹을 구성하려면 새 보안 그룹을 만들고 포트 22(SSH)와 80(HTTP)을 엽니다.IP 범위의 경우 임의의 위치 또는 My IP*8을 선택할 수 있습니다.이것은 테스트에만 사용되기 때문에, 그 중 하나를 선택할 수 있습니다.나는 **와 함께 어디든지 갔다

  • 클릭하여 보고 시작하고 시작합니다

  • 에서 이 실례에 SSH로 연결하는 새 키 쌍을 만듭니다.잠시 후, 프로그램과 내부 부하 균형기를 위한 docker 이미지를 구축할 필요가 있습니다.p>


  • 이 두 실례 중 첫 번째가 이미 시작되었습니다.다음 인스턴스를 시작하는 것과 동일한 절차에 따라 서브넷을 이전 인스턴스 이외의 값으로만 변경하고 방금 만든 SSH 키 쌍을 사용하십시오


    어플리케이션 및 NGINX 구성 컨테이너


    이 강좌에서 응용 프로그램에서 이 리콜을 사용합니다:



    Link: https://github.com/sowmenappd/load_balanced_nodejs_app
    

    이것은 우리가 이 과정을 가속화하는 데 도움을 줄 것이다.재구매 협의의 층별 보기는 다음과 같다.


    app 폴더에는 노드 서버 소스 코드와 Dockerfile이 포함되어 있습니다.nginx 폴더에 설정 파일이 있습니다.업스트림 서버 포트 설정을 정의합니다:



    http{    
        upstream lb {        
            server 172.17.0.1:1000 weight=1;        
            server 172.17.0.1:2000 weight=1;        
            server 172.17.0.1:3000 weight=1;    
        }     
        server {        
            listen 80;        
            location / {            
                proxy_pass http://lb;        
            }    
        }
    }
    

    e 프로필은 주 NGINX 서버의 탐지 포트 80을 지정합니다. 루트 위치 "/"는 요청 (프록시 전송) 을 이 파일에 정의된lb의 상류로 전송합니다. 이것은 상류 대상입니다. 얼마나 많은 서버를 포함할지 지정합니다. (이것은 docker compose를 통해 설치한express 서버입니다. 잠시 후에 자세히 설명합니다.)리버스 프록시 로드 밸런싱이 포트 80에서 수행되는 트래픽을 조정할 때 이들 서버는 어떤 포트에서 내부적으로 실행됩니까

    우리의 예에서 상위 에이전트는 유량을 포트 1000, 2000, 3000으로 유도할 것이다.이 포트 번호는 env var로 모든express 서버에 전송되는 인스턴스의 내부 포트 값과 일치해야 합니다. 이 값은 docker compose YAML 파일에서 정의합니다

    모든 시작된 실례에 대해 다음과 같은 조작을 실행합니다:


    • 생성된 키 쌍
    • 을 사용하여 인스턴스에 SSH
    • 다음 터미널 명령을 실행하여 Dockerfile에서 응용 프로그램 이미지 구축


    git clone https://github.com/sowmenappd/load_balanced_nodejs_app.git
    cd load_balanced_nodejs_app/app
    docker build -t app .
    

    • 다음nginx 서버 docker 이미지 구축


    cd ../nginx
    docker build -t nginx-s .
    

    • 실행 docker images:


    • 두 번째 서버에 대해 docker compose를 변경해야 합니다.yml 파일.모든 어플리케이션(app1, app2, app3)의 경우 env var SERVER ID를 2로 변경해야 합니다.이것은 절대로 걱정할 것이 없다. 어떤 생산 서버도 이런 물건을 가지고 있지 않을 것이다.우리가 이렇게 하는 것은 단지 전시하기 위해서이다

    • 마지막 명령 실행:



    cd ..
    docker-compose up -d
    

    독립된 서버는express 프로그램의 세 프로세스를 백엔드에서 실행해야 합니다.이제 AWS에서 제공하는 로드 밸런서 AWS ALB를 사용하여 이 시스템을 설치하기만 하면 됩니다


    AWS ALB를 사용하여 시스템 설치


    이때 두 실례가 모두 마운트할 준비가 되어 있습니다.AWS에서 어플리케이션 로드 밸런서를 설정하려면 다음 절차를 따르십시오.


    1. EC2 대시보드로 이동하여 대상 그룹을 클릭합니다.를 클릭하여 대상 그룹을 생성합니다.
    2. target type:Instances를 선택하고 유효한 대상 그룹 이름을 제공한 다음Next를 클릭합니다.
    3. 실행 중인 두 인스턴스를 선택하고 아래의 Include as pending 을 클릭하면 포트가 80입니다.
    4. 를 클릭하여 대상 그룹을 생성합니다.
    5. 그런 다음 측면 메뉴(왼쪽)에서 로드 밸런서를 클릭합니다.
    6. 로드 밸런서 만들기 를 클릭하고 애플리케이션 로드 밸런서 카드 만들기 를 클릭합니다.
    7. 다음 화면에서 인스턴스를 시작할 때 선택한 사용 가능 영역을 선택한 다음 계속합니다.
    8. 새 보안 그룹을 생성하고 포트 80이 모든 IP 범위에 열려 있으면 다음을 클릭합니다.
    9. 기존 대상 그룹을 선택하고 사용자가 만든 대상 그룹을 가리킵니다.
    10. 다른 설정은 모두 좋으므로 [만들기]를 클릭할 수 있습니다.

    실례를 등록하고 건강 검사를 실행한 후 부하 균형기는 몇 분 안에 시작하고 실행해야 합니다.현재, 우리는 EC2 계기판에서 부하 평형기의 DNS 이름 >를 가져옵니다.로드 밸런서, 로드 밸런서의 DNS 이름 속성 복사


    DNS 이름을 브라우저에 붙여넣은 다음 Enter 키를 누릅니다.브라우저 페이지를 새로 고칠 때마다 응답이 다른 포트와 서버 ID 값으로 전송됩니다.기본적으로 NGINX 및 AWS 로드 밸런서는 루프 알고리즘을 사용하여 로드 밸런싱을 수행하므로 시스템이 검증됩니다



    결론


    는 우리가 이미 배치한 다중 부하 평형기 설정을 고려하여 우리의 시스템은 현재 매우 높은 가용성을 보장하고 장시간의 운행 중에 첨단과 대량의 유량을 견딜 수 있다.본 강좌의 후속 내용으로 원본 코드 관리와 통합된 배치 파이프라인을 만들고 유지하며 GitHub repo에 제출할 때 변경 사항을 서버에 배치하는 방법을 보여 드리겠습니다


    리소스


    좋은 웹페이지 즐겨찾기