[CentOS] Linux HAProxy HA 구성하기 [HA Auth 방식 변경 / keepalived.conf]
Nowhere 와 Now here 의 차이

IT/ㄴ Linux

[CentOS] Linux HAProxy HA 구성하기 [HA Auth 방식 변경 / keepalived.conf]

TIENE 2023. 9. 12. 15:36
반응형

Linux HAProxy HA 구성하기

[CentOS] Linux HAProxy로 Load Balancing 하기 [HTTP / HTTPS / DNS]

 

[CentOS] Linux HAProxy로 Load Balancing 하기 [HTTP / HTTPS / DNS]

[구성도] 1. HAProxy HTTP LB 1.1) HAProxy 설치 yum -y install haproxy - HAProxy를 설치한다. 1.2) HAProxy 구성 vi /etc/haproxy/haproxy.cfg - 아래의 설정값을 그대로 입력한다. 기존의 cfg에서 LB에 필요한 부분만 구성되었

a-gyuuuu.tistory.com

 

[CentOS] Linux HAProxy 통계 확인 및 L4 LB 하기 [mariaDB]

 

[CentOS] Linux HAProxy 통계 확인 및 L4 LB 하기 [mariaDB]

[CentOS] Linux HAProxy로 Load Balancing 하기 [HTTP / HTTPS / DNS] [CentOS] Linux HAProxy로 Load Balancing 하기 [HTTP / HTTPS / DNS] [구성도] 1. HAProxy HTTP LB 1.1) HAProxy 설치 yum -y install haproxy - HAProxy를 설치한다. 1.2) HAProxy 구

a-gyuuuu.tistory.com

 

- HAProxy에 대하여 간단하게 알아보았다. 이제는, HA 구성으로 Proxy Server의 이중화를 구성한다.


1.  HAProxy & Keepalived 설치 

1.1) HAProxy 

yum -y install keepalived haproxy

- HAProxy와 Keepalived를 설치한다.

 

2. Keepalived 구성

2.1) Master Keepalive 파일 설정

cd /etc/keepalived/
vim keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
   }
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_haproxy {
    script "killall -0 haproxy"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state MASTER                         # 현재 접속한 Proxy Server의 VRRP 상태 지정
    interface ens33                        # 현재 접속한 Proxy Server의 Interface
    virtual_router_id 51
    priority 200                              # 현재 접속한 Proxy Server의 VRRP 우선 순위 값
    advert_int 1                             # VRRP 광고 간격 (기본값 1초)
    authentication {                       # VRRP Authentication 인증 설정 블록
         auth_type PASS                # VRRP Authentication Method (PASS / AH)
        auth_pass 1111                   # VRRP Authentication String
    }
    unicast_src_ip 192.168.1.251 #현재 접속한 Proxy Server의 IP
    unicast_peer {
        192.168.1.252                     # Backup Proxy Server의 IP
    }
    virtual_ipaddress {
        192.168.1.254/24                # HA VRRP IP
    }
    track_script {
        chk_haproxy
    }
}

 

2.2) Master Keepalive 실행 및 확인

systemctl restart keepalived && systemctl enable keepalived

 

2.3) Master Keepalive IP 확인

ip -brief address show

- Master Server의 실제 IP와 Virtual IP를 확인한다.

 

2.4) Backup Keepalive 파일 설정

cd /etc/keepalived/
vim keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
   }
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_haproxy {
    script "killall -0 haproxy"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
         auth_type PASS                 # VRRP Authentication Method (PASS / AH)
        auth_pass 1111                   # VRRP Authentication String
    }
    unicast_src_ip 192.168.1.252 #현재 접속한 Proxy Server의 IP
    unicast_peer {
        192.168.1.251                     # Backup Proxy Server의 IP
    }
    virtual_ipaddress {
        192.168.1.253/24                 # HA VRRP IP
    }
    track_script {
        chk_haproxy
    }
}

 

 

2.5) Backup Keepalive IP 확인

