Nginx 서버 에 Sysguard 모듈 을 설정 하여 높 은 부하 예방 방안 을 자세히 설명 합 니 다.

5368 단어
nginx 는 HTTP 서버 로 서 다음 과 같은 몇 가지 기본 기능 이 있 습 니 다.
정적 파일, 색인 파일 및 자동 색인 처리 하기;파일 설명자 버퍼 를 엽 니 다.
캐 시 없 는 역방향 에이전트 가속, 간단 한 부하 균형 과 잘못 사용.
FastCGI, 간단 한 부하 균형 과 잘못 사용.
모듈 화 된 구조.gzipping, byte ranges, chunked responses, SSI - filter 등 filter 를 포함 합 니 다.한 페이지 에 존재 하 는 여러 SSI 를 FastCGI 나 다른 프 록 시 서버 에서 처리 하면 서로 기다 리 지 않 고 병행 할 수 있 습 니 다.
Nginx 는 성능 최 적 화 를 위해 개발 되 었 고 성능 은 가장 중요 한 고려 이 며 실현 에 있어 효율 을 매우 중시한다.이 는 커 널 ePoll 모델 을 지원 하고 높 은 부하 의 시련 을 겪 을 수 있 으 며 50, 000 개의 동시 연결 수 를 지원 할 수 있다 는 보고 가 있다.
Nginx 는 매우 높 은 안정성 을 가지 고 있다.다른 HTTP 서버 는 접근 의 피크 수 치 를 만 나 거나 누군가가 악의 적 으로 느 린 속도 로 연결 을 할 때 서버 의 물리 적 메모리 가 자주 소모 되 어 응답 을 잃 고 서버 를 다시 시작 할 수 있 습 니 다.예 를 들 어 현재 apache 가 200 개 이상 의 프로 세 스 에 오 르 면 웹 응답 속도 가 현저히 느 려 집 니 다.한편, Nginx 는 단계별 자원 배분 기술 을 사용 하여 CPU 와 메모리 사용량 이 매우 낮다.nginx 는 공식 적 으로 10, 000 개의 활동 적 인 연결 을 유지 하고 2.5M 메모리 만 차지 하기 때문에 DOS 와 같은 공격 은 nginx 에 게 거의 쓸모 가 없다 고 밝 혔 다.안정성 에 있어 서 nginx 는 lighthttpd 보다 한 수 위 다.
그러나 nginx 가 공격 을 받 거나 방 문 량 이 갑자기 커지 면 nginx 역시 부하 가 높 아 지 거나 메모리 가 부족 해서 서버 가 다운 되 어 사이트 에 접근 할 수 없습니다.오늘 이야기 할 해결 방법 은 타 오 바 오 가 개발 한 모듈 nginx - http - sysguard 에서 나 온 것 입 니 다. 주로 부하 와 메모리 가 일정한 밸브 값 에 이 르 렀 을 때 해당 하 는 동작 을 수행 합 니 다. 예 를 들 어 503, 504 또는 다른 것 을 직접 되 돌려 줍 니 다. 메모리 나 부하 가 밸브 값 의 범위 로 돌아 갈 때 까지 기 다 렸 다가 사이트 에서 사용 할 수 있 습 니 다.쉽게 말 하면 이 몇 개의 모듈 은 nginx 에 버퍼 시간 을 주 고 천천히 하 는 것 입 니 다. 1. nginx sysguard 모듈 1.1 다운로드 파일 을 설치 합 니 다.

# wget http://nginx.org/download/nginx-1.4.2.tar.gz
# wget https://github.com/alibaba/nginx-http-sysguard/archive/master.zip \
-O nginx-http-sysguard-master.zip
# unzip nginx-http-sysguard-master.zip
# tar -xzvf nginx-1.4.2.tar.gz

1.2 sysgrard 패 치 는 여기 서 nginx - 1.4.2 에 대응 하 는 패 치 를 찾 지 못 했 습 니 다. 1. 2.9 와 1. 3. 9 밖 에 없 었 습 니 다. 차라리 1. 3.9 를 시도 해 보 세 요. 차이 가 많 지 않 을 겁 니 다.

# cd nginx-1.4.2
# patch -p1 < ../nginx-http-sysguard-master/nginx_sysguard_1.3.9.patch

1.3 설치 nginx

# ./configure --prefix=/usr/local/nginx-1.4.2 \
--with-http_stub_status_module --add-module=../nginx-http-sysguard
# make
# make install

