OpenResty + Keepalived 사용 가능 한 클 러 스 터 + 더 블 메 인 모드 구성

* 환경:
system version:CentOS Linux release 7.5.1804 (Core) 3.10.0-862.9.1.el7.x86_64nginx version:openresty/1.13.6.1keepalive version:keepalived-2.0.6
OpenResty 설치
[root@localhost soft]# yum install yum-fastestmirror     #   
[root@localhost soft]# yum -y update

* OpenResty 에 의존 하 는 패키지 설치
[root@localhost soft]# yum install gcc gcc-c++ libreadline-dev libncurses5-dev libpcre3-dev libssl-dev pcre pcre-devel zlib zlib-devel openssl openssl-devel readline-devel  perl -y

* 다운로드 nginxupstream_check_module 모듈, 이 모듈 은 ustream 건강 검진 에 사 용 됩 니 다.
OpenResty 는 역방향 프 록 시 에 사 용 됩 니 다. 백 엔 드 서버 가 지연 되면 nginx 는 이 realserver 를 upstream 에서 쫓 아 낼 수 없습니다. 백 엔 드 에 전송 을 요청 하 는 이 realserver 위 에 도 있 습 니 다. localtion 에서 proxy 를 사용 할 수 있 지만.next_upstream 은 사용자 에 게 되 돌아 오 는 오류 페이지 를 해결 하지만 요청 은 먼저 이 서버 에 요청 을 전달 한 다음 에 다른 서버 에 전송 합 니 다. 그러면 한 번 의 퍼 가기 가 낭비 되 었 습 니 다. 이런 상황 에 대해 타 오 바 오 기술 팀 이 개발 한 nginx 모델 빠 른 nginx 를 통 해upstream_check_모듈 은 후방 realserver 의 건강 상 태 를 검사 합 니 다. 백 엔 드 서버 가 사용 되 지 않 으 면 모든 요청 을 이 서버 에 전송 하지 않 습 니 다.nginx_upstream_check_module 모듈 주소:https://github.com/yaoweibin/nginx_upstream_check_module
[root@localhost soft]# wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz
[root@localhost soft]# tar -zxvf v0.3.0.tar.gz

* 다운로드 ngxcache_Purge 모듈, 이 모듈 은 nginx 캐 시 를 청소 하 는 데 사 용 됩 니 다.
[root@localhost soft]# wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
[root@localhost soft]# tar zxvf ngx_cache_purge-2.3.tar.gz

* 컴 파일 설치 OpenResty
[root@localhost soft]# wget https://openresty.org/download/openresty-1.13.6.2.tar.gz
[root@localhost soft]# tar -zxvf openresty-1.13.6.2.tar.gz
[root@localhost soft]# cd openresty-1.13.6.2
[root@localhost openresty-1.13.6.2]# groupadd www
[root@localhost openresty-1.13.6.2]# useradd -M -g www -s /sbin/nologin www
[root@localhost openresty-1.13.6.2]# ./configure --prefix=/app/OpenResty \
> --user=www \
> --group=www \
> --with-luajit \
> --without-http_redis2_module \
> --with-http_iconv_module \
> --with-http_realip_module \       #      ip  
> --with-pcre \                              #Perl       
> --with-luajit \                             #  luajit  
> --add-module=../ngx_cache_purge-2.3/ \     #    
> --add-module=../nginx_upstream_check_module-0.3.0/ \   #upstream      
> --with-http_stub_status_module \         #    
> --with-http_ssl_module \                      #ssl  
> -j2
[root@localhost openresty-1.13.6.2]# gmake && gmake install
[root@localhost openresty-1.13.6.2]# cd /app/OpenResty/nginx/sbin/
[root@localhost sbin]# ./nginx -V
nginx version: openresty/1.13.6.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/app/OpenResty/nginx --with-cc-opt=-O2 --add-module=../ngx_devel_kit-0.3.0 --add-module=../iconv-nginx-module-0.14 --add-module=../echo-nginx-module-0.61 --add-module=../xss-nginx-module-0.06 --add-module=../ngx_coolkit-0.2rc3 --add-module=../set-misc-nginx-module-0.32 --add-module=../form-input-nginx-module-0.12 --add-module=../encrypted-session-nginx-module-0.08 --add-module=../srcache-nginx-module-0.31 --add-module=../ngx_lua-0.10.13 --add-module=../ngx_lua_upstream-0.07 --add-module=../headers-more-nginx-module-0.33 --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.19 --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.15 --add-module=../rds-csv-nginx-module-0.09 --add-module=../ngx_stream_lua-0.0.5 --with-ld-opt=-Wl,-rpath,/app/OpenResty/luajit/lib --user=www --group=www --with-http_realip_module --with-pcre --add-module=/app/soft/openresty-1.13.6.2/../ngx_cache_purge-2.3 --add-module=/app/soft/openresty-1.13.6.2/../nginx_upstream_check_module-0.3.0 --with-http_stub_status_module --with-http_ssl_module --with-stream --with-stream_ssl_module
[root@localhost sbin]#

