4월 20일(목) 10~17시 한국컨퍼런스센터

 

✅ 교육 목표

  • NHN Cloud 서비스를 활용하여 2-tier 구조를 설계하고 구축할 수 있습니다.
  • 인프라 확장 기술인 Auto Scale 개념을 이해하고 활용할 수 있습니다.
  • 클라우드 서비스를 운영 관리에 필요한 서비스를 사용할 수 있습니다.

 

✅ 교육 목차

  1. 소규모 웹사이트 구축하기
  2. 인스턴스 시스템 모니터링 및 감시 설정하기
  3. 조건에 맞춰 서버 Scale In/Out 해보기

1. 소규모 웹사이트 구축하기

NHN Cloud에서 아래와 같은 아키텍처를 구성하는 실습을 진행해보았다!

 

 

Lab1. 기본 인프라 서비스 활성화

  1. 리전부터 확인하고 설정하기! 잘못된 리전에 만들었을 경우, 다 부수고 다시 만들어줘야 함..
  2. 기본 인프라 서비스 활성화하기

 

Lab2. 2개의 VPC 설정 / 인터넷 게이트웨이를 생성 후 라우팅 테이블에 연결

먼저, 사설망을 2개 생성한다.

  • 서비스용 : 웹 서버가 돌아갈 Service VPC
  • 관리용 : Private Subnet에 DB 서버가 돌아갈 mgmt VPC (Default VPC를 이걸로 변경)

 

사설망은 인터넷이 연결이 안 되어 있기 때문에, 인터넷 게이트웨이(문과 같은 역할)를 연결해야 한다.

 

단계는..

1. 인터넷 게이트웨이 생성

2. 라우팅 테이블(Service VPC)에 인터넷 게이트웨이 연결 (경로를 알려주는 것)

 

디폴트로 생성된 Default VPC의 경우 인터넷 게이트웨이가 자동으로 할당되어 있기 때문에

라우팅 테이블에서 Service VPC에만 인터넷 게이트웨이를 연결해주면 된다.

Lab3. Management vpc - public subnet 생성 / Service vpc - private subnet, public subnet 생성

  • mgmt vpc : Default Network의 경우, public용 subnet 또한 자동 생성 → Default Network를 서브넷 변경으로 이름만 변경
  • service vpc : private, public용 subnet 총 2개 생성
  • 헷갈리지 않게 네이밍이 대충 하지 말고 의미를 담는 것이 중요하다.

 

Lab4. mgmt vpc의 서브넷에 mgmt 인스턴스 생성

인스턴스를 생성 시, 네트워크 서브넷에 public-subnet-mgmt를 연결한다.

 

Lab5. 보안그룹 설정 (local → mgmt-server)

공인 IP를 통해 mgmt-server에 접속할 수 있게 mgmt-sg에 내 IP로 보안 규칙을 생성한다.

 

Lab6. Service VPC의 Private Subnet에 MariaDB 인스턴스를 생성

💡 RDS for DB vs DB Instance

 

✔️ RDS for DB

  • 복잡한 설정 없이 고가용성, 자동 백업, 모니터링을 UI 상에서 이용할 수 있음
  • PaaS형 상품
  • 설치 간편성 : 희망 서버 사양 선택 > 희망 DB 버전 선택 > 생성

1. 고가용성(HA)

  • Master와 Candidate Master 인스턴스가 나란히 생성됨
  • Master가 정지되면 Candidate가 자동으로 Master로 승격되어 장애를 막음

2. 자동화된 백업

  • 지정된 시간 범위 안에 자동으로 백업이 수행됨
  • Object Storage에 보관할 수 있고, 원하는 시점으로 복원할 수 있음

3. 손쉬운 설정 변경

  • 웹 콘솔을 통해 설정을 쉽게 변경할 수 있음

4. 모니터링

  • 하드웨어 및 DB 상태를 모니터링 할 수 있음
  • 슬로우 쿼리 같은 부분도 같이 제공
  • 임계치 설정 시 알림 설정도 받을 수 있음

 

✔️ DB Instance

  • OS 위에 DB를 설치한 단순 DB 설치형, 나머지는 고객이 관리
  • IaaS형 상품

 

 

Lab7. Service VPC의 Public 서브넷에 웹서버를 설치

 


  • mgmt vpc와 service vpc가 통신하기 위해 거쳐야 할 설정 단계!

mgmt vpc ↔ Sevice vpc

0. local에 있는 펨키를 mgmt-server로 전송

1. 피어링 게이트웨이 생성

2. 라우팅 테이블 두개 다 잡아주기

