centos 7 에서 keepalived + nginx 는 이중 열 준비 와 역방향 대 리 를 합 니 다.

20854 단어 리 눅 스 운영
저 는 centos 7 세 대 를 가상 으로 만 들 었 습 니 다. one (192.168.56.31), two (192.168.56.32) 를 nginx + keepalived 더 블 컴퓨터 열 준비 (한 서버 의 nginx 를 끊 을 때 다른 nginx 를 자동 으로 사용 할 수 있 습 니 다. 즉, 메 인 서버 nginx 의 포트 가 통 하지 않 을 때 자신의 keepalived 서 비 스 를 자동 으로 닫 으 면 가상 ip 은 예비 ip 을 가리 키 는 것 입 니 다), three(192.168.56.33) tomcat 서버 를 만 듭 니 다. 실험 환경 에서 방화벽 과 selinux 를 먼저 닫 습 니 다. setenforce 0 && systemctl stop firewalld 먼저 nginx 를 설치 합 니 다. 저 는 가장 간단 한 yum 설치 방식 을 사용 합 니 다. 자동 yum 소스 에 nginx 가 없습니다. 우 리 는 yum 소스 를 설치 한 다음 에 nginx: yum -y install epel-release && yum -y install nginx 를 설치 해 야 합 니 다. 그리고 keepalived: yum -y install keepalived 를 다시 설치 해 야 합 니 다.. 설치 완료 후 keepalived 명령 도움말 keepalived --help 을 사용 할 수 있 습 니 다. 두 설정 파일 은 모두 etc 디 렉 터 리 에 있 습 니 다. jdk 와 tomcat 를 three 에 업로드 하고 설치 합 니 다. 포트 는 각각 8180, 8280, 8380 입 니 다. 그리고 nginx 를 먼저 설정 합 니 다. 설정 파일 은 / etc / nginx / 에 있 습 니 다.
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;                          #    ,      ,  root 
worker_processes auto;               #     ,      ,cpu   ,         cpu   。
error_log /var/log/nginx/error.log;  #      
pid /run/nginx.pid;                  #PID    

# Load dynamic modules. See /usr/share/nginx/README.dynamic.  
include /usr/share/nginx/modules/*.conf;   #         

events {       
    worker_connections 1024;         #     ,              ,  ulimit -n    ,       ,        
}

http {     
    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;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;                                 #                 
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {                                          #     ,         
        listen       80 default_server;               #       
        listen       [::]:80 default_server;            
        server_name  _;                               #     
        root         /usr/share/nginx/html;           #          

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {                                  #      
        proxy_pass http://cs;
        proxy_set_header HOST $host;                   #        ,                cs
        proxy_set_header X-Real-IP $remote_addr; 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
upstream cs {                      #         ,     tomcat  
 server 192.168.56.33:8180;
 server 192.168.56.33:8280;
 server 192.168.56.33:8380;
}
# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}

설정 이 완료 되면 nginx 와 세 개의 tomcat 서 비 스 를 시작 하면 성공 적 으로 접근 할 수 있 습 니 다. 다음 에 keepalived 를 설정 하 겠 습 니 다. 설정 파일 keeplived. conf 는 설 치 된 / etc / keeplived 에서 다음 설정 파일 에 대한 설명 입 니 다.
! Configuration File for keepalived

global_defs {                                                       #     
   notification_email {                                             #  keepalived          email    ,    。
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc            #     
   smtp_server 192.168.200.1                                        #  smtp                                   
   smtp_connect_timeout 30                                          #  smtp      
   router_id LVS_DEVEL                                              #Lvs       (lvs_id)。      ,       。
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_instance VI_1 {                                               #  vrrp                                            
    state MASTER                                                   #     master,   backup,     nopreempt       ,   priority  。
    interface eth0                                                 #         
    virtual_router_id 51                                           #     id
    priority 100                                                   #   ,       master
    advert_int 1                                                   #    ,  1 
    authentication {                                               #    
        auth_type PASS                                             #    
        auth_pass 1111                                             #    
    }
    virtual_ipaddress {                                            #  ip    
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}
 #     virtual_server    ,        LVS ,   keepalive LVS      。ipvsadm                       。
virtual_server 192.168.200.100 443 {                             #  IP  ,  vrrp_instance    virtual_ipaddress    
    delay_loop 6                                                 #                  
    lb_algo rr                                                   #lvs     rr|wrr|lc|wlc|lblc|sh|dh 
    lb_kind NAT                                                  #        NAT|DR|RUN                                                       
    persistence_timeout 50                                       #      
    protocol TCP                                                 #     

    real_server 192.168.201.100 443 {                            #  ip  
        weight 1                                                 #   1,0   
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
virtual_server 10.10.10.2 1358 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    sorry_server 192.168.200.200 1358

    real_server 192.168.200.2 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.3 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.3 1358 {
    delay_loop 3
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.200.4 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.5 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

설정 파일 이 좀 많 습 니 다. 사용 할 수 없 는 기능 을 위로 배치 하지 않 아 도 됩 니 다. 성능 이 더 좋 습 니 다. 제 스 크 립 트 는 다음 과 같 습 니 다.
global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id one
}
vrrp_script chk_nginx {                  #     nginx    ,          
    script "/usr/local/check_ng.sh"
    interval 3
}
vrrp_instance VI_1 {
    state MASTER
    interface enp0s8
    virtual_router_id 60
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    virtual_ipaddress {
        192.168.56.100
    }
    track_script {
        chk_nginx
    }
}

다음은 위 에 설 정 된 경로 로 스 크 립 트 를 만 드 는 것 입 니 다 vi /usr/local/check_ng.sh.
#!/bin/bash
d=`date --date today +%Y%m%d_%H:%M:%S`
n=`ps -C nginx --no-heading|wc -l`
if [ $n -eq "0" ]; then
        systemctl start nginx
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived
        fi
fi

그리고 실행 권한 을 추가 합 니 다. 예비 기 를 설정 합 니 다:
global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id two
}
vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ng.sh"
    interval 3
}
vrrp_instance VI_1 {
    state BACKUP
    interface enp0s8
    virtual_router_id 60
    priority 90
    advert_int 1
    authentication {                                               
        auth_type PASS              
        auth_pass 1111                                             
    }

    virtual_ipaddress {
        192.168.56.100
    }
    track_script {
        chk_nginx
    }
}

테스트 스 크 립 트 설정 은 호스트 설정 과 같 습 니 다! 생산 환경 에서 112 포트 를 열 어야 합 니 다. keepalived 입 니 다!

좋은 웹페이지 즐겨찾기