309 lines
6.1 KiB
Markdown
309 lines
6.1 KiB
Markdown
|
```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"
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
```
|