20170609 tech day_4th-nginx(lb)-이재훈

17
Nginx Load Balancing 이재훈( [email protected]) 2016-06-09

Upload: ymtech

Post on 29-Jan-2018

75 views

Category:

Software


0 download

TRANSCRIPT

NginxLoad Balancing

이재훈( [email protected])

2016-06-09

목 차

• NGINX 란?

• NGINX vs APACHE

• NGINX 특징

• NGINX 사용 사례

• LB(Load Balancing) 란?

• LB(Load Balancing) 장점

• LB(Load Balancing) 알고리즘

• 테스트 구성도

• NGINX 설치 및 실행

• LB(Load Balancing) 설정

• VM 간의 테스트

2

NGINX 란?

• 오픈 소스 기반의 reverse proxy 서버로 HTTP 뿐만 아니라 HTTPS, SMTP, POP3, IMAP 프로토콜을 지원한다.

• 웹 서버 소프트웨어로, 가벼움과 높은 성능을 목표로 하고, 적은 수의 thread로 많은 클라이언트 처리할 수 있다.

• 비동기(ASYNC) 이벤트 기반(ioctl, send, recv, epoll)

• 더 적은 자원으로 더 빠르게 데이터를 서비스 한다.

3

NGINX vs APARCHE

• NGINX

– 하나의 프로세스(또는 쓰레드)에서 이벤트 처리

• 메모리를 적게 할당

• 비 동기 처리(Block이 되더라도 대기하지 않음)

– 백엔드와 ajp 통신이 어렵고, 모듈 개발이 어려우며, Aparche Http 서버처럼 다양한 모듈이 없다. (단점)

– 윈도우용 Nginx는 native win32 api를 이용하며, select()연결만 사용하기 때문에 향상된성능을 기대하기는 어렵고, 이외의 몇몇 제약 때문에 아직 베타버전으로 간주된다.

• APARCHE

– 요청 하나당 프로세스(또는 쓰레드)가 처리하는 구조

• 프로세스가 Block 되는 경우 처리 완료될 때까지 대기

• 프로세스(또는 쓰레드) 메모리를 많이 할당

– 다양한 다중 처리 모듈

4

NGINX 특징

• HTTP 프록시와 웹 서버 기능– 정적 파일과 인덱스 파일 표현, 자동 인덱싱 기능.

– 캐싱을 통한 리버스 프록시

– 로드 밸런싱

– 고장 진단

– SSL 지원

– 캐싱을 통한 FastCGI 지원

– Name-, IP-기반 가상서버

– FLV 스트리밍

– MP4 스트리밍 모듈을 이용한 MP4 스트리밍

– 웹페이지 접근 인증

– gzip 압축

– 10000개의 동시 접속을 처리할 수 있는 능력

– URL 다시쓰기 (URL rewriting)

– 맞춤 로깅

– 서버 사이드 기능 포함

– WebDAV

• 메일 프록시 기능– SMTP, POP3, IMAP 프록시

– STARTTLS 지원

– SSL 지원

5

6

NGINX 사용 사례

LB(Load Balancing) 란?

7

• 부하 분산

• 처리량을 최대화, 응답 시간을 최소화, 임의의 단일 리소스의 과부하 방지, 자원 사용을 최적화하는 것을 목표로 한다.

• 안정성과 가용성 증가

• 멀티 레이어 스위치, DNS 서버, 서버 팜, NNPT(Network News Transfer Protocol), 고 대역폭 파일전송 프로토콜 등에 사용된다.

Load Balancing

질의 요청

Client

Server

Server

Server

Client

Client

LB(Load Balancing) 장점

8

• 각 노드의 성능과 전체 시스템 성능을 향상시킨다.

– 저렴한 비용으로 다수의 서버를 증설하여 경제적으로 비용절감

– 확장성

– 높은 생산량과 신뢰성

• 작업 유휴 시간을 감소시킨다.

– 응답시간 최소화

– 자원 사용률 최대화

Load Balancing 알고리즘 종류

• Round Robin (순차방식)

• Least Connection (최소접속방식)

• Weighted Least Connection (가중치 최소접속방식)

• Fastest Least Connections (응답시간방식)

• Adaptive (최소대기방식)

• Fixed (고정방식)

9

• 각 서버 운영체제

– Ubuntu 14.04

• Dig Client (1대)

• LB(Load Balancing) 서버 (1대)