3. 보안그룹 mgmt에서 들어오는 것만 열어주면 됨

 

아래에서 따라해보자!

 

Lab8. Local 환경에서 mgmt-server로 키페어 전송

ssh -i key.pem centos@[mgmt-server public ip]

 

Lab9. mgmt VPC ↔ Service VPC를 피어링 작업 / 각각의 VPC 라우팅 테이블 설정

1. 네트워크 - 피어링 게이트웨이 - 생성

두 개의 네트워크가 사설 통신하기 위해서 피어링 게이트웨이를 생성해준다.

 

2. 네트워크 - 라우팅 - 라우트 선택 - 라우트 생성

mgmt는 service도 가야 되고, db에도 가야한다.

두 군데에 가야 되기 때문에 범위를 vpc 자체로 열어줄 것!

 

mgmt vpc 라우팅 테이블에서 10점 대역이 들어올 거니까 10점 대역이 피어링 게이트웨이를 타야 하므로

대상 CIDR에 10.0.0.0/16으로 설정한다.

service vpc의 라우팅 테이블은 192.168 대역이 피어링 게이트웨이를 타야 한다.

Lab10. 보안그룹 설정 ( mgmt → web, mydb )

 

Lab11. web1 → DB 서버 접속

먼저 보안그룹 설정이 필요하다.

 

  • 포트 : 3306

db 서버 보안그룹(db-sg)에 3306 포트를 열어주어야 한다.

 

  • IP : web-sg

web 서버가 현재는 1개지만 여러 개로 늘어날 수 있다고 하면,

db 서버 보안그룹(db-sg)에 web 서버 보안그룹(web-sg) 자체를 추가해주면

나중에 추가되는 web 서버를 db-sg에 매번 넣어주지 않아도 되어 편리하다.

 

🤔 db-sg 보안그룹에 web-sg 보안그룹 자체를 추가한다는 건?

web-sg를 보안그룹으로 쓰는 모든 인스턴스를 db-sg에서 허용해달라는 의미와 같다.

 

두둥

web 서버에서 db 서버에 접속했다!

 

Lab12. 웹서버의 /www/var/htmlprocess_create.php 파일 수정

db 서버의 ip로 변경

 

Lab13. 생성한 웹서버를 이용하여 이미지 생성

  • 이미지 : 현재까지 구성한 인스턴스 상태를 스냅샷

환경구성을 다 하고 이미지를 생성하는 것이 좋다.

인스턴스를 정지 후 이미지 기능을 사용하는 것을 권고한다.

 

1. Compute - 인스턴스

2. 생성하고자 하는 인스턴스 중지

3. 이미지 생성

 

4. Compute - Image에서 확인

 

Lab14. LB 생성 및 설정

💡 Load Balancer

트래픽을 분산시켜주는 기능

 

✔️ 알고리즘에 의해 동작 방식이 조금씩 다름

1. Round Robin (라운드 로빈)

  • 트래픽을 전달할 인스턴스를 순차적으로 선택하는 가장 기본적인 방식

2. Least Connections (최소 연결 우선 선택)

  • TCP 연결 수를 기준으로 하며 부하가 가장 적은 인스턴스로 보내는 방식
  • 특정 인스턴스에 부하가 집중되는 상황 방지

3. Source IP(원본 IP 기준 선택)

  • 청자의 원본 IP를 해싱하여 처리할 인스턴스를 선택
  • 한 사용자의 요청을 기억해 매번 동일한 인스턴스에서 처리하고자 할 때 유용

 

✔️ 지원 프로토콜

1. TCP : TCP(4계층) LB 제공

2. HTTP / HTTPS : OSI 7계층 LB 제공

3. TERMINATED_HTTPS : HTTPS에서 SSL Termination 기능이 추가돼 LB 제공

 

✔️ 리스너

  • LB 앞 단에 리스너가 있음
  • 리스너가 듣고자 하는 포트와 프로토콜 포트만 허용해줌
  • HTTP/80를 듣고자 하는데, HTTPS가 들어오려고 하면 못 들어감
  • 리스너가 듣고 있는 정보만 통신 가능
  • 필요한 수만큼 리스너 생성하면 됨
  • 보안그룹에 LB 정보가 없으면 통신이 안 되고 부하 분산도 안 됨

 

✔️ IP접근제어기능

🤔 LB로 들어오는 트래픽이 너무 많으면? 너무 느려지면?

IP를 확인해서 이슈가 있을 때 LB에 IP접근제어기능을 쓰면 좋음

 

 

LB 생성

1. network - Load Balancer

