AWS- 6

박형준·2024년 4월 16일

ELB 개념

ELB : 부하분산 처리 기능.

  • 로드 밸런서 : 트래픽을 대상그룹에 있는 인스턴스로 분산 시키는것.
  • 대상 그룹: 인스턴스를 분리해서 해서 묶어 놓은 그룹(장애 발생하면 자동으로 그룹에서 제외시킴)
  • 리스너 : 포트, 프로토콜등의 기준을 설정하는것.

*ELB 종류

  • CLB(classic) : 클래식으로 초기에 만들어 진 서비스, 현재 사용하지 않음.
  • ALB(application) : 애플리케이션을 대상으로 전송/차단을 결정 (7계층)
  • NLB(network) : 전송계층에 있는 프로토콜을 대상으로 전송/차단 결정(4계층)
  • GWLB(gateway): 게이트웨이 로드 밸런서 ( 방화벽 개념 )

*ELB 동작 방식

  • 외부에서 접속시 ELB도메인 주소를 이용해서 접속
    • ELB 구성도
    • ELB 구성 테이블

*cloudformation 서비스

  • / 스택 생성 / 기존 템플릿, URL 이용에 URL 넣기 에 아래 내용 입력 / 다음
  • 이름 입력 / 키 지정 / 다음 / 스택옵션 구성은 다음 / 전송
            
  • 템플릿을 통해 리소스 생성
  • 이름과 키페어 지정

*생성이 끝나면 EC2에서 4개의 EC2에 SSH를 이용해서 접속 해보기

yaml 파일의 리소스 테이블

  • VPC :
    • ELBVPC -> CidrBlock: 10.40.0.0/16, Key: Name(Value: ELB-VPC)
    • MyVPC -> idrBlock: 20.40.0.0/16, Key: Name(Value: My-VPC)
  • IGW:
    • ELBIGW, Key: Name(Value: ELB-IGW)
    • MyIGW, Key: Name(Value: My-IGW)
  • 라우팅 테이블:
    • ELBPublicRT: ELBVPC
    • MyPublicRT: MyVPC
  • 서브넷:
    • ELBPublicSN1 -> CidrBlock: 10.40.1.0/24
    • ELBPublicSN2 -> CidrBlock: 10.40.2.0/24
    • MyPublicSN -> CidrBlock: 20.40.1.0/24
  • 보안 그룹:
    • MySG: tcp'22', icmp
    • ELBSG: tcp'80', udp'161', tcp'22', icmp
  • EC2:
    • MyEC2: MyPublicSN
    • ELBEC21: ELBPublicSN1
    • ELBEC22: ELBPublicSN2
    • ELBEC23: ELBPublicSN2
  • 인스턴스 생성 후 ping test

*접속 후 테스트를 위한 S-1,2,3 에 대한 변수 설정

생성된 인스턴스(서버)의 public ip 확인

  • 서버 1 ip : 13.125.159.20
  • 서버 2 ip: 43.201.109.58
  • 서버 3 ip: 13.209.98.178
  • myEC2(client) 인스턴스에서 변수 지정 후 확인

*SNMP 161 테스트

  • [root@MyEC2 ~]# snmpget -v2c -c public $ec2s1 1.3.6.1.2.1.1.5.0 [ 5를 1~5로 바꿔주면 다른 결과 출력 ]
    • SNMPv2-MIB::sysName.0 = STRING: SERVER1
  • 생성된 인스턴스(서버)의 파일 확인(xff.php: 서버 정보 출력)
  • snmpget 명령어( test 용도 ): 숫자 5를 바꿔가며 네트워크 관리 가능, 각각의 서버 관리
  • myEC2에서 서버 호출해서 파일 확인 및 snmp 확인

*ALB 구축 - 애플리케이션을 기반으로 로드 밸런싱을 시켜주는것.

-EC2 대상그룹 생성

  • / 대상 그룹 / 대상그룹 생성 / 이름만 입력 (ALB-TEST-G) / 다음 / 대상그룹 등록은 모두 [아래에 보류 중인것으로포함 클릭 ] / 대상그룹 생성
    • 등록된 대상에서는 모두 체크 하고 대상 등록 클릭
  • 대상 그룹 생성
  • 그룹 구성 지정
  • 이름과 VPC(ELB) 설정
  • 대상 등록(어떤 대상을 그룹으로 만들 것인지)
  • 대상 선택된 것 확인
  • 그룹 대상 등록 클릭
  • 그룹 실행중인 것 확인 (그룹을 하나로 묶었음)

