HAProxy
HAProxy는 오픈 소스 로드 밸런서 및 프록시 소프트웨어로, 웹 서버나 애플리케이션 서버의 부하 분산과 고가용성을 위해 사용됩니다. 주요 기능은 다음과 같습니다:
1. 로드 밸런싱: 클라이언트 요청을 여러 대의 서버로 분산하여 서버 부하를 고르게 분배합니다. 이를 통해 서버 응답 시간을 최적화하고 성능을 향상시킵니다.
2. 프록시 서버: 클라이언트와 서버 간의 중계 역할을 수행하여 보안 및 성능을 향상시킵니다. 클라이언트로부터 받은 요청을 실제 서버로 전달하고, 서버의 응답을 클라이언트로 전달합니다.
3. 세션 유지 관리: 세션 지속성을 유지하면서 로드 밸런싱을 수행할 수 있습니다. 클라이언트의 요청이 항상 같은 서버로 전달되도록 합니다.
4. 헬스 체크: 백엔드 서버의 상태를 주기적으로 확인하여 비정상적인 서버를 제외하고 정상적인 서버로만 요청을 전달합니다.
Keepalived
Keepalived는 리눅스 기반 시스템에서 고가용성 및 이중화 서비스를 제공하기 위한 데몬 프로그램입니다. 주로 IP 가상화와 함께 사용되며, 여러 서버 사이에서 IP 주소 및 서비스 상태를 공유하여 높은 가용성을 유지합니다. 주요 기능은 다음과 같습니다:
1. 가상 IP 주소 공유: Keepalived는 가상 IP 주소를 여러 대의 서버에서 공유하도록 설정할 수 있습니다. 이를 통해 클라이언트는 가상 IP 주소로 서비스에 접근하며, Keepalived는 실제로 해당 서비스를 제공하는 서버로 요청을 전달합니다.
2. 이중화 및 페일오버: Keepalived는 Master/Backup 구성으로 작동합니다. Master 서버가 주 서비스를 제공하다가 장애가 발생하면 Backup 서버가 이를 감지하고 Master 역할로 전환하여 서비스 중단 없이 계속 운영할 수 있습니다.
3. VRRP(Virtual Router Redundancy Protocol): Keepalived는 VRRP를 사용하여 가상 라우터의 이중화를 수행합니다. 이를 통해 서버 간에 라우터 역할을 공유하고, 가상 IP 주소를 자동으로 이중화할 수 있습니다.
4. 사용자 정의 상태 확인: Keepalived는 사용자가 정의한 스크립트를 실행하여 서버나 서비스의 상태를 주기적으로 확인하고 이를 기반으로 상태 전환을 결정합니다.
요약
HAProxy는 로드 밸런싱과 프록시 기능을 제공하며, Keepalived는 고가용성 및 이중화 서비스를 제공합니다. 두 소프트웨어를 함께 사용하면 웹 서비스나 애플리케이션의 가용성을 향상시키고, 부하 분산을 실현할 수 있습니다.
사전 서버 환경 준비 사항
HA Proxy 용 container 2대 (Ubuntu 22.04) - 192.168.0.180, 192.168.0.181
nginx 용 container 2대 (Ubuntu 22.(04) - 192.168.0.182, 192.168.0.183
HA Proxy 설치 - HA Proxy 1,2 서버에 모두 설치
sudo apt-get update
sudo apt-get install haproxy
keepalived 설치 - HA Proxy 1,2 서버에 모두 설치
sudo apt-get update
sudo apt-get install keepalived
haproxy.cfg 설정 - HA Proxy 1,2 서버 모두 설정
vi /etc/haproxy/haproxy.cfg
# 프론트엔드 설정 섹션
frontend my_frontend
bind *:80 # 모든 인터페이스의 80번 포트에 바인딩
mode http # HTTP 모드로 설정
default_backend my_backend # 기본 백엔드로 my_backend 지정
# 백엔드 설정 섹션
backend my_backend
mode http # HTTP 모드로 설정
balance roundrobin # Round Robin 방식으로 로드 밸런싱
server server1 192.168.0.182:80 check # 서버1에 대한 설정, 체크 기능 사용
server server2 192.168.0.183:80 check # 서버2에 대한 설정, 체크 기능 사용
keepalived.conf 설정 - HA Proxy 1,2 서버에 모두 설정
vi /etc/keepalived/keepalived.conf
keepalieved.conf HA Proxy1 서버 설정
global_defs {
router_id rtr_0
}
vrrp_instance VI_1 {
state MASTER
interface eth0 # 사용 중인 네트워크 인터페이스로 변경해야 합니다.
virtual_router_id 51
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass PASSWORD
}
virtual_ipaddress {
192.168.0.179 # 가상 IP 주소
}
}
keepalieved.conf HA Proxy2 서버 설정
global_defs {
router_id rtr_0
}
vrrp_instance VI_1 {
state BACKUP
interface eth0 # 사용 중인 네트워크 인터페이스로 변경해야 합니다.
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass PASSWORD
}
virtual_ipaddress {
192.168.0.179 # 가상 IP 주소
}
}
HA Proxy 와 keepalived 서비스 재시작
sudo service keepalived start
sudo service haproxy restart
HA Proxy 관리자 페이지 설정
vi /etc/haproxy/haproxy.cfg
listen hastats
mode http
bind *:8088
stats enable
stats show-legends
stats uri /hastat
stats auth admin:admin
HA Proxy 관리자 페이지 접속
http://[서버 IP]:8088/hastat
haproxy.cfg 설정 파일 작성법 예시
# 전역 설정 섹션
global
log /dev/log local0 # 로그를 local0에 저장
log /dev/log local1 notice # 로그 레벨을 notice로 설정
chroot /var/lib/haproxy # HAProxy 실행 시 chroot하여 루트 디렉토리를 변경
stats socket /run/haproxy/admin.sock mode 660 level admin # 상태 정보 소켓 설정
stats timeout 30s # 상태 정보 소켓 타임아웃 시간 설정
user haproxy # HAProxy 프로세스를 실행할 사용자 설정
group haproxy # HAProxy 프로세스를 실행할 그룹 설정
daemon # 백그라운드 데몬 모드로 실행
# 기본 설정 섹션
defaults
log global # 로그를 전역 범위로 설정
mode http # HTTP 모드로 설정
option httplog # HTTP 로깅 사용
option dontlognull # 빈 응답은 로그에 기록하지 않음
timeout connect 5000 # 연결 제한 시간을 5초로 설정
timeout client 50000 # 클라이언트 제한 시간을 50초로 설정
timeout server 50000 # 서버 제한 시간을 50초로 설정
# 프론트엔드 설정 섹션
frontend my_frontend
bind *:80 # 모든 인터페이스의 80번 포트에 바인딩
mode http # HTTP 모드로 설정
default_backend my_backend # 기본 백엔드로 my_backend 지정
# 백엔드 설정 섹션
backend my_backend
mode http # HTTP 모드로 설정
balance roundrobin # Round Robin 방식으로 로드 밸런싱
server server1 192.168.1.101:80 check # 서버1에 대한 설정, 체크 기능 사용
server server2 192.168.1.102:80 check # 서버2에 대한 설정, 체크 기능 사용
keepalived.conf 파일 작성법 예시
# 전역 설정 섹션
global_defs {
notification_email {
admin@example.com # 이메일 주소를 여기에 추가하면 Keepalived 문제 알림을 받을 수 있습니다.
}
notification_email_from keepalived@example.com # 알림 이메일 발신자 설정
smtp_server 192.168.1.200 # SMTP 서버 주소 설정 (이메일 알림 사용 시 필요)
smtp_connect_timeout 30 # SMTP 서버 연결 제한 시간 설정
router_id LVS_DEVEL # 라우터 ID 설정
}
# Keepalived 텅스턴 섹션 (Master / Backup 상태 변경 감지를 위해 사용)
vrrp_script chk_haproxy {
script "/etc/keepalived/chk_haproxy.sh" # HAProxy 상태 확인 스크립트 경로 설정
interval 2 # 상태 확인 간격 설정 (초 단위)
weight -20 # 상태 변경을 위한 가중치 설정
}
# Keepalived VRRP 인스턴스 섹션
vrrp_instance VI_1 {
state MASTER # 현재 인스턴스의 상태 (MASTER 또는 BACKUP)
interface eth0 # Keepalived가 감지할 인터페이스 설정
virtual_router_id 51 # VRRP 가상 라우터 ID 설정
priority 100 # VRRP 우선 순위 설정 (Master가 되는 기준이 됨)
advert_int 1 # VRRP 광고 전송 간격 설정 (초 단위)
authentication {
auth_type PASS # 인증 유형 (PASS 혹은 AH, 암호화를 사용할 경우 AH)
auth_pass PASSWORD # VRRP 인증 비밀번호 설정
}
virtual_ipaddress {
192.168.1.100 # 가상 IP 주소 설정 (로드 밸런서의 가상 IP 주소)
}
track_script {
chk_haproxy # 상태 확인 스크립트를 통해 HAProxy 상태 감지
}
}
설정 파일 주석 설명:
global_defs: Keepalived 전역 설정 섹션으로, 이메일 알림과 라우터 ID를 설정합니다.
vrrp_script: Keepalived 상태 확인 스크립트 섹션으로, HAProxy 상태를 감지합니다.
vrrp_instance: Keepalived VRRP 인스턴스 섹션으로, HAProxy 로드 밸런서의 가상 IP 주소와 인증 정보, 우선 순위 등을 설정합니다.
주석을 통해 각 설정 항목이 어떤 역할을 하는지 설명되어 있으며, 이 설정 파일은 Keepalived를 이용하여 HAProxy를 이중화하는 예시입니다. 필요에 따라 설정을 변경하여 서버 환경에 맞게 구성할 수 있습니다. 또한, 스크립트 파일(chk_haproxy.sh)은 HAProxy 상태를 확인하여 Keepalived의 Master/Backup 상태를 변경하는 데 사용됩니다. 이 스크립트는 사용자가 직접 작성해야 합니다.
'Linux' 카테고리의 다른 글
[Linux] curl 로 Restful API 호출 및 JSON 데이터 전송 (1) | 2023.09.19 |
---|---|
[Linux] Shell in a box 설치하여, Web 브라우저에서 사용하기 (1) | 2023.08.29 |
[Proxmox] 헤놀로지(Xpenology) NAS 설치부터 볼륨 생성까지! (1) | 2023.08.25 |
[Linux] service 등록하는 방법 (1) | 2023.06.25 |
[Linux] curl 명령어를 이용한 wol(Wake on Lan) 호출 (1) | 2023.06.23 |