2. health check를 해서 인스턴스 상태를 확인함 -> 80 포트, url 체크(웹서버 특정 디렉토리에 특정 파일이 있는지)

3. 네트워크 설정 (web1)

 

 

 

Lab15. web-img 이미지로 web2 서버 생성 / 종료된 web1 서버 시작

1. 정지했던 web1 서버 켜기

2. 인스턴스 생성 시 이미지 사용

 

Lab16. LB에 Floating IP를 할당

LB에 공인 IP 할당

 

Lab17. LB에 web-2 서버를 추가

  • LB - 인스턴스 연결 추가

로드 밸런서에 라운드 로빈할 총 2대의 인스턴스(web1, web2) 추가 완료!

 

  • web-sg 보안 그룹에 로드 밸런서 사설 IP 추가해주기

안 그러면 80포트로 모든 IP가 다 들어오게 되어버린다.

 

30초에 한번씩 추가하기 때문에 바로 안 될 수도 있음 기다려줘야 한다.

대신 LB를 재시작하면 바로 적용된다.

로드밸런서 - 리스너 - 리스너 변경 아무것도 변경하지 말고 누르면 재시작 된다.

 

결과

 

새로 고침 할 때마다 두 인스턴스로 라운드 로빈 되는 걸 확인할 수 있다!

 

Lab18. 웹사이트 확인

1. 데이터 입력

 

2. DB 서버 접속 후 데이터 삽입 확인!

웹에서 입력한 정보가 DB에 잘 들어가있는 것을 볼 수 있다.

 

+ 추후 도메인을 달고 싶다면 LB에 도메인 설정만 해주면 된다.

+ 원본 서버에 점검이 필요하면 mgmt-server를 통해 사설망으로 들어가서 점검할 수 있다.

 

로드 밸런서 모니터링

기본적으로 제공해주는 통계 기능을 통해 로드 밸런서를 모니터링 할 수 있다.


2. 인스턴스 시스템 모니터링 및 감시 설정하기

무료니까 꼭 이용해보기

1분 단위 수집해주고, 이슈가 있으면 연락을 준다.

 

  • Compute - System Monitoring

 

단계는..

1. 레이아웃 만들기

2. 알림

2-1 알림 받을 사용자 그룹 생성

 

2-2 어떤 그룹에 어떤 알림 줄 지 생성

 

2-3 감시 설정

 

2-4 서버 목록 설정

 

2-5 사용자 그룹 설정

 

 

테스트

  • systemctl stop httpd로 강제로 httpd 종료해보기

 

SMS와 이메일로 바로 연락이 온다!

 

 

시스템 모니터링 - 이벤트 현황 페이지에서도 확인할 수 있다.


3. 조건에 맞춰 서버를 Scale In/Out 해보기

필요에 따라 서버를 확장하거나 축소하는 것

 

💡 Scaling

인스턴스 또는 컴퓨팅 파워를 확장하는 것

 

  • Scale Up : 장비의 설비 성능을 높이는 것

 

  • Scale Out : 장비의 설비 규모를 늘리는 것

Auto Scaling Group

  • Scale In/Out을 자동으로 해주는 것
  • 인스턴스를 추가로 생성 또는 삭제하는 조건과, 조건이 만족하는 경우 수행할 행동을 정의한 것
  • 최소, 최대, 구동 인스턴스는 스케일링 그룹에서 반드시 정의해야 하는 매개변수
    • 최소, 최대 : 만들어질 수 있는 limit 수
    • 구동 : 돌아갈 인스턴스
  • 임계치 또는 감축 정책을 미리 설정해놓으면 지속적으로 모니터링 하다가 조건이 만족하면 Scale In/Out 함
  • 모니터링은 아래 항목 중에 원하는 항목을 선택하면 됨

  • 어떤 값을 보고 움직일까? Auto Scaling Group 안에 있는 인스턴스의 평균값으로 움직임
  • Instance Template을 사용하면 좋음
    • 자주 사용하는 인스턴스 구성 요소 정보를 미리 정의해 보관하는 서비스

 

설정

1. 인스턴스 템플릿 설정

스펙은 한 번 설정하면 나중에 바꿀 수 없다.

 

2. Compute - Auto Scale

2-1 인스턴스 템플릿으로 인스턴스 설정

2-2 스케일링 그룹 설정

증설 정책 - 재사용 대기 시간 → 쿨타임 : 한번 수행하고 나면 쿨타임 동안은 조건이 만족해도 오토 스케일링을 하지 않음

 

로드 밸런서랑 연동해서 자동으로 LB 밑으로 들어가도록 한다.

 