-EC2 로드 밸런서 생성

  • / 로드 밸런서 / 로드밸런서 생성 / ALB 생성 / 네트워크 매핑에서 ELB-VPC선택 두개 모두 체크 ( a, c )
  • 대상그룹 선택(ALB-TEST-G) / 보안그룹은 기존것 제거 하고 ELB 보안 그룹 선택 / 나머지는 기본으로 놔두고
    • 로드 밸런서 생성 클릭
  • 로드 밸런스 생성
  • 이름 지정
  • ELB VPC 사용(서버의 로드 밸런스를 구축해서), 서브넷 지정
  • ELB 보안그룹 사용
  • 트래픽 배분을 위해 리스너 설정 (생성한 대상 그룹 선택)
  • 로드 밸런서 생성 확인
  • 로드 밸런서 세부 정보 확인( 유형, VPC, 가용영역...)
  • 리스너 확인

리스너 추가 완료

  • ALB 단계를 통과하기 이전에 리스너를 추가하여 트래픽이 적은 서버를 동작시킨다

-생성이 끝나면 ALB로 동작 하는지 TEST

  • 메인 EC2에서 접속

-ALB DNS 이름을 변수로 지정

  • MyEC2에서 /
    • [root@MyEC2 ~]# alb=ALB-Test-338060492.ap-northeast-2.elb.amazonaws.com
    • [root@MyEC2 ~]# echo $alb
  • ALB dns이름을 변수로 지정
  • dns 이름 복사
  • ALB dns 이름을 변수로 지정 완료
  • 변수 지정된 것 확인
  • [root@MyEC2 ~]# dig $alb +short
    • 유동 IP두개가 보여짐
  • 유동 ip 확인
  • [root@MyEC2 ~]# curl $alb
    • ⇒ alb로 접속을 하면 Server-1,2,3 번을 로드밸런싱 해주면서 웹 페이지를 보여줌.
  • [root@MyEC2 ~]# for i in {1..30}; do curl $alb --silent ; done | sort | uniq -c | sort -nr
    • 30번 보냈을때 통계
  • curl 명령어를 통해 웹 서버가 돌아가면서 열리는 모습
  • 30번을 보냈을 때, 100번을 보냈을 때 통계(균일하게 분배)

라우터: 연결해주는 것
라우팅: 경로 설정

서버1: /dev/index.html
서버2,3: /mgt/index.html

*메인 서버(MyEC2)에서 원하는 Server로 접속해보기.(라우팅)

  • [root@MyEC2 ~]# curl $alb/dev/index.html --silent
    • ⇒ server-1에 있는 경로를 직접 지정 ,
    • server2,3 은 에러
  • [root@MyEC2 ~]# curl $alb/mgt/index.html --silent
    • ⇒ server-2,3에 있는 경로를 직접 지정,
    • server-1은 404
  • 라우팅 확인
  • dev밑의 파일이기 때문에 서버1만 정상적으로 호출
  • /dev/index.html의 파일을 호출할 때 서버1은 호출가능, 서버2,3은 호출 불가능 (서버1은 index.html파일이 dev아래의 파일이고, 서버2,3은 index.html파일이 mgt아래의 파일이라서 서버1이 연결될때는 열리고 서버2,3이 연결될때는 열리지 않는다)

*Server-1만으로 대상그룹을 생성

  • -EC2 / 대상그룹 /
    • 대상 그룹 생성 / 이름만 입력(SOL-TEST-G) 다음 / 대상 그룹 등록은 Server-1 체크 [ 아래 보류중인~ ]
    • 대상그룹 생성 / 아래쪽에 Server-1 체크하고 대상 등록 /
  • 서버 1만 대상 그룹 생성

*Server-2,3 만으로 대상그룹을 생성

  • EC2 / 대상그룹 /
    • 대상 그룹 생성 / 이름만 입력(SOL-23-TEST-G) 다음 / 대상 그룹 등록은 Server-2,3 체크 [ 아래 보류중인~]
    • 대상그룹 생성 / 아래쪽에 Server-2,3 체크하고 대상 등록 /
  • 서버 2,3을 대상 그룹 생성
  • 생성된 대상 그룹 확인

