nginx + keepalived 높 은 부하 균형 사용 가능

쓸데없는 말 은 그만 하 겠 습 니 다. nginx 설치 와 배치, 그리고 부하 균형 도 있 습 니 다. 제 가 쓴 다른 글 인 을 볼 수 있 습 니 다. 그리고 부하 균형 에 관 한 글 도 있 습 니 다. 제 가 쓴 다른 두 편의 글 을 보 세 요. 하 나 는 'lvs + keepalived 부하 균형' 이 고 다른 하 나 는 'haproxy + keepalived 부하 균형' 입 니 다. 세 가지 부하 균형 의 차 이 는?제 가 옮 긴 글 을 볼 수 있 습 니 다. 다음은 설정 절차 에 직접 들 어 갑 니 다.
1. 시스템 환경
    :CentOS release 5.9 (Final) x86 32     
nginx  :   1.2.8  
keepalived  :    1.2.4

 keepalived:192.168.207.130

 keepalived:192.168.207.131


VIP:192.168.207.140 
WEB_1:192.168.207.129 80   
WEB_2:192.168.207.130 8080   
WEB_3:192.168.207.131 8080  

2. nginx 설정 파일 사용자 정의
192.168.207.130 과 192.168.207.131 에서 작 동 합 니 다.
useradd nginx
vi /usr/local/nginx/conf/nginx.conf

내용 은 다음 과 같다.
#        
user nginx nginx;    
#        
worker_processes 2;    
#       PID      
error_log logs/error.log notice;    
pid logs/nginx.pid;    
#                  
events {    
    use epoll;    
    worker_connections 1024;     #  nginx          worker_processes * worker_connections  
}    
#  http   ,                      
http {    
    #  mime      
    include mime.types;  #    nginx         ,   conf/mime.types           
    default_type application/octet-stream;   #          
    #          
  
    log_format main '$remote_addr - $remote_user [$time_local] '   
    '"$request" $status $bytes_sent '   
    '"$http_referer" "$http_user_agent" '   
    '"$gzip_ratio"';    
  
    log_format download '$remote_addr - $remote_user [$time_local] '   
    '"$request" $status $bytes_sent '   
    '"$http_referer" "$http_user_agent" '   
    '"$http_range" "$sent_http_content_range"';    
    #          
    client_header_buffer_size 1k;    
    large_client_header_buffers 4 4k;    
    #  gzip      
    #gzip on;    
    #gzip_min_length 1100;    
    #gzip_buffers 4 8k;    
    #gzip_types text/plain;    
    #output_buffers 1 32k;    
    #postpone_output 1460;    
    #  access log    
    access_log logs/access.log main;    
    client_header_timeout 3m;    
    client_body_timeout 3m;    
    send_timeout 3m;    
    sendfile on;    
    tcp_nopush on;    
    tcp_nodelay on;    
    keepalive_timeout 65;    
    #                
  
    upstream mysvr {    
        #weigth      ,                
        server 192.168.207.129:80 weight=5;    
        server 192.168.207.130:8080 weight=5;    
        server 192.168.207.131:8080 weight=5;  
    }    
    server { #     web   ,  8080    
        listen        8080;  
        server_name    192.168.207.131;          #      ip  
        index     index.html index.htm;  
        root        /var/www/html;  
        #error_page     500 502 503 504    /50x.html;  
        #location = /50x.html {  
        #    root     html;  
        #}  
        }   
    #          
    server {    
        listen 80;    
        server_name 192.168.207.140;                   #   VIP
        #charset gb2312;    
        #                
        access_log logs/three.web.access.log main;    
        #     /img/*, /js/*, /css/*   ,        ,   squid    
        #        ,       ,    squid           
        #location ~ ^/(img|js|css)/{    
        #   root /data3/Html;    
        #   expires 24h;  
        #}   
            #  "/"           
        location / {    
            proxy_pass http://mysvr;  #           web     
            proxy_redirect off;    
            proxy_set_header Host $host;    
            proxy_set_header X-Real-IP $remote_addr;    
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
            client_max_body_size 10m;    
            client_body_buffer_size 128k;    
            proxy_connect_timeout 90;    
            proxy_send_timeout 90;    
            proxy_read_timeout 90;    
            proxy_buffer_size 4k;    
            proxy_buffers 4 32k;    
            proxy_busy_buffers_size 64k;    
            proxy_temp_file_write_size 64k;  
        }    
        #    Nginx      ,       --with-http_stub_status_module    
        location /NginxStatus {    
            stub_status on;    
            access_log on;    
            auth_basic "NginxStatus";    
            auth_basic_user_file conf/htpasswd;     #      ,htpasswd -bc filename username password  
        }  
    }  
}   

3. keepalived 설정 파일 사용자 정의
vi /etc/keepalived/keepalived.conf

