Nginx 부하 균형 및 군집 실현

참고 문서:https://www.cnblogs.com/xiugeng/p/10155283.html#_label0 https://zhuanlan.zhihu.com/p/108577218
1 환경 준비
호스트 이름
ip
역할.
묘사 하 다.
hadoop101
192.168.88.101
주 Nginx
클 라 이언 트 요청 수신 에 사용
hadoop102
192.168.88.102
Nginx 에서
주 Nginx 가 끊 으 면 주 Nginx 가 클 라 이언 트 요청 을 처리 합 니 다.
hadoop103
192.168.88.103
웹 서버 1
nginx 를 웹 서버 프 록 시 정적 페이지 로 사용 하고 다른 웹 서버 (예 를 들 어 tomcat) 를 사용 할 수 있 습 니 다.
hadoop104
192.168.88.104
웹 서버 2
nginx 를 웹 서버 프 록 시 정적 페이지 로 사용 하고 다른 웹 서버 (예 를 들 어 tomcat) 를 사용 할 수 있 습 니 다.
2 Nginx 부하 균형
hadop 101 과 hadop 102 동작 이 같 습 니 다.
  • 설치 의존
  • #          ,gcc-c++     ,zlib  gzip  ,openssl    ssl,devel           
    [root@hadoop101 software]# yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel
    
    #PCRE      Nginx    Rewrite   
    [root@hadoop101 software]# wget https://jaist.dl.sourceforge.net/project/pcre/pcre/8.42/pcre-8.42.tar.gz
    [root@hadoop101 software]# tar -zxvf pcre-8.42.tar.gz
    [root@hadoop101 software]# cd pcre-8.42 
    [root@hadoop101 pcre-8.42]# ./configure
    [root@hadoop101 pcre-8.42]# make && make install
    [root@hadoop101 pcre-8.42]# pcre-config --version
    
  • nginx 설치
  • [root@hadoop101  software]# wget https://nginx.org/download/nginx-1.18.0.tar.gz
    [root@hadoop101  software]# tar -xvf nginx-1.18.0.tar.gz
    [root@hadoop101 software]# cd nginx-1.18.0
    
    #           ,          ,--with            ,        ,      --with-      
    [root@hadoop101 nginx-1.18.0]# cat auto/options | grep YES  
    
    #  ,prefix      ,http_stub_status_module http_ssl_module   http https  ,with-stream stream  ,with-pcre pcre  
    [root@hadoop101 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/opt/software/pcre-8.42  --with-stream=dynamic
    
    #  (  objs  )   (--prefix  )
    [root@hadoop101 nginx-1.18.0]# make && make install
    
  • 모듈 추가 (필요 시)
  • #          、               
    [root@hadoop101 nginx-1.18.0]# /usr/local/nginx/sbin/nginx -V
    configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/opt/software/pcre-8.42  --with-stream=dynamic
    
    #     
    [root@hadoop101 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/opt/software/pcre-8.42  --with-stream=dynamic --with-http_gzip_static_module --with-http_auth_request_module --with-http_realip_module
    
    #     
    [root@hadoop101 nginx-1.18.0]# make
    #     nginx    copy     
    [root@hadoop101 nginx-1.18.0]# cp -r /opt/module/nginx-1.18.0/objs/nginx /usr/local/nginx/sbin/
    
  • 부하 균형 설정
  • worker_processes  1;
    events {
         
        worker_connections  1024;
    }
    http {
         
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        upstream web {
         
            ip_hash;
            server 192.168.88.103 max_fails=1 fail_timeout=10;
            server 192.168.88.104 max_fails=1 fail_timeout=10;
            # server 192.168.88.103 weight=1 max_fails=1 fail_timeout=10;
            # server 192.168.88.104 weight=2 max_fails=1 fail_timeout=10 backup;
        }
        server {
         
            listen       80;
            server_name  localhost;
    
            location / {
         
                proxy_pass http://web;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
         
                root   html;
            }
        }
    }
    

    부하 균형 프로 세 스: 1) 가상 호스트 가 사용자 요청 을 받 아들 입 니 다. 2) 가상 호스트 가 역방향 프 록 시 를 찾 습 니 다.사용자 요청 6) 데이터 서버 요청 수락 및 처리 요청 7) 데이터 서버 응답 요청 Nginx 8) Nginx 응답 요청 사용자
    2.1 부하 균형 전략
    nginx 의 upstream 은 현재 4 가지 방식 의 분 배 를 지원 합 니 다.
  • 폴 링 (기본 값): 모든 요청 은 시간 순서에 따라 서로 다른 백 엔 드 서버 에 할당 되 며, 백 엔 드 서버 다운 이 떨 어 지면 자동 으로 제거 할 수 있 습 니 다.weight (가중치) 는 폴 링 확률 을 지정 하고 weight 와 방문 비율 이 정비례 하여 백 엔 드 서버 의 성능 이 고 르 지 않 은 경우 에 사용 합 니 다.
  • ip_hash: 모든 요청 은 ip 에 접근 하 는 hash 결과 에 따라 분 배 됩 니 다. 그러면 모든 방문객 이 백 엔 드 서 비 스 를 고정 적 으로 방문 할 수 있 습 니 다. 장점 은 session 문 제 를 해결 할 수 있 습 니 다.따라서 첫 번 째 는 정적 페이지 만 처리 할 수 있 고 이런 방식 으로 동적 사 이 트 를 처리 할 수 있다.
  • fair (제3자): 백 엔 드 서버 의 응답 시간 에 따라 요청 을 분배 하고 응답 시간 이 짧 은 우선 분배 합 니 다.
  • url_hash (제3자): url 에 접근 한 hash 결과 에 따라 요청 을 할당 하고 모든 url 을 같은 백 엔 드 서비스 로 지정 합 니 다. 백 엔 드 서버 가 캐 시 일 때 유효 합 니 다.

  • 부하 균형 서버 파라미터
    매개 변수
    설명 하 다.
    down
    현재 server 가 부하 에 잠시 참여 하지 않 음 을 표시 합 니 다.
    weight
    기본 값 은 1 입 니 다. weight 가 클 수록 부하 가중치 가 큽 니 다. (폴 링 정책 에 사용 되 며, ip hash 는 사용 할 수 없습니다)
    max_fails
    요청 실패 횟수 는 기본적으로 1 이 며, 최대 횟수 를 초과 하면 proxy 로 되 돌아 갑 니 다.next_upstream 모듈 정의 오류
    fail_timeout
    시간 초과 실패, 서버 연결 시 시간 초과 시 maxfails 가 지정 한 실패 횟수 는 failtimeout 시간 내 에 서버 를 사용 할 수 없습니다. 기본 값 은 10s 입 니 다.
    backup
    다른 모든 비 백업 기기 다운 이나 바 쁠 때 만 백업 기 계 를 요청 합 니 다.그래서 이 기계 가 제일 가 벼 워 요.
    2.2 예시
    http://192.168.88.111:9030/bme-sso-server/swagger-ui.html ——》 http://192.168.88.103:9030/bme-sso-server/swagger-ui.html
    worker_processes  1;
    events {
         
        worker_connections  1024;
    }
    #http    
    http {
         
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        upstream web {
         
            ip_hash;
            server 192.168.88.103 max_fails=1 fail_timeout=10;
            server 192.168.88.104 max_fails=1 fail_timeout=10 down;
            # server 192.168.88.103 weight=1 max_fails=1 fail_timeout=10;
            # server 192.168.88.104 weight=2 max_fails=1 fail_timeout=10 backup;
        }
        upstream bme-sso-server {
         
            ip_hash;
            server 192.168.88.103:9030 max_fails=1 fail_timeout=10;
            server 192.168.88.104:9030 max_fails=1 fail_timeout=10;
        }
    
        server {
         
            listen       80;
            server_name  localhost;
    
            location / {
         
                proxy_pass http://web;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
         
                root   html;
            }
        }
        server {
         
            listen       9030;
            server_name  localhost;
    		location / {
         
                proxy_pass http://bme-sso-server;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
         
                root   html;
            }
        }
    }
    
    #tcp    
    stream{
         
    	log_format proxy '[$time_local] $remote_addr->$upstream_addr  '
                     '$protocol $status $bytes_sent $bytes_received '
                     '$session_time '
                     '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
    	access_log logs/tcp-access.log proxy ;
    	open_log_file_cache off;
    	
    	upstream dns {
         
           server 192.168.88.103:10086;
           server 192.168.88.104:10086;
        }
    	server{
         
    		listen 8597;
    		proxy_pass dns;
    	}
    	
    }
    

    3 Nginx 군집 (Nginx + Keepalived)
  • hadop 101 과 hadop 102 에 Keepalived
  • 를 설치 합 니 다.
    [root@hadoop101 ~]# yum install keepalived -y
    #  
    [root@hadoop101 ~]# systemctl start keepalived
    #      
    [root@hadoop101 ~]# systemctl status keepalived
    #  
    [root@hadoop101 ~]# systemctl stop keepalived
    
  • hadop 101 의 keepalived 프로필 수정
  • [root@hadoop101 ~]# vim /etc/keepalived/keepalived.conf
    
    #    
    vrrp_script chk_http_port
    {
         		#      ,          
        script "/usr/local/src/check_ngx.sh" #       ,  nginx    
        interval 5                          #(         ,    ,         ,     )
        weight 2                            #  
    }
    #vrrp       
    vrrp_instance VI_1 {
         
        state MASTER            #   keepalived   ,MASTER  ,BACKUP  
        interface ens33         #     vrrp        (  centos   )  ifconfig/ip addr        
        virtual_router_id 51    #       ,     
        priority 100            #    ,    ,            
        advert_int 1            #     ,   1s(vrrp      )
        #    
        authentication {
         
            auth_type PASS #         ,MASTER BACKUP               
            auth_pass 1111
        }
        track_script {
         
            chk_http_port            #(      )
        }
        virtual_ipaddress {
         
            192.168.88.111            #     ip(VIP),   ,    
        }
    }
    
    
  • hadop 102 의 keepalived 프로필 수정
  • [root@hadoop102 ~]# vim /etc/keepalived/keepalived.conf
    #    
    vrrp_script chk_http_port {
         
        script "/usr/local/src/check_ngx.sh" #       ,  nginx    
        interval 5                          #(         ,    ,         ,     )
        weight 2                            #  
    }
    #vrrp       
    vrrp_instance VI_1 {
         
        state BACKUP                        #   keepalived   ,MASTER  ,BACKUP  
        interface ens33                      #     vrrp        (  centos   )  ifconfig/ip addr        
        virtual_router_id 51                #       ,     
        priority 99                         #    ,    ,            
        advert_int 1                        #     ,   1s(vrrp      )
        #    
        authentication {
         
            auth_type PASS #         ,MASTER BACKUP               
            auth_pass 1111
        }
        track_script {
         
            chk_http_port                   #(      )
        }
        virtual_ipaddress {
         
            192.168.88.111                   #     ip(VIP),   ,    
        }
    }
    
  • check 작성ngx. sh 스 크 립 트
  • [root@hadoop101 ~]# vim /usr/local/src/check_ngx.sh
    #!/bin/bash
    COUNT1=`ss -anpt | grep nginx | wc -l `
    if [ $COUNT1 -eq 0 ] ; then
        /usr/local/nginx/sbin/nginx
        sleep 2
        COUNT2=`ss -anpt | grep nginx | wc -l`
        if [ $COUNT2 -eq 0 ] ; then
            systemctl stop keepalived
            echo -e "keeplived is stoped"
            exit 1
        else
            exit 0
        fi
    fi
    [root@hadoop101 ~]# scp -r /usr/local/src/check_ngx.sh [email protected]:/usr/local/src/
    
  • seLinux 검사 (중요, check ngx 스 크 립 트 에서 명령 을 실행 하지 못 할 수 있 습 니 다)
  • #   seLinux  ,SELinux status   enabled      
    [root@hadoop101 ~]# /usr/sbin/sestatus -v
    #           
    [root@hadoop101 ~]# getenforce
    #     (    ),0:permissive 	1:enforcing
    [root@hadoop101 ~]# setenforce 0
    
    #     (    )
    [root@hadoop101 ~]# vim /etc/selinux/config
    SELINUX=disabled
    
  • keepalived 를 시작 하고 방화벽 을 닫 는 것 에 주의 하 세 요
  • [root@hadoop101 ~]# systemctl start keepalived
    [root@hadoop102 ~]# systemctl start keepalived
    
  • 테스트
  • #  Master,  ip addr          ip    
    [root@hadoop101 ~]# systemctl stop keepalived
    
    #hadoop101     vip  
    [root@hadoop101 ~]# systemctl start keepalived
    

    좋은 웹페이지 즐겨찾기