*Server-1에 대한 리스너 규칙 추가

  • EC2 / 로드 밸런서 /
    • 리스너 규칙 및 추가 탭 / 프로토콜[HTTP]체크 , 규칙 관리 / dev이름 입력 /
    • 조건 추가 에서는 /dev/*
    • 다음 / 대상그룹은 SOL-TEST(Server-1) 에 적용 / 우선 순위 1 다음 / 생성
  • 서버 1에 대한 리스너 규칙 추가
  • 이름 지정
  • 조건 추가(경로 지정, 원하는 파일만)
  • 추가한 조건 확인
  • 대상 그룹 지정
  • 우선 순위는 1( 중요한 파일이 있는 것이 먼저 )

*Server-2,3 에 대한 리스너 규칙 추가

  • EC2 / 로드 밸런서 / 리스너 규칙 및 추가 탭 / 프로토콜[HTTP]체크 , 규칙 관리 / mgt이름 입력
    • 조건 추가 에서는 /mgt/*
    • 다음 / 대상그룹은 SOL-23-TEST(Server-2,3) 에 적용 / 우선 순위 2 다음 / 생성
  • 서버 2,3에 대한 규칙 추가 대상 그룹 지정
  • 우선 순위: 2
  • 생성된 리스너 규칙 확인

*규칙 추가 후 각각의 그룹으로 테스트 해보면 에러 없이 해당 그룹으로만 테스트가 진행됨.

  • [root@MyEC2 ~]# for i in {1..10}; do curl $alb/dev/ --silent ; done | sort | uniq -c | sort -nr

  • [root@MyEC2 ~]# for i in {1..10}; do curl $alb/mgt/ --silent ; done | sort | uniq -c | sort -nr

  • 이전에 에러가 났던 명령어가 우선 순위를 정해둬서 에러가 나지 않는다
  • 경로 지정을 통해 서버 1만 호출한다
  • 서버 2,3을 트래픽이 없도록 호출한다(균일하게)

*NLB 생성 및 동작 확인

-대상 그룹 생성

  • EC2 / 대상 그룹 생성 /
    • 이름 입력 / UDP 161 / 상태검사[HTTP] / 다음 /
    • 대상등록 [모두 체크], 아래에 보류중인것으로 포함 체크 / 생성 / 대상보기에서도 모두 체크 하고 생성 /
  • UDP 프로토콜을 통해 대상 그룹 생성
  • 이름 지정한 후에 프로토콜을 UDP로 설정, VPC 지정
  • 상태 검사는 HTTP로 지정
  • 대상 그룹 지정 확인

-로드 밸런서 생성 / NLB 생성 /

  • 이름 입력 [NLB] / 아래와 같이 설정 하고 생성
  • NLB 로드 밸런스 생성
  • 유형을 네트워크로 설정
  • VPC 지정후 가용 영역 선택
  • 보안 그룹 선택
  • udp 프로토콜 선택후 생성한 대상 그룹 지정
  • 생성된 로드 밸런서 확인

*생성된 NLB 확인 및 DNS 이름 확인 및 변수 설정

  • $ NLB=NLB-6c664e38f058391a.elb.ap-northeast-2.amazonaws.com
    • #NLBs1=3.37.146.27
    • #NLBs2=13.125.26.93
  • DNS 이름 복사: NLBtest-hj-64d2541414e212af.elb.ap-northeast-2.amazonaws.com
  • dig $nlb +short: ip는 유동적이여서 오래쓰면 자동으로 변경
  • ip 변수 지정

*생성된 NLBs1, NLBs2에게 접속 테스트

  • snmp 작동 test
  • snmp 명령어를 통해 잘 작동하는지 테스트
  • 반복문을 이용해서 효과적으로 분산되는지 확인

*NLB속성 탭 / 편집 / 대상 정책을 활성화 하면 아래 그림처럼 트래픽 분산이 더 원활하게 이루어짐.

  • 로드 밸런서 속성 편집
  • 가용 영역을 트래픽이 몰리지 않게 설정( 교차 영역, 트래픽 분산 원활 )
  • 속도가 균일하게 나오는 것을 확인

*자원 삭제

  • 로드 밸런서 / 대상 그룹 삭제 / 스택 삭제하고 VPC에서 자원 확인

*NoSQL :

  • 스키마가 없는 데이터 베이스 로서 문서를 저장하는 저장소 [값 - 이름]
  • 스키마 란? DB에서 구조와 제약조건을 명시해 놓은것.(개체, 속성, 관계 및 조작에 관련된것)
  • 속도가 빠름 (배포 속도), 확장이 쉬움, 조회가 빠름, 사용 한 만큼만 비용이 지불.

-데이터를 불러오는 방식은 두가지 ( 스캔 방식 / 쿼리 방식 )

  • 스캔(Scan) 방식: 전체 데이터를 순차적으로 읽는 방식입니다.
  • 쿼리(Query) 방식: 쿼리 방식은 구조화된 쿼리 언어를 사용하여 데이터를 검색하고 조작하는 방식입니다

*DB생성

테이블 생성 /

  • 테이블 생성
  • dynamoDB 테이블 생성
  • 이름 지정 후 파티션 키(id)와 정렬 키(key) 지정

*콘솔에서 데이터 입력하기

  • 생성된 테이블 클릭 / 표 항목 탐색 / 맨 아래 항목생성 /
  • 콘솔에서 테이블에 데이터 추가
  • 항목 탐색에서 속성 편집을 이용하여 항목 추가
  • 추가된 데이터 확인

*함수(Lambda)를 이용해서 데이터 입력

  • IAM 기능으로 이동
    • 정책 생성
    • 역할생성 / 람다 선택 / 다음 / 람다 함수 생성에서 역할 생성 한거 검색 , 선택 / 다음 /
  • IAM 기능에서 정책 생성(람다 함수를 통해 테이블 생성)
  • 권한 지정( dynamoDB )
  • 쓰기 권한 부여( putitem )
  • 모든 리소스 허용
  • 정책 이름 지정
  • 정책 생성 확인
  • 역할 생성(람다 함수를 통해 테이블 생성)
  • 람다 서비스 선택
  • 생성한 정책 선택
  • 역할 이름 지정
  • 생성된 역할 확인
  • 람다 함수를 이용해서 데이터 추가
  • 람다 함수 생성( 이름 지정, 파이선으로 선택 )
  • 기존 역할 사용에서 생성한 역할 선택

*입력 후 TEST 클릭 TEST 진행 하고 잘 되면 Deploy 하고 배포가 성공이 되면 DynamoDB 창에 업로드 된것 확인

  • 람다 함수에서
  • 테이블 입력 코드 작성 후 배포
  • 생성된 항목 확인

*현 상황에서는 대량의 데이터는 업로드가 안됨. 대량의 데이터 업로드를 하려면 위에서 생성한 정책을 수정

  • IAM / 정책 / 생성한 정책 검색 [aws learner~~~jmw] / 정의된 권한 [서비스 클릭] /
    • 권한 더 추가 클릭 / 서비스 [DynamoDB 선택 ] 아래 처럼 쓰기권한 추가
  • aws-learner-dynamoDB-policy-hj 정책 수정의 권한 수정(대량의 데이터로 테이블 작성)
  • 정책 권한 수정(정책 편집기: 시각적으로 변경)
  • 쓰기 권한 수정(batchwriteltem 선택)
  • 리소스 모두에게 부여
  • 편집한 정책 권한 확인

코드 수정 후 업로드 [ 노란색 부분만 다른내용 입력 해도됨 ]

  • 람다 함수에서
  • 대량의 데이터를 업데이트 할 수 있는 코드 작성
  • 생성된 항목 확인

*대량의 데이터 업로드가 안되면..
IAM / 정책 / 위에서 생성한 정책 검색 / 편집 / 권한 추가에서 두가지를 한꺼번에 체크 하고 저장 후 다시 업데이트


*스캔 사용법 [ 기본은 스캔으로 선택 되어 있음 ]

  • 필터 클릭 확장 후 조건 입력 하고 실행 클릭 하면 조건에 맞는 데이터 추출됨.
  • dynamoDB-table에서
  • 스캔을 선택후 조건 설정
  • 조건에 맞게 정렬된 것 확인

0개의 댓글