3티어 기반 HAProxy 및 Keepalived 적용

가오리·2023년 11월 21일

아키텍처

목록 보기
2/3

아키텍처

전제조건

  • HAProxy1 서버는 VM으로 작동 (192.168.35.141)
  • HAProxy2 서버는 VM으로 작동 (192.168.35.125)
  • WS(Web Server)는 Nginx
    • WS1: 192.168.35.86
    • WS2: 192.168.35.226
  • WAS(Web Application Server)는 Tomcat
    • WAS1: 192.168.0.103
    • WAS2: 192.168.0.104
  • DB(DataBase)는 MySQL(Maria)
    • DB: 192.168.0.105
  • WS, WAS 및 DB는 구축되어 있다는 것을 전제로 HAProxy 설치 및 연동을 진행함.

VM 생성

  • vm 생성시 네트워크 어댑터에 브리지 설정 사용

  • HAProxy1 ip 확인

  • WS1, WS2 ip 확인

1. HAProxy Load balancer 설정

  • HAProxy1 접속 - ssh root@vm_ip
  • HAProxy는 트래픽이 많은 웹기반 솔루션의 부하를 효율적으로 분산시켜 줄 수 있는 무료 오픈소스 로드밸런서임. 또한 이중화를 위한 Failover 기능도 제공함.
  • host파일에 정보업데이트
    • /etc/hosts
  • loadBalancer를 할 ws1ws2ip 및 이름 설정
  • HAProxy 설치

    yum update -y
     yum install bind-utils
     yum install yum-utils
     yum install haproxy

  • HAProxy 실행 및 상태 확인

systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy

  • HAProxy설정

    • /etc/haproxy/haproxy.cfg

    • 아래와 같이 수정한다.

      • Global부분: HAProxy에 영향을 미치는 프로세스의 전반적인 성능/보안의 설정을 함.
      • Default부분: Frontend/Backend부분의 적용할 공통적인 사항을 설정함.
      • Frontend: 클라이언트가 연결될 수 있는 IP / Port를 설정, SSL연결도 할 수 있음.
        • Ex) bind 192.168.0.100:443 ssl crt /etc/ssl/certs/test.pem
        • http-request redirect scheme htps{ssl_fc}

      • Backend: 실질적인 로드밸런스 처리부분임.

      • Listen: 통계를 기반으로 사이트에서 볼 수 있도록 설정하는 부분.

      • yum install -y rsyslog
      • 9000포트를 바인딩 하면 HAProxy서버 방화벽에서 열어줘야 함.

  • rsylog 설정

    • /etc/rsyslog.conf

    • 아래와 같이 주석처리를 제거함.

    • 아래 경로에 rsyslog를 위한 haproxy.conf파일을 생성한다.

    • 생성한 haproxy.conf파일에 아래 내용을 추가한다.

    • rsyslog를 시작하고 서비스 등록을 한다.

  • 모든 서버에 hosts등록 및 방화벽에서 80포트를 오픈해줘야 함.
    • HAProxy
    • WS1
    • WS2

HAProxy를 통한 로드밸런싱 작동 검증

  • Nginx웹서버는 두개로 nginx1과 nginx2로 페이지가 각각 표시되도록 수정하고 HAProxy(192.168.0.100)으로 새로고침을 누르면 Roundrobin기반으로 번갈아 가면서 바뀌는 것을 볼 수 있음.

  • WS1 nginx1 html

  • ws1

  • ws2

HAProxy를 통한 통계사이트 접속

2. HAProxy를 이용한 Failover구축(이중화) 설정

  • 앞서 구축된 LB이외에 HAProxy는 HA(High Availability)-고가용성 기술을 제공함. L4 & L7수준에서 이중화 기술을 제공함.
  • 앞단(Frontend)의 HAProxy LB가 하나이고 만약에 이슈가 발생하여 작동이 안된다면?
  • 고가용성을 위해 Backup HAProxy을 하나 더 구축하여 Active HAProxy 가 문제가 발생 시 자동으로 Failover 되어 Backup HAProxy 가 작동되도록 함.
    • 이를 위해 VIP 와 추가 HAProxy 서비스의 IP 및 포트정보가 추가되어야 함.
    • VIP(Virtual IP)VRRP(Virtual Router Redundancy Protocol) 을 기반으로 이중화 구조를 구현하기 위한 가상 IP임. 또한 VRRPActive/Standby, Master/Slave 구조의 이중화 시스템을 구현하기 위해 가상의 게이트웨이 기반의 라우팅 기술임.
    • 여기서는 WS1~WS2 범위까지만 이중화구조로 구현하였음.