내용 은 다음 과 같다.
global_defs {
   notification_email {
        [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_http_port {
                script "/etc/keepalived/check_nginx.sh"         ###    
                interval 2                             ###    
                weight 2                                ###      
}
vrrp_instance VI_1 {
        state MASTER                            ###      
        interface eth0                             ###     
        virtual_router_id 51                    ###            
        priority 101                                 ###     MASTRE       BAUCKUP
        authentication {
                     auth_type PASS
                     auth_pass 1111
        }
        track_script {
                chk_http_port                     ###        
        }
        virtual_ipaddress {
             192.168.207.140                            ###    VIP   
        }
}

4. 사용자 정의 스 크 립 트 쓰기
vi /etc/keepalived/check_nginx.sh

내용 은 다음 과 같다.
!/bin/bash
A=`ps -C nginx --no-header |wc -l`                ##       nginx         A
if [ $A -eq 0 ];then                                         ##            
        /usr/local/nginx/sbin/nginx
        sleep 3
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
                  /etc/init.d/keepalived stop                       ##     keepalived   
        fi
fi

nginx 가 시작 되 었 는 지 확인 하 는 것 입 니 다. 시작 하지 않 으 면 nginx 를 먼저 시작 합 니 다. 3 초 후에 시작 되 지 않 으 면 keepalived 프로 세 스 도 닫 습 니 다. 그러면 keepalived 에서 넘 어 갈 수 있 고 높 은 가용성 을 제공 합 니 다. 여기 서 keepalived 서 비 스 는 높 은 가용성 을 제공 합 니 다. nginx 는 백 엔 드 웹 서버 의 부하 균형 을 제공 합 니 다.
여기에 스 크 립 트 에 실행 권한 을 더 해 야 합 니 다. 다음 과 같 습 니 다.
chmod +x /etc/keepalived/check_nginx.sh

5. 서비스 시작 및 테스트
여기 서 먼저 말씀 해 주세요. WEB 에서...1. 저 는 시스템 자체 가 가지 고 있 는 apache 를 사 용 했 습 니 다. 어젯밤 에 웹 서버 를 사용 하 는 것 이 비교적 편리 합 니 다. 그러면 저 는 keepalived 를 잘 시작 하면 ok 입 니 다. 왜냐하면 check 를 이용 할 수 있 기 때 문 입 니 다.nginx. sh 스 크 립 트 는 nginx 를 자동 으로 시작 합 니 다.시동 걸 었 어.방문 하 다.http://192.168.207.140백 엔 드 에 있 는 세 대의 웹 서버 콘 텐 츠 를 교대로 방문 할 수 있 습 니 다. 여기 서 메 인 keepalived 서 비 스 를 끄 고 높 은 가용성 을 테스트 한 다음 keepalived 서버 에 있 는 / var / log / messages 에서 이러한 로 그 를 볼 수 있 습 니 다.
Apr 19 17:42:44 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
Apr 19 17:42:45 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
Apr 19 17:42:45 localhost Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.
Apr 19 17:42:45 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.207.140
Apr 19 17:42:45 localhost Keepalived_vrrp: Netlink reflector reports IP 192.168.207.140 added
Apr 19 17:42:45 localhost Keepalived_healthcheckers: Netlink reflector reports IP 192.168.207.140 added
Apr 19 17:42:45 localhost avahi-daemon[4204]: Registering new address record for 192.168.207.140 on eth0.

계속 방문http://192.168.207.140백 엔 드 웹 서버 세 대 에 접근 할 수 있 습 니 다.
그리고 원주 keepalived 를 열 면 keepalived 서버 에서 로그 디 스 플레이 를 관찰 할 수 있 습 니 다.
Apr 19 17:42:50 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.207.140
Apr 19 17:44:06 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Received higher prio advert
Apr 19 17:44:06 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE
Apr 19 17:44:06 localhost Keepalived_vrrp: VRRP_Instance(VI_1) removing protocol VIPs.
Apr 19 17:44:06 localhost Keepalived_vrrp: Netlink reflector reports IP 192.168.207.140 removed
Apr 19 17:44:06 localhost Keepalived_healthcheckers: Netlink reflector reports IP 192.168.207.140 removed
Apr 19 17:44:06 localhost avahi-daemon[4204]: Withdrawing address record for 192.168.207.140 on eth0.

원래 의 주종 을 회복 한 결과 가 있다 는 뜻 이다.
생산 환경 에서 백 엔 드 기기 도 끊 을 수 있 습 니 다. 하지만 신경 쓰 지 마 세 요. nginx 는 자동 으로 session 을 좋 은 백 엔 드 웹 서버 에 배정 합 니 다.
ok, 여기까지 모두 끝 났 습 니 다. 친 측 실천, 성공 을 기원 합 니 다.

좋은 웹페이지 즐겨찾기