새로운 강의는 이제 https://memi.dev 에서 진행합니다.
memi가 Vue & Firebase로 직접 만든 새로운 사이트를 소개합니다.

바로가기


모던웹(NEMV) 혼자 제작 하기 3기 - 36 서버 오토스케일 정리

4 분 소요

지난강좌의 싱글서버로 개발은 충분합니다.

하지만 완전히 서버를 잊고 살고 싶으신 분은 이번편을 확인하시기 바랍니다.

사용자가 늘어나고 줄어나는 것을 탄력적으로 운영할 대비까지 미리 해놓는 것입니다.

나중에 사용자가 폭주했을 때 대처하려면 혼란스럽기 때문에 아무도 없을 때 미리 해두면 좋습니다.

물론 자잘한 설정을 추후에 안할 수는 없지만..

큰 설정 없이 충분히 실무에서 쓸만한 서버 오토스케일에 대해 알아보겠습니다.

오토스케일 개념

간단히 시스템 성능이 사용자 요청에 비례하게 설계하는 것입니다.

사용자가 많아지면 시스템 성능을 올리고, 적어지면 내리는 것을 자동으로 하는 것이죠..

오토스케일 개념을 알기 위해서 스케일업(Scale-up)과 스케일아웃(Scale-out)에 간단히 알아보겠습니다.

스케일업(Scale-up)

alt scale-up

한명이 10번 클릭하는 기준으로 그려봤습니다.
사실 인당 요청수는 알 수가 없는 것이죠..

과거에는 대부분 하드를 더 꼽고 메모리도 더 꼽았습니다.

하드야 핫스왑으로 꽂았지만 메모리는 서버를 끄고 드라이버로 뚜껑 열고 꼽아야했죠..

그나마 최근 클라우드 서버는 잠시 중지하고 메모리 사양 더 올리고 키면 되는 것입니다.

결국 스케일업이란 하드웨어 성능을 올리면 끝입니다.

문제는 크게 3가지 입니다.

  • 사양 올리기의 한계:
    사용자가 100명일때는 2코어 4기가 시스템으로 200명일때는 4코어 8기가로 1억명일때는 한서버로는 안되죠..
  • 사양 내리기의 모호함:
    잘나가던 서비스를 하던 서버라 메모리를 128기가까지 올려놨는데.. 점점 사람들이 떠나가는데 메모리를 뽑기가 쫌 애메한것이죠..
  • 급격한 사용자 증가:
    만명 계산해둔 서버였는데 오픈이벤트로 광고 때려서 백만명이 오면 터집니다.

스케일아웃(Scale-out)

alt scale-out

사용자가 늘어 날 수록 서버 성능을 늘리는 것이 아닌 서버 복제본을 늘립니다.

그림을 보시면 사용자는 항상 로드밸런서에게 요청을 하는 것입니다.

로드밸런서가 아주 강력해야겠죠?

로드밸런서는 연결되어있는 서버중 건강한 서버를 골라서 연결해줍니다.

데이터베이스는 어떤 서버든 한곳을 바라보기 때문에 사용자는 일관된 데이터를 받아볼 수 있습니다.

적당한 순간에 서버를 늘리고 줄이고 하면 탄력적 운영이 가능하겠죠?

스케일업의 단점이었던 사양 올리기와 내리기가 해결되었습니다.

하지만 급격한 사용자 증가는 완전하지 않습니다.

오픈이벤트는 미리 계산해두고 십만명 쯤 오겠지 하고 100대 늘려놧는데 광고가 잘되서 백만명이오면 또 터집니다.

오토스케일(Auto-scale)

alt auto-scale

그래서 서버들의 건강 상태를 측정해서 자동으로 복제되고 삭제되고 하는 것이 오토스케일이란 것입니다.

데이터베이스

사실 제일 중요한 것은 데이터베이스입니다.

서버야 다시 켜면 그만이지만 데이터가 망가지면 큰일이죠.(은행이라면 끔직하겠죠)

서버들은 1대던 천대던 한 데이터베이스만 바라보는데, 데이터베이스는 안전할까요?

그래서 데이터베이스 또한 스케일아웃이 되고 있습니다.

몽고디비는 시작부터 스케일아웃으로 설계를 했습니다.

개발시에는 싱글로 쓰지만 일반적으로 샤드라 불리우는 3대의 서버가 데이터를 분산해서 가지고 있습니다.

alt auto-scale

3대의 서버가 분산해서 가지고 자동으로 용량과 서버가 증가합니다.

직접 리눅스 서버에 설치하기 보다는 클라우드 서버를 꼭 이용하시기 바랍니다.

처음엔 재미로 운영해봤지만.. 점점 디비 튜닝에 많은 에너지가 소모됩니다..

직접 해보기

토스트 서버 설정으로 직접 오토스케일 구성을 해보겠습니다.

한번 개념을 이해해놓으면 다른 클라우드서버도 어짜피 다 그게 그겁니다.

전체 강좌가 마무리 될 때 즈음 AWS로 마이그레이션 해보겠습니다.

스케일 아웃 테스트

서버 준비

켜지면 바로 서비스가 되는 정도의 서버가 되어야합니다.

지난번 강좌까지의 서버면 충분합니다. pm2 startup으로 시작하면 바로 서비스가 되기 때문이죠~

서버 정지

alt server stop

alt server stop confirm

이미지를 만들기 위해 서버를 정지합니다.

