IT Japan

Nginx의 로드 밸런서의 구축 본문

IT/인프라

Nginx의 로드 밸런서의 구축

swhwang 2017. 5. 26. 14:42
반응형

Nginx의 로드 밸런서의 구축

Nginx의 로드 밸런서설정의 목차
Nginx인스톨
Nginx 글로벌설정(nginx.conf)
Nginx의 가상호스트 설정(ld.conf)

Nginx의 인스톨

Nginx를 설치하려면 소스와 RPM 패키지 카라의 설치가 있지만, 여기에서는 RPM 패키지의 설치를 설명한다.

NginxのRPM패키지로부터 인스톨

nginx.org 제공 저장소에서 nginx 패키지를 설치
공식 다운로드 사이트 "Pre-Build Linux Packages"에서 저장소의 RPM 파일을 다운로드하여 설치합니다.
# wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
# rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm

리포지터리 수정(/etc/yum.repos.d/nginx.repo)
nginx.repo 다른 저장소 패키지와 충돌을 피하기 위해 기본적으로 비활성화 해 둔다.
# vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=0

Nginx인스톨(RPM)
# yum install --enablerepo=nginx nginx


Nginx의 기본 설정

Nginx의 설정파일에 관해서

설정파일내용
Nignx의 설정전에、Nignx설정파일 구성에 관해서 확인하자.

core모듈의 설정 events { event모듈의 설정 } http { http모듈의 설정 } mail { mail모듈의 설정 }


HTTP컨텍스트의 구성

http { http모듈의 설정 server { サーバ의 설정 location PATH { URI의 설정 } location PATH { URI의 설정 } ... } server { ... } }



Nginx글로벌 설정(nginx.conf)

하기가Nginx의 글로벌 설정이 됩니다. 상세는「Nginx의 기본설정설명」을 참조해주십시요.

# vi /etc/nginx/nginx.conf

user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; #로그 포맷 설정 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; #로드 밸런서 설정은 별도의 파일로 정의 include /etc/nginx/conf.d/lb.conf; }


Nginx기본설정의 설명

로그 포맷
"$ http_x_forwarded_for"를 끝으로 추가되어 있습니다 만, Apache의 combine 형식과 비슷한 형식으로되어 있습니다.
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';


Nginx의 가상호스트의 설정

가상 호스트 설정은 "/ etc / nginx / conf.d / lb.conf"파일에 작성하고 전역 설정 파일 (/etc/nginx/nginx.conf)에서 include시킨다.

가상호스트설정 파일의 내용
server디렉토리는, Apache와 같은 설정을 하는 부분입니다.
또 server디렉토리는, 다른 파일( /etc/nginx/conf.d/lb.conf)에 정의하고 있습니다.

# vi /etc/nginx/conf.d/lb.conf
server {
    listen       80;
    server_name  www.hoge.co.jp;
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

   #백 엔드 서버에 클라이언트 IP 인도
   # 클라이언트의 IP 주소($proxy_add_x_forwarded_for;)
    proxy_set_header Host            $host;
    proxy_set_header X-Real-IP       $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;

    location / {
        proxy_pass http://backend;
    }

}

   #로드 밸런서 설정
upstream backend {
      ip_hash;
      server 172.20.1.201:80 max_fails=3 fail_timeout=30s ;
      server 172.20.1.202:80 max_fails=3 fail_timeout=30s ;
      server 127.0.0.1:8080  down;
}
    



Nginx의 가상 사이트 설정 설명

가상호스트
 가상 호스트를 복수 설정하려면 server 지시문을 추가해야합니다.

에러 페이지(Sorry 페이지로써 활용)
멤버 서버가 다운 된 경우 Nginx의 error_page 옵션에서 지정한 페이지가 표시됩니다.
이를 이용하여 간단한 Sorry 페이지로 이용하는 것도 가능 하겠지요.

    error_page   500 502 503 504  /error.html;
    location = /error.html {
        root   /data/www/www.hoge.co.jp/error/;
    }

※/data/www/www.hoge.co.jp/error/error.html를 Sorry 페이지의 내용으로 해둔다.

백 엔드 서버에 클라이언트 IP 인도
Niginx를 로드 밸런서하면 구성원 서버의 액세스 로그 클라이언트 IP 주소는 모든 Niginx의 IP가되어 버리기 때문에, 헤더에 클라이언트 IP를 부여하여 구성원 서버에 정보를 넘긴다.

proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 클라이언트의 IP 어드레스 proxy_set_header X-Forwarded-Host $host; # 오리지날 호스트명 클라이언트가 Host 리퀘스트 헤더에 전달。 proxy_set_header X-Forwarded-Server $host; # 프록시 서버의 호스트명 proxy_set_header X-Real-IP $remote_addr;

X-Forwarded-For를Apache의 로그포워드에 추가하는 설정은 후술한다.
백엔드 서버의 설정 연계
 「/」아래 모든 백엔드 서버에 배분.
  proxy_pass로 지정하는 호스트명(URL)과 upstream의 값과 일치시킨다.

    proxy_pass http://backend;
   upstream backend


LB의 설정개요

세션 유지

소스IP에 의해 세션유지 ※1

멤버 서버

172.20.1.201:80
172.20.1.202:80

 서버 옵션

실패횟수:3회
TimeOut:30초

Sorry서버 페이지

127.0.0.1:8080
・설정발췌

   upstream backend {
      ip_hash;
      server 172.20.1.201:80 max_fails=3 fail_timeout=30s ;
      server 172.20.1.202:80 max_fails=3 fail_timeout=30s ;
      server 127.0.0.1:8080  down;
    }


세션유지
 ip_hash,sticky※1
 ※1 sticky session 는、nginx표준의 기능에 들어있지않습니다.3rd파티의 모듈을 이용해서 사용할수 있습니다.

server 옵션

Server 옵션

개요

weight

(초기값=1) 전 서버의 weight값의 합계를 분모(단, backup서버는 빼고)로써、여기에 분자를 지정하는 것으로、이 비율이 서버군안의  대응서버의 분산비율이된다.

max_fails

접속실패시의 최대 시도횟수

fail_timeout

30s초 접속실패를 판단하는 타임아웃시간。 단,  proxy_connect_timeout と proxy_read_timeout에  의해 관계한다

down

항상 다운 서버에 지정. 단,  ip_hash 지정이 있으면 해시가 생성된다.

backup

backup지정이 없는 통상 서버가 모두 다운했을때  이서버에 접속한다.


Sorry서버 지정
※Server 옵션에backup붙이면 Sorry서버설정이 되지만、ip_hash와병용하면 에러가 된다.
nginx의 에러페이지를 Sorry 서버의 페이지로써 활용할 수 밖에 없다.

Nginx의 로그 로테이트

RPM에 인스톨한 경우, 하기의 설정은 이미 되어있다.

# cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
        daily
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 640 nginx adm
        sharedscripts
        postrotate
                [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
        endscript
}

백엔드 서버(Apache)설정

X-Forwarded-ForをApache의 로그 출력시킨다.
Apache의 로그 포맷에 %{X-Forwarded-For}i를 추가해서、클라이언트 IP를 로그에 남긴다.

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-Forwarded-For}i" combined



반응형

'IT > 인프라' 카테고리의 다른 글

vCenter Server란?  (0) 2017.11.24
ESXi에서 RAC를 구축 [RAC 구축의 사전 작업]  (0) 2017.05.26
Redmine과Git의 이행  (0) 2017.05.26
Vagrant에 lxc를 사용한다.  (0) 2017.05.25
요구정의와 요건정의의 차이를 생각한다.  (0) 2017.05.25
Comments