목 차
• 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
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