[root@localhost openresty-1.13.6.2]# ./configure --prefix=/app/OpenResty --user=www --group=www --with-luajit --without-http_redis2_module --with-http_iconv_module --with-http_realip_module --with-pcre --with-luajit --add-module=../ngx_cache_purge-2.3/ --add-module=../nginx_upstream_check_module-0.3.0/ --with-http_stub_status_module --with-http_ssl_module -j2
* OpenResty 를 서비스 로 설정 하고 부팅 설정
[root@localhost nginx]# vim /lib/systemd/system/nginx.service
[Unit]            #     
Description=nginx      #    
After=network.target              #      

[Service]             #         
Type=forking       #       ,
ExecStart=/app/OpenResty/nginx/sbin/nginx    #         
ExecReload=/app/OpenResty/nginx/sbin/nginx reload     #    
ExecStop=/app/OpenResty/nginx//sbin/nginx quit     #    
PrivateTmp=true         #            

[Install]
WantedBy=multi-user.target
[root@localhost nginx]# systemctl enable nginx
nginx.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig nginx on
[root@localhost nginx]#

메모: [Service] 의 시작, 재 부팅, 정지 명령 은 모두 절대 경로 [Install] 실행 단계 에서 서비스 설치 에 관 한 설정 을 사용 해 야 합 니 다. 다 중 사용자, 즉 시스템 실행 단 계 는 3 입 니 다.
* OpenResty 설정
[root@localhost soft]# cd /app/OpenResty/nginx/conf/
[root@localhost conf]# cp nginx.conf{,.default20180723bak}
[root@localhost conf]# vim nginx.conf