ip -brief address show

- Backup Server의 실제 IP를 확인한다. 

systemctl restart keepalived && systemctl enable keepalived

 

3. HAProxy 구성

3.1) HAProxy 설정

vim /etc/haproxy/haproxy.cfg

- Master & Backup Server 모두 파일을 수정한다.

global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode http
    log global
    option httplog
    option dontlognull
    option http-server-close
    option forwardfor except 127.0.0.0/8
    option redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

#---------------------------------------------------------------------
# frontend which proxys to the backends
#---------------------------------------------------------------------
frontend FE-WEB-LB
        bind *:80
        mode http
        default_backend BE-WEB-LB

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend BE-WEB-LB
        mode http
        option httpchk GET /
        http-check expect status 200
        #default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
        balance roundrobin
        server app1 192.168.1.150:80 check 
        server app2 192.168.1.151:80 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
listen stats *:9000                                                  #통계 페이지 접속 웹 페이지 포트 번호
    mode http
    stats enable
    stats hide-version
    stats refresh 30s
    stats show-node
    stats realm HAProxy Statistics
    stats uri /monitor                                                #통계 페이지 접속 웹 페이지 저장 디렉토리
    stats auth admin:admin                                  #통계 페이지 접속 시 필요한 Login 정보
systemctl start haproxy && systemctl enable haproxy

- HAProxy를 실행한 뒤, 접속해본다.

 

4. HAProxy 를 통한 LB 확인

4.1) LB 확인

- Virtual IP를 통하여 접속했고,  Windows에서 운영 중인 IIS Server에 Roundrobin 방식으로 접근할 수 있다.

 

- 또한, Master 역할을 담당하고 있는 Master Proxy Server에서 지속적으로 VRRP 광고를 보내어 VRRP Health Check를 진행하고 있다. 이때, Master Proxy Server에서 Keepalived를 중지하였을 때를 최하단에서 기록해두었다. 그리고, Authentication String 값이 패킷에서 노출이 되었다. 이를 AH(Authentication Header)로 암호화하여 송/수신할 때 String 값이 노출되지 않도록 할 수 있다. 이 또한 최하단에 기록해두었다.

 

4.2) HAProxy 통계 보고서 확인

- IP:9000/monitor를 입력하여, Master Proxy Server로 접속이 가능하다.

- IP:9000/monitor를 입력하여, Backup Proxy Server로 접속이 가능하다.

- Virtual IP를 입력하여 접속할 경우, Master의 권한을 가지고 있는 Server로 접속이 된다. 또한, 접속 시 User와 Password를 요구하는 것을 패킷으로 확인할 수 있으며, 포트 번호 또한 확인 가능하다.

4.3) HAProxy 이중화 확인

- Master Proxy Server에서 Keepalived를 중지하였을 때, Master의 권한이 Backup Proxy Server로 이관되어서, 장애 발생으로 변경된 Master Proxy Server가 지속적으로 VRRP 광고를 진행한다. 하지만, Keepalived를 중지하였기 때문에, VRRP Protocol에 대한 응답을 받을 수 없다. 하지만, Master로 전환된 기 Backup Proxy Server가 살아있기 때문에 동일하게 외부에서 192.168.1.253으로 접근하여도 웹으로의 통신이 가능하며 LB 또한 가능하다.

 

4.4) VRRP Auth String 암호화 

cd /etc/keepalived/
vim keepalived.conf

- Master에서만 인증 방식과 값을 변경하여 저장 후 재시작하였다. 변경된 점은 다음의 사진과 같이, 서로 자기 자신이 Master가 된 것처럼 광고 패킷을 송신하는데, 서로의 방식과 값이 일치하지 않아서 계속 찾고 있는 것이다.

authentication{
                 auth_type AH
                 auth_pass TIENE@@15
}

 

- 양쪽 모두 동일하게 변경한 후에는 정상적으로 VRRP Health Check가 진행되었다.


 

반응형