13@nginx부하 균형

글 목록
  • Nginx 부하 균형
  • 1. 왜 부하 균형
  • 을 사용 합 니까?
  • 2. 흔히 볼 수 있 는 부하 균형
  • 3. 부하 균형 이 잡 힌 상용 소프트웨어
  • 4. 부하 균형 유형
  • 5. Nginx 부하 균형 설정
  • 1. 부하 균형 설정 문법 ngxhttp_upstream_module
  • 2. 환경 준비
  • 3. 준비 사이트
  • 4. 부하 균형 설정 파일
  • 5. 최적화 프로필
  • 6. nginx 부하 균형 에서 흔히 볼 수 있 는 문제
  • 6. nginx 부하 균형 스케줄 링 알고리즘
  • 1. 폴 링 설정 방법
  • 2. 가중 폴 링 설정 방법
  • 3.ip_hash 설정 방법
  • 7. nginx 부하 균형 상태
  • 1. down 상태 설정 테스트
  • 2. backup 상태 설정 테스트
  • 3. 접근 오류 상태
  • 4.max_conns 최대 연결 수 상태 설정 제한
  • 8. 부하 균형 nginx 건강 검진 모듈


  • Nginx 부하 균형
    \ # 메모: 대 리 는 기계 nginx 한 대 만 대리 할 수 있 고 한 위치 에서 대 리 를 할 수 있 습 니 다.
    1. 왜 부하 균형 을 사용 합 니까?
            Web         ,           ,         ,     Web       ,    Nginx    ,                   ,       。             、    、   
    
               SLB(Server Load Balance)    ,       SLB、  SLB                     。                           、        。
    
    
                  ,          ,                      ,                  ,             。             ,  Nginx       SLB
    

    2. 흔히 볼 수 있 는 부하 균형
    SLB		       
    LB		      
    CLB		       
    ULB		ucloud    
    
    
    #       
        
      
    Load Balance
    LB
    

    3. 부하 균형 상용 소프트웨어
    Nginx		# 1.9         ,1.9         ,         
    Haproxy		#     ,         
    LVS			#         
    
    
    #LVS          ,                      ,LVS     ,               ,      
    

    4. 부하 균형 유형
    #      
                   OSI         ,     Nginx     TCP/IP   ,              TCP/IP               ,            、           ,             。
    
    
    
    #      
                   ,                  ,      http       ,     http     、      、        、URL      、    、rewrite     ,           ,           ,  Nginx             SLB
    
    
    #           
                          ,                    、      ,                。
                 , :http        ,     Nginx       ,URL      、head     ,              。
      :           ,          
    

    5. Nginx 부하 균형 설정
    #Nginx           proxy_pass      .
    
    
    Nginx     Nginx        ,Nginx   location         , Nginx                   upstream     .
    

    1. 부하 균형 설정 문법 ngxhttp_upstream_module
    Syntax:	upstream name {
          ... }
    Default:	—
    Context:	http
    
    upstream backend {
         
        server backend1.example.com;
        server backend2.example.com;
    }
    
    server {
         
    	listen 80;
    	server_name www.linux.com
        location / {
         
            proxy_pass http://backend;
        }
    }
    

    2. 환경 준비
    호스트
    외부 네트워크 ip
    인터넷 ip
    신분.
    lb01
    10.0.0.4
    172.16.1.4
    부하 균형
    web01
    10.0.0.7
    172.16.1.7
    web
    web02
    10.0.0.8
    172.16.1.8
    web
    3. 준비 사이트
    #web01  
    
    [root@web01 conf.d]# vim node.conf 
    server {
         
        listen 80;
        server_name node.linux.com;
    
        location / {
         
            root /code/node;
            inde index.html;
        }
    }
    
    [root@web01 conf.d]# mkdir /code/node
    [root@web01 conf.d]# echo "  web01......"  >  /code/node/index.html
    [root@web01 conf.d]# systemctl restart nginx
    
    
    
    
    #web02  
    
    [root@web02 conf.d]# vim node.conf
    server {
         
        charset 'utf-8';
        listen 80;
        server_name node.linux.com;
    
        location / {
         
            root /code/node;
            index index.html;
        }
    }
    
    [root@web02 conf.d]# mkdir /code/node
    [root@web02 conf.d]# echo "  web02......"  >     /code/node/index.html
    [root@web02 conf.d]# systemctl restart nginx
    

    4. 부하 균형 설정 파일
    [root@lb01 conf.d]# vim node_proxy.conf 
    upstream node {
                        #     
        server 172.16.1.7:80;
        server 172.16.1.8:80;
    }
    
    server {
         
        listen 80;
        server_name node.linux.com;
    
        location / {
         
            proxy_pass http://node;
            include proxy_params;
        }
    }
    
    #  include      
    [root@lb01 conf.d]# ll /etc/nginx/proxy_params 
    -rw-r--r-- 1 root root 275 Feb 28 15:24 /etc/nginx/proxy_params
    [root@lb01 conf.d]# systemctl restart nginx
    

    5. 최적화 프로필
    [root@Nginx ~]# vim /etc/nginx/proxy_params
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     
    proxy_connect_timeout 30;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
     
    proxy_buffering on;
    proxy_buffer_size 32k;
    proxy_buffers 4 128k;
    

    6. nginx 부하 균형 흔 한 문제
                  ,Nginx        ,        down    ,Nginx             ,            ,  ,          down ,           :504、502、500,                 ,
    #  :
       proxy_next_upstream http_500 | http_502 | http_503 | http_504 |http_404;
      #          404,500...    ,                 ,         
    
    #    
    upstream test {
         
    	server 172.16.1.7:80;
    	server 172.16.1.8:80;
    	server 172.16.1.9:80;
    }
    server {
         
    
    	listen 80;
    	server_name linux.slb.cluster.local.com;
    	
    	location / {
         
    		proxy_pass  http://test;
    		include proxy_params;
    		proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404 http_403;
    	}
    }
    
    

    6. nginx 부하 균형 스케줄 링 알고리즘
    스케줄 링 알고리즘
    개술
    폴 링
    시간 순 으로 백 엔 드 서버 에 하나씩 할당 (기본 값)
    weight
    가중 폴 링, weight 값 이 클 수록 분 배 된 방문 확률 이 높 습 니 다.
    ip_hash
    모든 요청 은 IP 에 접근 하 는 hash 결과 에 따라 분 배 됩 니 다. 같은 IP 에서 백 엔 드 서버 에 고정 적 으로 접근 할 수 있 습 니 다.
    url_hash
    URL 에 접근 한 hash 결과 에 따라 요청 을 할당 합 니 다. 모든 URL 이 같은 백 엔 드 서버 로 향 합 니 다.
    least_conn
    최소 링크 수, 그 기 계 는 링크 수가 적 으 면 나 누 어 준다.
    #   ,    ,      ,     
    server 172.16.1.7:80 weight=1;
    server 172.16.1.8:80 weight=5;
    server 172.16.1.9:80 weight=100;
    
    

    1. 폴 링 설정 방법
    upstream node {
         
        server 172.16.1.7:80;
        server 172.16.1.8:80;
    }
    

    2. 가중 폴 링 설정 방법
    #               
    upstream node {
         
        server 172.16.1.7:80 weight=5;
        server 172.16.1.8:80 weight=1;
    }
    

    3.ip_hash 설정 방법
    #       IP         
    upstream node {
         
        server 172.16.1.7:80;
        server 172.16.1.8:80;
        ip_hash;
    }
    #              
    

    7. nginx 부하 균형 상태
    상태.
    개술
    down
    현재 server 는 부하 균형 에 잠시 참여 하지 않 습 니 다.
    backup
    예비 백업 서버
    max_fails
    요청 실패 횟수 허용
    fail_timeout
    경과 maxfails 실패 후 서비스 일시 정지 시간
    max_conns
    최대 수신 연결 수 제한
    1. down 상태 설정 테스트
    upstream node {
         
    	#           ,               
        server 172.16.1.7:80 down;
        server 172.16.1.8:80;
    }
    

    2. backup 상태 설정 테스트
    upstream node {
         
        server 172.16.1.7:80;
        server 172.16.1.8:80 backup;
    }
    

    3. 접근 오류 상태
    upstream node {
         
        server 172.16.1.7:80;
        server 172.16.1.8:80 max_fails=3 fail_timeout 10s;
    }
    

    4.max_conns 최대 연결 수 상태 설정 제한
    upstream node {
         
        server 172.16.1.7:80;
        server 172.16.1.8:80 max_conns=120;
    }
    

    8. 부하 균형 nginx 건강 검진 모듈
    #       
    [root@lb02 ~]# yum install -y gcc glibc gcc-c++ pcre-devel openssl-devel patch
    
    #     
    [root@lb02 ~]#wget http://nginx.org/download/nginx-1.16.1.tar.gz
    
    [root@lb02~]#    wget       https://github.com/yaoweibin/nginx_upstream_check_module/archive/master.zip
    
    [root@lb02~]# tar xf nginx-1.16.1.tar.gz
    [root@lb02~]# unzip master.zip
    [root@lb02~]# cd nginx-1.16.1/
    
    # p1: nginx     p0  nginx   
    [root@lb02 nginx-1.16.1]# patch -p1 <..>
    
    [root@lb02 nginx-1.16.1]#./configure --prefix=/data/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/data/nginx/nginx.conf --error-log-path=/data/log/nginx/error.log --http-log-path=/data/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --add-module=/root/nginx_upstream_check_module-master --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
    [root@lb02 nginx-1.16.1]# make  -j && make install
    
    
    [root@lb02 nginx-1.16.1]# vim /etc/nginx/conf.d/proxy.conf 
    upstream test {
         
            server 172.16.1.7:80;
            server 172.16.1.8:80;
            server 172.16.1.9:80;
            check interval=3000 rise=1 fall=2 timeout=1000;
    }
    server {
         
    
            listen 80;
            server_name linux.slb.cluster.local.com;
    
            location / {
         
                    proxy_pass  http://test;
                    # proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404 http_403;
                    include proxy_params;
            }
            
            location /upstream_check {
         
            	 check_status;
            }
    }
    
    interval:    
    rise:     
    fall:     
    timeout:    
    
    
    
    [root@lb02 nginx]# cat /etc/nginx/conf.d/test.conf 
    upstream test {
         
            server 172.16.1.7:80;
            server 172.16.1.8:80;
            server 172.16.1.9:80;
            check interval=3000 rise=1 fall=2 timeout=1000;
    }
    server {
         
    
            listen 80;
            server_name linux.slb.cluster.local.com;
    
            location / {
         
                    proxy_pass  http://test;
                    # proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404 http_403;
                    include proxy_params;
            }
            
            location /upstream_check {
         
            	 check_status;
            }
    }
    

    좋은 웹페이지 즐겨찾기