* keepalived 설치
  • keepalive 홈 페이지:http://www.keepalived.org/software/

  • * keepalived 의존 설치
    [root@localhost ~]# cd /app/soft/
    [root@localhost soft]# yum -y install kernel kernel-devel*  popt popt-devel libssl-dev libnl libnl-devel openssl openssl-* ipvsadm libnfnetlink-devel

    * keepalived 설치
    [root@localhost soft]# wget http://www.keepalived.org/software/keepalived-2.0.6.tar.gz
    [root@localhost soft]# tar -zxvf keepalived-2.0.6.tar.gz
    [root@localhost soft]# cd keepalived-2.0.6
    [root@localhost keepalived-2.0.6]# ./configure --prefix=/app/keepalived --sysconf=/etc --with-kernel-dir=/usr/src/kernels/3.10.0-862.11.6.el7.x86_64
    checking syslog.h presence... yes
    checking for syslog.h... yes
    checking for unistd.h... (cached) yes
    checking for linux/netlink.h... no
    configure: error: Missing/unusable kernel header file 
    [root@localhost keepalived-2.0.6] ./configure --prefix=/app/keepalived --sysconf=/etc
    Keepalived configuration
    ------------------------
    Keepalived version       : 2.0.6
    Compiler                 : gcc
    Preprocessor flags       :
    Compiler flags           : -Wall -Wunused -Wstrict-prototypes -Wextra -Winit-self -g -D_GNU_SOURCE -fPIE -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fsta
    Linker flags             :  -pie
    Extra Lib                :  -lcrypto  -lssl  -lnl
    Use IPVS Framework       : Yes
    IPVS use libnl           : Yes
    IPVS syncd attributes    : No
    IPVS 64 bit stats        : No
    fwmark socket support    : Yes
    Use VRRP Framework       : Yes
    Use VRRP VMAC            : Yes
    Use VRRP authentication  : Yes
    With ip rules/routes     : Yes
    Use BFD Framework        : No
    SNMP vrrp support        : No
    SNMP checker support     : No
    SNMP RFCv2 support       : No
    SNMP RFCv3 support       : No
    DBUS support             : No
    SHA1 support             : No
    Use Json output          : No
    libnl version            : 1
    Use IPv4 devconf         : No
    Use libiptc              : No
    Use libipset             : No
    init type                : systemd
    Build genhash            : Yes
    Build documentation      : No
    [root@localhost keepalived-2.0.6]# make && make install

    -- sysconf 는 설정 파일 의 주 소 를 지 정 했 습 니 다. 즉, / etc / keepalived / keepalived. conf -- prefix 는 설치 디 렉 터 리 를 지 정 했 습 니 다. with - kernel - dir 는 커 널 소스 코드 의 헤더 파일, 즉 include 디 렉 터 리 를 지정 합 니 다. LVS 를 사용 할 때 만 이 인자 가 필요 합 니 다. getconf LONGBIT 는 시스템 자릿수 를 얻는다.다른 건 필요 없어.
    컴 파일 설정 은 Yes 상태 인 지 를 확인 해 야 합 니 다. IPVS 프레임 워 크 사용: Yes IPVS sync daemon support: Yes IPVS use libnl: Yes VRRP 프레임 워 크 사용: Yes
    * keepalived 설정
  • 컴 파일 설치 후 시스템 환경 에 따라 시작 스 크 립 트 생 성
  • [root@localhost keepalived-2.0.6]# cat /usr/lib/systemd/system/keepalived.service
    [Unit]
    Description=LVS and VRRP High Availability Monitor
    After= network-online.target syslog.target
    Wants=network-online.target
    
    [Service]
    Type=forking
    PIDFile=/var/run/keepalived.pid
    KillMode=process
    EnvironmentFile=-/etc/sysconfig/keepalived
    ExecStart=/app/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS
    ExecReload=/bin/kill -HUP $MAINPID
    
    [Install]
    WantedBy=multi-user.target
    [root@localhost keepalived-2.0.6]#

    프로필 이 올 바른 지 확인 하 십시오.
  • 로그 경 로 를 설정 하여 Environment File = - / etc / sysconfig / keepalived 를 수정 하고 - f 를 사용 하여 프로필 경로, 로그 정 보 를 지정 합 니 다.
  • [root@localhost keepalived-2.0.6]# cat /etc/sysconfig/keepalived
    # Options for keepalived. See `keepalived --help' output and keepalived(8) and
    # keepalived.conf(5) man pages for a list of all options. Here are the most
    # common ones :
    #
    # --vrrp               -P    Only run with VRRP subsystem.
    # --check              -C    Only run with Health-checker subsystem.
    # --dont-release-vrrp  -V    Dont remove VRRP VIPs & VROUTEs on daemon stop.
    # --dont-release-ipvs  -I    Dont remove IPVS topology on daemon stop.
    # --dump-conf          -d    Dump the configuration data.
    # --log-detail         -D    Detailed log messages.
    # --log-facility       -S    0-7 Set local syslog facility (default=LOG_DAEMON)
    #
    
    KEEPALIVED_OPTIONS="-D"
    
    [root@localhost keepalived-2.0.6]# cp /etc/sysconfig/keepalived{,.default}
    [root@localhost keepalived-2.0.6]# sed -i 's?KEEPALIVED_OPTIONS=.*?KEEPALIVED_OPTIONS="-d -D -S 0"?' /etc/sysconfig/keepalived
    [root@localhost keepalived-2.0.6]# cp /etc/rsyslog.conf{,.default}
    [root@localhost keepalived-2.0.6]# sed -i '$a\local0.* /var/log/keepalived.log' /etc/rsyslog.conf
    [root@localhost keepalived-2.0.6]# systemctl restart rsyslog

    - S 0 keepalived 로 그 를 local 0 으로 출력 하도록 설정 합 니 다.
  • keepalived 시작 파일 을 기본 경로 로 복사 하거나 환경 변 수 를 설정 한 path 를 통 해 구현 할 수 있 습 니 다
  • [root@localhost keepalived-2.0.6]# ln -s /app/keepalived/sbin/keepalived /sbin/
  • keepalived 프로필 을 기본 경로 로 복사 합 니 다
  • [root@localhost keepalived-2.0.6]# ln -s  /app/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
  • keepalived 서비스 스 크 립 트 를 기본 주소 로 복사 하고 init. d / keepalived 파일 의 해당 설정 을 수정 하여 실현 합 니 다
  • [root@localhost keepalived-2.0.6]#  cp /app/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/
  • 서비스 시작 스 크 립 트 를 복사 하여 keepalived 를 서비스 로 등록 합 니 다
  • [root@localhost keepalived-2.0.6]#  cp /app/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/
    [root@localhost keepalived-2.0.6]#   systemctl enable keepalived
  • keepalived 시작
  • [root@justin keepalived-2.0.6]# systemctl start keepalived
    
  • 1. Nginx + keepalived 는 이러한 모델 을 설정 하고 하나의 vip 주 소 를 사용 하 며 전단 은 2 대의 기 계 를 사용 하고 한 대 는 주인 이 되 며 한 대 는 준 비 를 하지만 다른 백업 기 계 는 호스트 가 고장 나 지 않 을 때 영원히 낭비 상태 에 있 으 며 서버 가 많 지 않 은 사이트 에 대해 이 방안 은 경제적 이지 않다.
  • 2. Nginx + keepalived 는 두 개의 VIP 주 소 를 사용 하고 전단 은 두 대의 기 계 를 사용 하 며 서로 위주 로 준비 하 는 동시에 두 대의 기계 가 작업 을 한다. 그 중에서 한 대의 기계 가 고장 이 나 면 두 대의 기계 의 요 구 는 한 대의 기계 부담 으로 옮 겨 현재 구조 환경 에 매우 적합 하 다.

  • * 더 블 메 인 모드
    더 블 메 인 모드 2 대 keepalived 의 설정 은 거의 같 습 니 다. vrrp 를 뒤 바 꾸 기만 하면 됩 니 다.instance 의 state, priority 값 입 니 다.
    [root@justin keepalived]# cat keepalived.conf
    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         [email protected]
         [email protected]
         [email protected]
       }
       notification_email_from [email protected]
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
    #   vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    vrrp_script chk_nginx {
        script "/etc/keepalived/check_nginx.sh"
        interval 2
        weight 2
    }
    
    vrrp_instance VI_1 {           #       VI_1   VRRP   
        state MASTER               #Keepalived     ,    ,  MASTER BACKUP     ,     。
        interface ens33              #         ,    
        virtual_router_id 51        #      ,           , MASTER BACKUP virtual_router_id    。
        priority 100                    #     ,0-254,    ,    。    MASTRE       BAUCKUP
        advert_int 1                   #MASTER BACKUP                ,    
        authentication {             #          、   ,   VRRP    ,MASTER/BACKUP            
            auth_type PASS       #         ,   PASS AH  
            auth_pass 1111        #     ,         ,          ,     
        }
        virtual_ipaddress {       #  IP  ,    IP    ip add MASTER       
            10.15.43.15             #VIP   ,      IP,    
        }
        notify_master "/etc/keepalived/clean_arp.sh 10.15.43.15"     #       (VIP)   arp     
    }
    
    vrrp_instance VI_2 {
        state BACKUP
        interface ens33
        virtual_router_id 51
        priority 99
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.15.43.13
        }
        notify_master "/etc/keepalived/clean_arp.sh 10.15.43.13"
    }
    [root@justin keepalived]#

    nginx 상태 모니터링:
    [root@justin keepalived]# cat check_nginx.sh
    #!/bin/bash
    export LANG="en_US.UTF-8"
    #export LANG="zh_CN.UTF8"
    source /etc/rc.d/init.d/functions
    [ -f /etc/profile ] && . /etc/profile
    [ -f ~/.bash_profile ] && . ~/.bash_profile
    if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then
       /app/OpenResty/nginx/sbin/nginx -c /app/OpenResty/nginx/conf/nginx.conf
    fi
    sleep 3
    if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then
       systemctl stop keepalived
    fi
    [root@justin keepalived]#

    가상 서버 (VIP) 주 소 를 업데이트 하 는 arp 를 게 이 트 웨 이 스 크 립 트 에 기록 하도록 설정 합 니 다.
    [root@justin keepalived]# cat clean_arp.sh
    #!/bin/bash
    export LANG="en_US.UTF-8"
    #export LANG="zh_CN.UTF8"
    source /etc/rc.d/init.d/functions
    [ -f /etc/profile ] && . /etc/profile
    [ -f ~/.bash_profile ] && . ~/.bash_profile
    VIP=$1
    GATEWAY=10.15.43.254
    /sbin/arping -I ens33 -c 5 -s $VIP $GATEWAY &>/dev/null
    [root@justin keepalived]#

    그리고 nginx, keepalived 를 다시 시작 합 니 다.

    좋은 웹페이지 즐겨찾기