HostIPPortRemark
VIP192.168.35.207Haproxy1~2 해당
haproxy1192.168.35.14180Master(keepalived & LB)
haproxy2192.168.35.12580Backup(keepalived & LB)
ws1192.168.35.8680Nginx
ws2192.168.35.22680Nginx
  • HAProxy2 서버에 haproxy를 설치하고 설정을 앞선 HAProxy1와 같이 진행하여 미리 완료한다. HAProxy1과 같은 환경으로 설정해야 함.
    • yum install -y haproxy
  • HAProxy2의 haproxy.cfg 수정을 한다. (HAProxy1 에서 복사 후 수정)
    • /etc/haproxy/haproxy.cfg
  • vi 및 쉘내용을 복사하려면 clipboard를 활성화 해줘야 한다.
    • yum install -y vim-X11 또는 dnf install -y vim-X11로 설치를 한다.

vim --version 또는 vimx --version으로 확인 시 -clipboard → +clipboard 로 변경한 것을 볼 수 있다.

  • VIP설치를 위해 각 haproxy1~2 hosts 정보 등록

    • /etc/hosts
    • HAProxy1
    • HAProxy2
  • keepalive설치

    • 이중화설정을 위한 호스트(VM) HAProxy1 & 2에 yum 또는 dnf로 keepalived를 설치함.
    • yum install -y keepalived
  • keepalive 설정을 함.

    • Interface 체크를 위해 ifconfig로 미리 확인한다.
    • etc/keepalived/keepalived.conf
      • HAProxy1
        • Priority는 반드시 backup보다 높게해야 Master로 작동을 한다.
        • virtual_ipaddress는 실질적으로 사용할 VIP정보를 입력한다.
      • HAProxy2
      • HAProxy1과 마찬가지로 ifconfig로 인터페이스 체크를 먼저 한 후 keepalived.conf를 수정한다.
        업로드중..
      • HAProxy1은 101, HAProxy2는 100으로 설정된 것을 볼 수 있다.
  • HAProxy1 & HAProxy2 서비스를 재시작 하고 상태를 체크한다.

  • 중요부분! 서버커널 정보 수정

    • Keepalived가 작동되는 서버는 VIP binding을 위해 해당 서버의 커널값을 수정해줘야 함. 로컬의 IP가 아닌 다른 NIC의 IP로 바인딩을 가능하게 해줌. 이것이 되어야 VIP를 통해 Active에서 장애 발생 시 Backup으로 VIP 바인딩이 되어 계속 작동될 수 있게끔 해줌.

    • /etc/sysctl.conf

      • net.ipv4.ip_nonlocal_bind=1
      • sysctl -p
      • cat /etc/sysctl.conf로 확인
      • reboot
  • HAProxy1~2는 이제 하나의 게이트웨이가 될 수 있는 VIP(192.168.0.103)를 바라보고 있음. Haproxy.cfg의 설정파일에서 로드밸런싱을 위한 bind를 이 IP로 변경해야 함. VIP:192.168.35.206

  • HAProxy1 (HAProxy2도 진행)

VIP를 통한 backend접속 및 Failover 검증

  • tcpdump -n vrrp를 이용하여 IP대역을 확인하면서 검증함.
  • tcpdump 명령어가 실행이 안된다면 yum install -y tcpdump로 설치
  • Haproxy1 호스트
    • vrrp프로토콜을 기반으로 Haproxy1~2의 IP가 LB작동으로 번갈아가면서
      변경되는 것을 볼 수 있음.
    • Haproxy2에서도 마찬가지로 LB를기반으로 haproxy1과 번갈아 가면서 호출을 하고 있음.

Failover 테스트

  • HAProxy1을 다운 시 HAProxy2가 작동하면서 Backend에서 작동하는 Nginx1~2가 제대로 LB에의해 작동하는 지 테스트함.

  • Virtual Box에서 Failover 테스트를 위해 HAProxy1의 VM을 다운시킴.

  • Haproxy2에서 tcpdump로 패킷체크를 해보면 192.168.0.104(haproxy2)로만 나가는 것을 볼 수 있음.

  • 웹브라우저에서 refresh를 해보면 잠시 후 nginx1~2가 LB를 기반으로 잘 작동되는 것을 볼 수 있음. 이 의미는 haproxy2의 로드밸랜싱을 통해 정상적으로 서비스를 하고 있다는 의미임.

  • VirtualBox에서 HAProxy1을 다시 시작하면 패킷통신이 정상적으로 복구되고 nginx1~2도 문제없이 잘 접속되는 것을 볼 수 있음.

트러블 슈팅

  • 처음에는 VIP라는 VM을 파서 그 VM의 IP를 넣어줘야 하는지 알았습니다.

  • 하지만 VIP는 중복성을 구현하고 네트워크 서비스의 고가용성을 보장하는 데 사용되는 가상 IP 주소이라는 것을 알고 만들어 놓은 VIP의 VM을 삭제하고 하니 잘 작동하였습니다.

  • restart 중요

profile
가오리의 개발 이야기

0개의 댓글