2. sysguard 명령 문법: sysguard [on | off] 기본 값: sysguard off 설정 세그먼트: http, server, location 스위치 모듈 문법:

sysguard_load load=number [action=/url]

기본 값: none 설정 세그먼트: http, server, location 에서 부하 밸브 값 을 지정 합 니 다. 시스템 의 부하 가 이 값 을 초과 하면 모든 요청 이 action 에서 정의 하 는 uri 요청 으로 재 설정 됩 니 다. URL action 이 정의 되 지 않 으 면 서버 는 503 언어 로 되 돌아 갑 니 다.

sysguard_mem swapratio=ratio% [action=/url]

기본 값: none 설정 세그먼트: http, server, location 은 교환 파 티 션 에서 사용 하 는 밸브 값 을 정의 합 니 다. 교환 파 티 션 이 이 밸브 값 을 초과 하면 후속 요청 은 모두 action 이 정의 하 는 uri 요청 으로 재 설정 합 니 다. URL action 이 정의 되 지 않 으 면 서버 는 503 문법 으로 되 돌아 갑 니 다.

sysguard_interval time

기본 값: sysguardinterval 1s 설정 세그먼트: http, server, location 정의 시스템 정보 업데이트 빈도, 기본 1 초. 문법:

sysguard_log_level info | notice | warn | error

기본 값: sysguardlog_level error 설정 단계: http, server, location 정의 sysguard 로그 단계 3. sysguard 사용 실례 3.1 nginx 설정

server {
  listen    80;
  server_name www.jb51.net www.heytool.com;
  access_log /data/logs/nginx/www.jb51.net.access.log main;
 
  index index.html index.php index.html;
  root /data/site/www.jb51.net;
 
  sysguard on;
  #       ,load   0.01,        5 10+
  sysguard_load load=0.01 action=/loadlimit; 
  sysguard_mem swapratio=20% action=/swaplimit;
 
  location / {
 
  }
 
  location /loadlimit {
    return 503;
  }
 
  location /swaplimit {
    return 503;
  }
}

3.2 테스트 부하 OK 의 경우 nginx 에 접근

# uptime 

 16:23:37 up 6 days, 8:04, 2 users, load average: 0.00, 0.01, 0.05

# curl -I www.jb51.net

HTTP/1.1 403 Forbidden
Server: nginx
Date: Thu, 03 Oct 2013 16:27:13 GMT
Content-Type: text/html
Content-Length: 162
Connection: keep-alive

사이트 에 파일 이 없 기 때문에 403 을 되 돌려 주 었 습 니 다. 실제로 괜 찮 습 니 다. 부하 가 밸브 값 을 초과 한 경우 nginx 에 접근 합 니 다.

# uptime 

 16:25:59 up 6 days, 8:06, 2 users, load average: 0.05, 0.04, 0.05

# curl -I www.jb51.net

HTTP/1.1 503 Service Temporarily Unavailable
Server: nginx
Date: Thu, 03 Oct 2013 16:26:19 GMT
Content-Type: text/html
Content-Length: 206
Connection: keep-alive

swap 가 밸브 값 을 초과 하 는 기능 은 더 이상 테스트 하지 않 겠 습 니 다.여러분 은 집에 돌아 가서 직접 테스트 해 보 세 요. 엔 딩 어 는 nginx 가 realserver 인 상황 에서 개인 적 으로 도 이런 방법 을 사용 하 는 것 을 추천 합 니 다. 만약 에 서버 부하 가 높 아 지면 보통 비교적 긴 시간 이 걸 려 야 정상 수준 으로 회복 할 수 있 습 니 다. 이 플러그 인 을 사용 한 상황 에서 부하 가 밸브 값 에 이 르 면 nginx 는 503 으로 돌아 갑 니 다.전단 에 고장 전 이 를 사용 하여 다른 서버 에 요청 을 보 냅 니 다. 이 서버 는 방문 하지 않 은 상태 에서 빠르게 정상 수준 으로 회복 되 고 즉시 작업 에 투입 할 수 있 습 니 다.밸브 값 을 초과 한 서버 처리 요청 속도 도 크게 떨 어 집 니 다. 이 모듈 을 사용 하면 요청 을 더욱 빠 른 서버 에 교묘 하 게 보 내 접근 속도 가 느 린 문 제 를 어느 정도 피 할 수 있 습 니 다. 앞에서 말 한 것 은 클 러 스 터 환경 에서 단일 환경 에서 고려 하지 않 아 도 됩 니 다.

좋은 웹페이지 즐겨찾기