– Nginx (192.168.45.128:5000)

• DNS Server (3대)

– pDNS 서버

• 192.168.45.134:53

• 192.168.45.135:53

• 192.168.45.137:53

테스트 구성도

10

LB(Nginx)http://192.168.45.128:5000

Dig 요청

DNS Server

DNS Server

DNS Server

Client

http://192.168.45.134:53

http://192.168.45.135:53

http://192.168.45.137:53

NGINX 설치 및 실행

• NGINX 설치

– $sudo apt-get update

– $sudo apt-get install nginx

• nginx 설치

• nginx 설치가 완료되면 자동으로 시작된다.

11

NGINX 설치 및 실행

• NGINX 실행

– $sudo service nginx start or $sudo /etc/init.d/nginx start $sudo apt-get install nginx

• nginx 실행

– $sudo service nginx stop or $sudo /etc/init.d/nginx stop

• nginx 정지

– $sudo service nginx restart or $sudo /etc/init.d/nginx restart

• nginx 재시작

– $sudo service nginx reload or $sudo /etc/init.d/nginx reload

• nginx 리로드

12

LB(Load Balancing) 설정 - 1

• nginx.conf 설정

– $cd /etc/nginx

• nginx 디렉토리로 이동

– $sudo vi nginx.conf

• LB 설정을 위하여 nginx.conf 파일 편집

13

LB(Load Balancing) 설정 - 2

① 로그 포맷– 일반적인 Access 로그

• $body_bytes_sent : 응답헤더를 세지 않고 클라이언트로 보낸 바이트 수• $bytes_sent : 응답헤더를 세지 않고 클라이언트로 보낸 바이트 수• $connection : 연결된 일련 번호• $connection_requests : 요청에 의해 연결된 현재 번호• $msec : 로그에 milliseconds 시간을 남긴다.• $request_length : 요청 길이• $request_time : 요청 시간• $status : 응답 상태• $time_iso8601 : ISO 8601 표준 형식의 현지 시간• $time_local : 공통 로그 형식의 현지 시간• $remote_addr : 방문자의 IP_Address가 표시된다.

– nginx Load Balance Log_format 관련• $upstream_addr : 로그 밸런싱에 응답하는 웹 서버• $upstream_reponse_time : 로드 밸런싱 되는 웹 서버의 응답 시간• $upstream_status : 서버 응답 코드

② upstream 설정– 부하분산, 속도 개선과 같은 역할을 한다.– 여러 서버가 순차적으로 일을 할 경우 서비스를 처리하는 서버를 의미– 형태

upstream 이름 {[ip_hash;]server host 주소: 포트 [옵션];.....

}– 옵션

• ip_hash : 같은 방문자로부터 도착한 요청은 항상 같은 업스트림 서버가 처리 할 수 있게 한다.• weight=n : 업스트림 서버의 비중을 나타낸다. 이 값을 2로 설정하면 그렇지 않은 서버에 비해 두배 더 자주 선택된다.• max_fails=n : n으로 지정한 횟수만큼 실패가 일어나면 서버가 죽은 것으로 간주한다.• fail_timeout=n : max_fails가 지정된 상태에서 이 값이 설정만큼 응답하지 않으면 죽은 것으로 간주한다.• down : 해당 서버를 사용하지 않게 지정한다. ip_hash; 지시어가 설정된 상태에서만 유효하다.• backup : 모든 서버가 동작하지 않을 때 backup으로 표시된 서버가 사용되고 그 전까지는 사용되지 않는다.

– 예제

• ip_hash를 통해 같은 같은 방문자일 경우 같은 ip서버를 호출한다.• 서버 192.168.0.100:9000은 남들보다 2배 더 많이 호출된다.• 서버 192.168.0.102:9000은 30초간의 timeout시간이 있으며 3번 실패 시 더이상 호출을 하지 않는다.

③ server (호스트)설정– listen : 호스트 포트를 설정– 서버 이름 설정(server_name)– 초기 페이지 설정(index)– location : 웹사이트의 특정 위치에 적용할 설정 그룹을 정의한다.

14

VM 간의 테스트 - 1

15

• pDNS 서버 구동 (3개)

VM 간의 테스트 -2

16

• Dig Client 요청

VM 간의 테스트 -3

17

• LB 서버 (nginx) Log 확인

• pDNS 서버 Log 확인