```shell # 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 ``` ```shell 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 실행 ``` ```bash # 설치 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" } ```