Centos 7 아래 Nginx Keepalived Cluster 구축

8046 단어 linux
조작 환경
CentOS Linux release 7.4.1708 (Core) 
nginx version: nginx/1.12.2
Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2 
Nginx Master Node:10.10.200.3
Nginx Backup Node:10.10.200.2
VIP:10.10.200.100
조작 순서
설치 nginx
keepalived 설정 절 차 를 주로 설명 하기 때문에 nginx 는 가장 간단 한 모드 로 설치 합 니 다.
#yum -y install nginx

테스트 를 위해 nginx server 의 index. html 파일 을 각각 다음 과 같이 수정 합 니 다.
Nginx Server:10.10.200.3

Nginx

10.10.200.3


 Nginx Server:10.10.200.2

Nginx

10.10.200.2


이렇게 하면 우 리 는 curl 을 통 해 다음 과 같은 정 보 를 얻 을 수 있다.
[root@nginx-backup sbin]# curl -l http://10.10.200.3

Nginx

10.10.200.3

[root@nginx-backup sbin]# curl -l http://10.10.200.2

Nginx

10.10.200.2


설치 설정 Keepalived
#yum -y install ipset keepalived

반드시 ipset 를 설치 해 야 합 니 다. 그렇지 않 으 면 나중에 keepalived 를 설치 하 는 과정 에서 오류 가 발생 할 수 있 습 니 다!!
Nginx Master & Backup Node 에서 nginx 모니터링 스 크 립 트 를 편집 합 니 다. / usr / local / keepalived / sbin 디 렉 터 리 에 스 크 립 트 를 놓 습 니 다.
[root@nginx-backup sbin]# vi check_nginx_alive.sh 
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
    /usr/local/nginx/sbin/nginx
    sleep 2
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
        systemctl stop keepalived.service
                exit 1
    fi
fi
exit 0

실행 가능 한 권한 추가
# chmod a+x check_nginx_alive.sh

Nginx Master Node (10.10200.3) 프로필 은 다음 과 같 습 니 다.
! Configuration File for keepalived
       vrrp_script check_nginx_alive {
           script "/usr/local/keepalived/sbin/check_nginx_alive.sh"
           interval 2
           weight -10
       }
       
       global_defs {
          notification_email {
           [email protected]
         }
         script_user root  //    
         enable_script_security  //    
         notification_email_from [email protected]
         smtp_server smtp.exmail.qq.com
         smtp_connect_timeout 30
         router_id LVS_DEVEL_1  //  ID,  Backup Node  
         vrrp_skip_check_adv_addr
         vrrp_strict
         vrrp_garp_interval 0
         vrrp_gna_interval 0
      }
      
      vrrp_instance VI_1 { 
          state MASTER  //   Master     Master, Backup     Backup
          interface em2   //VIP       
          virtual_router_id 51   //     BackUp Node  
          priority 102    //Master Node      Backup Node 
          advert_int 1
          authentication {   //Master Node Backup Node       
              auth_type PASS
              auth_pass 1111
          }
          virtual_ipaddress {
              10.10.200.100/24    //VIP Address
          }
          track_script {
              check_nginx_alive
          }
      }

Nginx Backup Node (10.10.2002) 프로필 은 다음 과 같 습 니 다.
! Configuration File for keepalived
vrrp_script check_nginx_alive {
    script "/usr/local/keepalived/sbin/check_nginx_alive.sh"
    interval 2
    weight -10
}

global_defs {
   notification_email {
        [email protected]     
   }
   script_user root
   enable_script_security
   notification_email_from [email protected]
   smtp_server smtp.exmail.qq.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL_2
   vrrp_skip_check_adv_addr
   script_user root
   enable_script_security
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface em2
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.10.200.100/24
    }
    track_script {
        check_nginx_alive
    }
}

설정 이 완료 되면 각각 Nginx Server 2 대 에서 keepalived 와 Nginx 를 시작 합 니 다.
Master Node 에서 ip addr 를 통 해 VIP 를 볼 수 있 습 니 다:
3: em2:  mtu 1500 qdisc mq state UP qlen 1000
    link/ether 84:8f:69:da:60:7b brd ff:ff:ff:ff:ff:ff
    inet 10.10.200.3/24 brd 10.10.200.255 scope global em2
       valid_lft forever preferred_lft forever
    inet 10.10.200.100/24 scope global secondary em2
       valid_lft forever preferred_lft forever
    inet6 fe80::f1d5:a5ab:3d0d:ef6/64 scope link 
       valid_lft forever preferred_lft forever

