Obsidian/Recognition/Programing/Linux/RHEL9/NGINX HA (High Availability...

6.1 KiB


# nginx 설치 확인
nginx
or 
dnf install nginx -y

# keepalived 설치 확인
keepalived 
or
dnf install keepalived -y

# service 사용, 상태 확인
systemctl enable nginx
systemctl start nginx

systemctl enable keepalived
systemctl start keepalived

# index.thml 수정 (테스트시 노드 구분 하기 위함)
nano /usr/share/nginx/html/index.html

# keepalived 기본 구성 파일을 편집
nano /etc/keepalived/keepalived.conf
--------------------------------------------------------------------------------------------
global_defs {
  # Keepalived process identifier
  router_id LVS_ELK
}

 # Nginx가 실행 중인지 확인하는 스크립트 
vrrp_script check_nginx {
  script "/etc/keepalived/check_nginx.sh"
  interval 2
  weight 50
}

 # Virtual interface - 우선 순위는 장애 조치 시 할당된 인터페이스가 인계받는 순서를 지정합니다.
vrrp_instance VI_01 {
  state MASTER
  interface bond0
  virtual_router_id 151
  priority 110

  # 가상IP
  virtual_ipaddress {
    10.200.31.129/24
  }
  track_script {
    check_nginx
  }
  authentication {
    auth_type AH
    auth_pass secret
  }
}
--------------------------------------------------------------------------------------------
## MASTER를 BACKUP으로, 110을 100으로 변경

# 실행중인지 확인 스크립트 작성
nano /etc/keepalived/check_nginx.sh

#!/bin/sh
if [ -z "`pidof nginx`" ]; then
  exit 1
fi

# 스크립트 권한 설정
chmod 755 /etc/keepalived/check_nginx.sh

systemctl enable keepalived
systemctl start keepalived

# 가상 ip 설정 상태 확인 
ip add show

https://www.nakjunizm.com/2020/02/20/haproxy/
https://bryan.wiki/243

https://www.owl-dev.me/blog/74

haproxy
nginx
keepalived
-------------------------------------------------------------------------
https://bkim.tistory.com/12

# nginx 다운로드 (https://nginx.org/download)
# 의존성 라이브러리 다운로드
## PCRE (https://sourceforge.net/projects/pcre/files/pcre/)
## zlib (http://zlib.net) 최신 버전 확인 후 --> http://zlib.net/zlib-1.3.1.tar.gz
## OpenSSL (http://www.openssl.org/source)




# nginx 압축풀기
tar -zxvf nginx-1.20.2.tar.gz
cd nginx-ha/nginx-1.20.2

tar -zxvf pcre-8.39.tar.gz
tar -zxvf zlib-1.3.1.tar.gz

# 설정 파일 수정
nano conf/nginx.conf

## location / { ... 밑에 추가
location /nginx_status {
	stub_status;
	allow 127.0.0.1;
	deny all;
}

# nginx 설치 2
./configure --prefix=/home/gmt/SACP-INSTALL/nginx --user=root --with-http_stub_status_module make && make install

./configure --prefix=/home/gmt/SACP-INSTALL/nginx-ha/nginx --with-zlib=./zlib-1.3.1 --with-pcre=./pcre-8.39 --with-http_stub_status_module
make install

## --with-http_stub_status_module: nginx stats page 적용을 위한 옵션
## ssl 적용 필요시 --with-openssl=./openssl-1.0.2 --with-http_ssl_module

# Service 파일 생성
nano /usr/lib/systemd/system/nginx.service

--------------------------------------------------------------------------------------------
[Unit]

Description=The NGINX HTTP and reverse proxy server

After=syslog.target network.target remote-fs.target nss-lookup.target



[Service]

Type=forking

PIDFile=/home/gmt/SACP-INSTALL/nginx-ha/nginx-1.20.2/nginx.pid

ExecStartPre=/usr/local/nginx/sbin/nginx -t

ExecStart=/usr/local/nginx/sbin/nginx

ExecReload=/usr/local/nginx/sbin/nginx -s reload

ExecStop=/bin/kill -s QUIT $MAINPID

PrivateTmp=true


[Install]

WantedBy=multi-user.target
--------------------------------------------------------------------------------------------

# nginx.confg PID 위치 설정
cd /usr/local/nginx/conf
nano nginx.conf
--------------------------------------------------------------------------------------------
worker_processes 1;

pid /var/run/nginx.pid;


.... 

http{

...

}
--------------------------------------------------------------------------------------------

# deamon 리로드
systemctl daemon-reload
systemctl status nginx


# keepalived 설치
tar -zxvf keepalived-1.1.19.tar.gz

# Keepalived configureation
cd [keepalived Root]

nano ./keepalived.conf

# MASTER
vrrp_script check_nginx {
    script "killall -0 nginx"
    interval 2
}

vrrp_instance VI_1 {
    interface eth0
    state MASTER
    priority 200

    virtual_router_id 33
    virtual_ipaddress {
        10.205.199.200 # 가상 IP
    }

    authentication {
        auth_type PASS
        auth_pass password
    }

    track_script {
        check_nginx
    }

}

# BACKUP
    script "killall -0 nginx"
    interval 2
}

vrrp_instance VI_1 {
    interface eth0
    state BACKUP
    priority 100

    virtual_router_id 33
    virtual_ipaddress {
        10.205.199.200
    }

    authentication {
        auth_type PASS
        auth_pass password
    }

    track_script {
        check_nginx
    }

}

# keepalived 실행







# 설치
apt-get install nginx-ha-keepalived
## /usr/bin으로 설치됨

# 스크립트 실행
nginx-ha-setup
## /etc/keepalived/keepalived.conf가 생성됨

# keepalived 구성 스크립트 수정

# health check 기능 구성
vrrp_script chk_nginx_service {
    script "/usr/libexec/keepalived/nginx-ha-check" # nginx-ha-check 스크립트 경로
    interval 3 # 스크립트가 실행되는 빈도 (초 단위)
    weight 50 # 가중치, priority와 함께 어떤 노드가 기본 노드가 될지 결정하는데 사용됨.
              # 50 + 101 =  151.. 높을수록 우선순위 높음.
              #  NGINX Plus 관리자 가이드 문서에서 health check 스크립트 참조.
}

# 노드 VRRP 인스턴스를 구성
vrrp_instance VI_1 {
    interface eth0
    state BACKUP
    priority 101
    virtual_router_id 51 # 샘플값(필요에 따라 환경에서 고유하도록 변경)
    advert_int 1 # 기본 노드의 VRRP인스턴스가 백업 노드 피어에 보내는 빈도(초)
    unicast_src_ip 192.168.100.100 # 로컬 노드
    unicast_peer {
        192.168.100.101 # 다른 노드
    }
    authentication {
        auth_type PASS
        auth_pass f8f0e5114cbe031a3e1e622daf18f82a
    }
    virtual_ipaddress {
        192.168.100.150 # 기본 노드에 할당된 가상 IP
    }
    track_script {
        chk_nginx_service
    }
    notify "/usr/libexec/keepalived/nginx-ha-notify"
}