이미지 만들기

alt make image

alt make image2

alt make image3

복제하기 위한 이미지를 만들어 놓습니다.

복제 이미지로 서버 생성

alt image new

alt image new2

alt image new3

만들어 놓은 이미지로 인스턴스를 생성합니다.

서버 시작

alt server restart

복제하기 위해 정지해놨던 서버 시작

로드 밸런서 생성

alt lb1

alt lb2

중간에 헬쓰체크라는 것이 있는데 이것으로 서버들의 상태를 판단합니다.

/로 요청하니 index.html과 더불어 엄청난 덩어리를 30초마다 요청합니다.

실제 서버에서는 /api/lb 등으로 간단하게 res.status(200).send 정도로 줘야겠죠?

alt lb3

로드 밸런서에 공인아이피 할당

alt lb ip

alt lb ip2

사용자는 로드밸런서에 접속하는 것입니다.

실제 사용 시엔 도메인의 주소가 되겠죠?

각 서버들 ssh 연결

로드 밸런싱이 되고 있는지 확인하기 위해서 터미널을 두개 열어놓고 확인합니다.

공인 아이피가 없는 서버는 공인아이피가 있는 서버에 들어가서 내부 아이피로 접속해야 됩니다.

정말 번거로운 접속입니다만.. 보여주기 위한 것이고 실제로는 들어갈 일이 없습니다.

공인아이피가 있는 서버에 연결

$ ssh -i nemvKey.pem centos@133.186.134.13
$ sudo -i

키 카피

$ vi nemvKey.pem # 피씨에 있는 키 긁어와서 루트에 만듬
$ chmod 600 nemvKey.pem

공인아이피가 없는 서버에 연결

터미널을 하나 더 열어서 공인아이피가 있는 서버에 연결한 후

$ ssh -i nemvKey.pem centos@192.168.0.21
$ sudo -i

두 서버 모두 로그 확인

$ pm2 log

각각 연결된 화면

alt terminal multi

nemv 서버와 nemvCp 서버 각각 연결된 화면입니다.

브라우저에서 로드밸런서로 접속

alt lb ip get

로드 밸런서 아이피로 접속해봅니다.

alt lb br

페이지를 새로고침할때 마다 각각의 서버가 요청을 받는 것을 확인할 수 있습니다.

alt lb br2

서버마다 디비가 따로 놀고 있는 것도 확인해 볼 수 있습니다.

실제 서버에서는 당연히 외부 디비를 써서 한곳을 지정해야합니다.

오토스케일 사용하기

서버들 종료

alt server stop

테스트를 위해 기존 서버들은 종료 시킵니다.

종료 안시켜도 상관은 없습니다. 기존 서버가 없이 잘 동작되는 모습을 보여주려 한것입니다.

오토스케일 탬플릿 생성

alt as tp1

alt as tp2

alt as tp3

복제할 이미지를 골라서 템플릿을 생성합니다. 서버생성과 거의 비슷합니다.

alt as tp4

생성된 탬플릿입니다. 앞으로 어떤 조건에 따라서 이 템플릿으로 서버가 만들어지는 것입니다.

스케일링 그룹 생성

만들어진 탬플릿으로 조건을 만들어서 생성 및 삭제가 자동으로 되게하는 스케일링 그룹을 만듭니다.

alt as sg1

alt as sg2

조건을 추가하면 메모리 사용률도 넣을 수 있지만 복잡해서 안 넣었습니다.

alt as sg3

테스트를 위해 cpu 사용률이 1분동안 10% 이상이면 1개 생성하고 5% 이하면 1개 제거하는 로직으로 처리했습니다.

서버 생성 확인

alt as sg4

스케일링 그룹 생성과 동시에 최소 1개는 있어야되기 때문에 생성되고 있는 모습입니다.

브라우저 확인

브라우저로 확인해보면 잘 동작되는 것을 알 수 있습니다.

부하 주기

부하 테스트는 여러가지 툴이 있지만 간단하게 ab라는 명령어로 테스트 해봤습니다.

ab는 ApacheBench의 약자로 맥에는 기본으로 깔려있습니다.

$ ab -c 100 -n 100 -t 180 http://133.186.144.193/
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 133.186.144.193 (be patient)
Completed 5000 requests
Completed 10000 requests

100개의 연결과 100개의 요청개수로 3분동안 로드밸런서에 부하를 주었습니다.

원래 ab -c 10 -n 10으로 했는데 10%가 안넘는지 서버 생성이 안됨..

증가 확인

alt as sg5

복제 서버 한대가 증가하는 것을 확인 할 수 있습니다.

감소 확인

1분동안 CPU 5% 이내이기 때문에 2분기다리고 인스턴스 확인해보시면 감소한 것을 확인할 수 있습니다.

응용편: 서버 강좌를 마치며

서버편을 모두 마침니다..

더 만지작거리고 싶은 것이 있긴 하지만.. 이정도면 더이상 서버 걱정없이 개발에 몰두할 수 있을 것 같습니다.

나중에 강좌 진행되면서 도메인, ssl, 업데이트 다룰 때 다시한번 서버를 언급하겠지만..

중요한 것은 모던웹 제작은 서버도 디비도 백엔드도 프론트도 아닙니다.

혼자 제작하는 데 의미가 있기 때문에 전체를 볼 줄 아는 식견이 필요합니다.

영상

댓글남기기