ping 통 VIP 도 가능:
[root@kvm-server ~]# ping 10.10.200.100
PING 10.10.200.100 (10.10.200.100) 56(84) bytes of data.
64 bytes from 10.10.200.100: icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from 10.10.200.100: icmp_seq=2 ttl=64 time=0.040 ms
64 bytes from 10.10.200.100: icmp_seq=3 ttl=64 time=0.040 ms
64 bytes from 10.10.200.100: icmp_seq=4 ttl=64 time=0.049 ms

curl 을 통 해 10.10.200.100 페이지 를 확인 합 니 다. 이때 10.10.200.100 을 통 해 방문 한 데이터 일 때 Nginx Master Node (10.10.200.3) 의 페이지 데 이 터 를 볼 수 있 습 니 다.
[root@kvm-server ~]# curl -l http://10.10.200.100

Nginx

10.10.200.3


Nginx Master Node 의 nginx 서 비 스 를 중단 하고 keepalived 가 nginx 서 비 스 를 Nginx Backup Node (10.10.2002) 위로 전환 할 지 테스트 합 니 다.
#/etc/init.d/nginx stop

이 때 Nginx BackUp Node (10.10.2002) 의 로그 정 보 를 보면 VIP 가 전환 되 었 습 니 다.
#tail -f /var/log/message
Jul 30 15:04:55 nginx-backup Keepalived_vrrp[23293]: VRRP_Instance(VI_1) forcing a new MASTER election
Jul 30 15:04:56 nginx-backup Keepalived_vrrp[23293]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jul 30 15:04:57 nginx-backup Keepalived_vrrp[23293]: VRRP_Instance(VI_1) Entering MASTER STATE
Jul 30 15:04:57 nginx-backup Keepalived_vrrp[23293]: VRRP_Instance(VI_1) setting protocol iptable drop rule
Jul 30 15:04:57 nginx-backup Keepalived_vrrp[23293]: VRRP_Instance(VI_1) setting protocol VIPs.
Jul 30 15:04:57 nginx-backup Keepalived_vrrp[23293]: Sending gratuitous ARP on em2 for 10.10.200.100
Jul 30 15:04:57 nginx-backup Keepalived_vrrp[23293]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on em2 for 10.10.200.100
Jul 30 15:04:57 nginx-backup Keepalived_vrrp[23293]: Sending gratuitous ARP on em2 for 10.10.200.100
Jul 30 15:04:57 nginx-backup Keepalived_vrrp[23293]: Sending gratuitous ARP on em2 for 10.10.200.100
Jul 30 15:04:57 nginx-backup Keepalived_vrrp[23293]: Sending gratuitous ARP on em2 for 10.10.200.100
Jul 30 15:04:57 nginx-backup Keepalived_vrrp[23293]: Sending gratuitous ARP on em2 for 10.10.200.100
Jul 30 15:05:02 nginx-backup Keepalived_vrrp[23293]: Sending gratuitous ARP on em2 for 10.10.200.100
Jul 30 15:05:02 nginx-backup Keepalived_vrrp[23293]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on em2 for 10.10.200.100
Jul 30 15:05:02 nginx-backup Keepalived_vrrp[23293]: Sending gratuitous ARP on em2 for 10.10.200.100
Jul 30 15:05:02 nginx-backup Keepalived_vrrp[23293]: Sending gratuitous ARP on em2 for 10.10.200.100
Jul 30 15:05:02 nginx-backup Keepalived_vrrp[23293]: Sending gratuitous ARP on em2 for 10.10.200.100
Jul 30 15:05:02 nginx-backup Keepalived_vrrp[23293]: Sending gratuitous ARP on em2 for 10.10.200.100

ip addr 로 보기
3: em2:  mtu 1500 qdisc mq state UP qlen 1000
    link/ether 84:8f:69:da:5e:68 brd ff:ff:ff:ff:ff:ff
    inet 10.10.200.2/24 brd 10.10.200.255 scope global em2
       valid_lft forever preferred_lft forever
    inet 10.10.200.100/24 scope global secondary em2
       valid_lft forever preferred_lft forever
    inet6 fe80::d7ca:173b:3e56:65f5/64 scope link 
       valid_lft forever preferred_lft forever

curl 을 통 해 10.10.20.100 페이지 데 이 터 를 가 져 옵 니 다. 이 페이지 데 이 터 는 Nginx BackUp Node (10.10.20.2) 의 데이터 여야 합 니 다.
[root@nginx-backup sbin]# curl -l http://10.10.200.100

Nginx

10.10.200.2


위의 조작 을 통 해 keepalived 가 nginx cluster 의 master & backup node 를 정상적으로 전환 할 수 있다 는 것 을 설명 합 니 다.

좋은 웹페이지 즐겨찾기