설정 결과

  • 오토 스케일링 그룹 생성

 

  • 인스턴스 템플릿 + 로드 밸런서 -> 인스턴스 생성

 

  • 로드 밸런서 인스턴스에 오토 스케일링 인스턴스가 추가됨

 

3대에서 움직이다가 4대가 됐다가 3대가 됐다가 그런 방식이다.

 

⚠️ 오토 스케일링으로 만들어진 인스턴스는 콘솔에서 삭제하거나 중지할 수 없음

 

 

부하 테스트 방식

  • 리눅스 도구 Stress를 이용하여 부하테스트 진행
  • web-auto에서 해야 됨
  • stress -c 1 --timeout 240
  • 인스턴스 > web-auto > 모니터링 > 전체 팝업으로 보기
  • 오토 스케일 > web-auto > 통계 > 평균 값 보여주는 것

 

결과

1. 인스턴스 1대가 추가됨

 

2. 오토 스케일 인스턴스 목록에도 추가됨

 

3. 로드 밸런서에도 2대 추가됨

 

 

4. 나중에 축소될 때는 먼저 만들어진 인스턴스가 삭제됨

 

 

모든 로그는 Cloud Trail에서 확인 가능

오토 스케일은 SYSTEM이 해준걸 알 수 있다.

 

++ 리소스 반납

다 썼으면 잊지 말고 꼭 리소스 반납하기

  1. 인스턴스 삭제
  2. 서비스 비활성화
  3. 조직 삭제

 

NHN Cloud 전반적인 기능을 알차게 배울 수 있는 유익한 시간이었다.

이미지, 인스턴스 템플릿, VPC, 라우터, 피어링, 로드 밸런서, 모니터링, 스케일링까지-!

특히 처음에 구성할 아키텍처를 먼저 보여주시고 직접 실습을 통해서 따라가니까 더 이해가 잘 된 것 같다.

엔클 최고당

✅ 공식문서

인스턴스 생성 과정

  1. 조직 생성 (그룹의 개념, 프로젝트를 여러개 소유할 수 있음)
  2. 프로젝트 생성
  3. 서비스 추가
  4. Compute > Instance > + 인스턴스 생성
  5. 이미지 설정
    1. 이미지 종류(CentOS, Ubuntu, Windows 등), 최소 블록 스토리지(저장공간 크기), 비트
  6. 인스턴스 정보 설정
    • 인스턴스 이름, 타입(리소스 사양) 수, 키 페어(ssh -i [키페어파일] [OS]@[IP])
  7. 네트워크
  8. 플로팅 IP (외부에서 접근 가능할 수 있게 만든 IP, 해당 설정을 해야 외부에서 접근 가능)
  9. 보안 그룹 (인스턴스에 port를 오픈해주는 역할, ssh는 22번 포트이므로 외부에서 접근 시 22번 포트를 오픈해야 접근 가능)

테스트용 인스턴스 정보

  • 이미지 : CentOS 7.9
  • 인스턴스 정보
    • 이름 : mj-test
    • 타입 : m2, 4core, 8gb
    • 수 : 1개
    • 키페어 이름 : mj-keypair3
  • 블록 스토리지
    • 타입 : HDD
    • 크기 : 40gb
  • 네트워크 : 플로팅 IP 설정
  • 보안그룹 : JMJ

인스턴스 접속 방법

  • 외부에서 인스턴스에 접속할 수 있게 플로팅 IP 설정 필요
    • '플로팅 IP 관리' 메뉴에서 설정
  • 터미널에서 ssh로 접속하는 방법
$ ssh -i [키페어파일] [OS]@[플로팅 IP]
  • 접속 정보에 있는 커맨드를 복사할 수도 있음
  • 보안그룹 설정
    • 해당 인스턴스의 '네트워크' 메뉴 or Network > Security Groups 에서 보안 규칙 생성
    • TCP, 포트 22(SSH), 자신의 IP 주소/22를 입력 후 저장
    • 주의) 수신 0.0.0.0 허용 은 추가하면 안됨 -> 보안 상 문제
    • IP 주소 확인 : https://www.whatsmyip.org/more-info-about-you/
  • 포트 열려있는지 확인할 때
    • 특정 포트로 접근 시도해서 타임아웃 유무 확인
telnet xxx.xxx.xxx.xxx 22

nc -v -z host.docker.internal 4505
nc -v -z host.docker.internal 4506

nmap -sS -q -p 4505-4506 host.docker.internal

- telnet 말고도 nc나 nmap로도 포트 열려있는지 체크 가능

 

 

참고

https://base-on.tistory.com/449?category=939974

+ Recent posts