CentOS 7에서 Nginx용 로드 밸런서로 HAProxy를 설정하는 방법
이 페이지에서
- HAProxy의 기본 개념
- 레이어 4 및 레이어 7
- 균형 알고리즘\n
HAProxy 또는 고가용성 프록시는 오픈 소스 TCP 및 HTTP 로드 밸런서 및 프록시 서버 소프트웨어입니다. HAProxy는 Willy Tarreau가 C로 작성했으며 SSL, 압축, 연결 유지, 사용자 정의 로그 형식 및 헤더 재작성을 지원합니다. HAProxy는 메모리 사용량이 적고 CPU 사용량이 적은 빠르고 가벼운 프록시 서버 및 로드 밸런서입니다. Github, StackOverflow, Reddit, Tumblr, Twitter 등과 같은 대규모 사이트에서 사용됩니다. 지난 몇 년 동안 가장 인기 있는 소프트웨어 로드 밸런서 및 프록시 서버가 되었습니다.
이 튜토리얼에서는 서버 3개, 로드 밸런서 1개, Nginx 웹 서버 2개에 대한 HAProxy 설치 및 구성을 안내합니다. 단일 서버에 HAProxy를 설치한 다음 다른 서버에 Nginx 웹 서버를 설치합니다. HAProxy는 Nginx 웹 서버의 로드 밸런서 역할을 합니다.
HAProxy의 기본 개념
레이어 4 및 레이어 7
HAProxy는 TCP 모드 레이어 4와 HTTP 모드 레이어 7의 두 가지 모드로 실행할 수 있습니다. 레이어 4 TCP 모드에서 HAProxy는 클라이언트에서 응용 프로그램 서버로 RAW TCP 패킷을 전달합니다. 계층 7 HTTP 모드에서 HAProxy는 HTTP 헤더를 응용 프로그램 서버로 전달하기 전에 구문 분석합니다. 이 튜토리얼에서는 Layer 7 HTTP 모드만 지원하는 웹 서버로 Nginx를 사용합니다.
균형 알고리즘
로드 밸런싱을 수행할 때 서버를 선택하기 위해 HAProxy에서 사용하는 알고리즘입니다. 다음 모드를 사용할 수 있습니다.
라운드 로빈
이것은 가장 간단한 균형 알고리즘입니다. 각각의 새 연결에 대해 다음 백엔드 서버에서 처리합니다. 목록의 마지막 백엔드 서버에 도달하면 백엔드 목록의 맨 위에서 다시 시작합니다.
라스트콘
새 연결은 최소한의 연결로 백엔드 서버에서 처리됩니다. 이것은 요청의 시간과 부하가 많이 다를 때 유용합니다.
원천
고정 세션을 위한 것으로, 클라이언트 IP는 이 IP로부터 마지막 요청을 받은 백엔드 서버를 결정하기 위해 해시됩니다. 따라서 IP A는 항상 backend1에서 처리하고 IP B는 세션을 방해하지 않도록 항상 banckend2에서 처리합니다.
기타 알고리즘이 있습니다. 자세한 내용은 공식 HAProxy 사이트를 확인하세요.
전제 조건
- 3 CentOS 7
로드밸런서
192.168.1.102
nginx1
192.168.1.104
nginx2
192.168.1.105- 3개 서버 모두에 대한 루트 권한.\n
1단계 - /etc/hosts 파일 구성
로드 밸런서 서버에 로그인하고 /etc/hosts 파일을 편집합니다.
ssh
sudo suvi /etc/hosts
nginx1 및 nginx2 호스트 이름을 추가합니다.
192.168.1.104 nginx1.loadbalancer.me nginx1
192.168.1.105 nginx2.loadbalancer.me nginx2파일을 저장하고 편집기를 종료합니다.
다음으로 Nginx 서버(nginx1 및 nginx2)에서 호스트 파일을 편집합니다.
ssh
호스트 파일에서 로드 밸런서에 대한 새 줄을 편집하고 추가합니다.
vi /etc/host
각 nginx 서버에 로드밸런서 호스트 이름을 추가합니다.
192.168.1.102 loadbalancer
nginx1 및 nginx2 서버에서 이 작업을 수행합니다.
2단계 - HAProxy 설치 및 구성
HAProxy는 CentOS 7 리포지토리에서 사용할 수 있으며 로드 밸런서 서버에 로그인하고 패키지 목록을 업데이트합니다.
ssh
yum -y update이제 다음 yum 명령으로 HAProxy를 설치합니다.
yum -y install haproxy
설치가 완료되면 "/etc/haproxy/" 디렉토리로 이동하여 원본 구성 파일을 백업합니다.
cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg.orig다음으로 vi 편집기를 사용하여 새 HAProxy 구성 파일 "haproxy.cfg" 파일을 추가합니다.
vi haproxy.cfg
아래 구성을 붙여넣습니다.
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2 #Log configuration
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy #Haproxy running under user and group "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
#---------------------------------------------------------------------
#HAProxy Monitoring Config
#---------------------------------------------------------------------
listen haproxy3-monitoring *:8080 #Haproxy Monitoring run on port 8080
mode http
option forwardfor
option httpclose
stats enable
stats show-legends
stats refresh 5s
stats uri /stats #URL for HAProxy monitoring
stats realm Haproxy\ Statistics
stats auth howtoforge:howtoforge #User and Password for login to the monitoring dashboard
stats admin if TRUE
default_backend app-main #This is optionally for monitoring backend
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend main
bind *:80
option http-server-close
option forwardfor
default_backend app-main
#---------------------------------------------------------------------
# BackEnd roundrobin as balance algorithm
#---------------------------------------------------------------------
backend app-main
balance roundrobin #Balance algorithm
option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost #Check the server application is up and healty - 200 status code
server nginx1 192.168.1.104:80 check #Nginx1
server nginx2 192.168.1.105:80 check #Nginx2구성 파일을 저장하고 종료합니다.
다음으로 HAProxy에 대한 rsyslog를 구성합니다.
HAProxy 통계를 기록하도록 rsyslog 데몬을 구성합니다. rsyslog.conf 파일을 편집하여 rsyslog에서 사용할 UDP 포트 514를 활성화합니다.
vi /etc/rsyslog.conf
UDP 연결을 활성화하려면 이 줄의 주석을 제거하십시오.
$ModLoad imudp
$UDPServerRun 514특정 IP를 사용하려면 아래와 같이 새 줄을 추가하면 됩니다.
$UDPServerAddress 127.0.0.1
파일을 저장하고 종료합니다.
그런 다음 rsyslog에 대한 새 haproxy 구성 파일을 만듭니다.
cd /etc/rsyslog.d/
vi haproxy.conf아래에 구성 붙여넣기:
local2.=info /var/log/haproxy-access.log #For Access Log
local2.notice /var/log/haproxy-info.log #For Service Info - Backend, loadbalancer저장 및 종료.
이제 rsyslog를 다시 시작한 다음 haproxy를 시작합니다.
systemctl restart rsyslog
systemctl start haproxy부팅 시 시작하도록 haproxy를 추가합니다.
systemctl enable haproxy
3단계 - Nginx 설치 및 구성
이 섹션에서는 nginx1 및 nginx2 서버의 epel 저장소에서 Nginx를 설치합니다.
서버에 로그인:
ssh
아래 yum 명령으로 epel 저장소를 설치합니다.
yum -y install epel-release
이제 Nginx를 설치할 수 있습니다.
yum -y install nginx
Nginx가 설치되었습니다. 웹 디렉토리로 이동하여 색인 파일을 변경하여 두 서버 중 어느 것이 html 파일을 전달했는지 확인할 수 있도록 합니다.
cd /usr/share/nginx/html/
echo "<h1>nginx1.loadbalance.me</h1>" > index.html #For nginx1 server
echo "<h1>nginx2.loadbalance.me</h1>" > index.html #For nginx2 server다음으로 부팅 시 시작하도록 Nginx를 추가한 다음 시작합니다.
systemctl enable nginx
systemctl start nginxnginx1 및 nginx2 서버에서 이 단계를 수행하고 있는지 확인하십시오.
4단계 - 테스트
로드 밸런서 IP에 액세스하여 브라우저에서 테스트: 192.168.1.102
curl 명령으로 테스트:
curl 192.168.1.102
사용자 이름 및 비밀번호 "howtoforge"를 사용하여 포트 8080에서 실행 중인 HAProxy 웹 모니터링에 로그인하는 테스트:
http://192.168.1.102:8080/stats
HAProxy는 성공적으로 작동하고 있으며 두 Nginx 웹 서버의 부하 분산기 역할을 합니다.
결론
HAProxy 또는 고가용성 프록시는 TCP 기반 서비스에 고가용성을 제공하는 오픈 소스 소프트웨어로 HTTP 로드 밸런서 및 프록시 서버로 작동합니다. 이 소프트웨어는 C로 작성되었으며 SSL, keep-alive 및 압축을 지원합니다. HAProxy는 작은 메모리 공간과 낮은 CPU 사용량으로 빠르고 가벼운 로드 밸런서와 프록시 서버가 필요한 모든 사람에게 적합한 선택입니다. Haproxy는 레이어 4 TCP 모드 및 레이어 7 HTTP 모드에서 실행할 수 있습니다. Nginx는 HAProxy와 함께 레이어 7 HTTP 모드만 지원합니다. Layer 4 TCP 모드를 사용하려면 Apache와 같은 다른 웹 서버를 사용할 수 있습니다. CentOS 7에서 HAProxy는 기본 리포지토리에서 사용할 수 있습니다. 설치 및 구성이 쉽습니다.