웹사이트 검색

CentOS 8에서 Nginx용 로드 밸런서로 HAProxy를 설정하는 방법


최대의 웹 애플리케이션 가용성, 확장성 및 고성능을 보장하기 위해 이제 서버 클러스터링 및 로드 밸런싱과 같은 중복성을 도입하는 기술을 구현하는 것이 일반적입니다. 예를 들어, 모두 동일한 애플리케이션을 실행하는 서버 클러스터를 설정한 다음 그 앞에 로드 밸런서를 배포하여 트래픽을 분산시킵니다.

HAProxy는 오픈 소스의 강력하고 고성능이며 안정적이고 안전하며 널리 사용되는 고가용성 TCP/HTTP 로드 밸런서, 프록시 서버 및 SSL/TLS 터미네이터입니다. 트래픽이 매우 높은 웹 사이트. Linux, Solaris, FreeBSD, OpenBSD 및 AIX 운영 체제에서 안정적으로 잘 실행됩니다.

이 가이드에서는 NGINX 웹 서버 클러스터의 트래픽을 제어하기 위해 CentOS 8에서 HAProxy를 사용하여 전용 고가용성 로드 밸런서를 설정하는 방법을 보여줍니다. 또한 HAProxy에서 SSL/TLS 종료를 구성하는 방법을 보여줍니다.

전제 조건:

최소 CentOS 8 설치로 총 4개의 서버.

테스트 환경 설정

----------- HAProxy Server Setup ----------- 
HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247
Test Site Domain: www.tecmint.lan


----------- Client Web Servers Setup ----------- 
Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200
Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21
Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34

1단계: 클라이언트 시스템에 Nginx HTTP 서버 설정

1. 모든 CentOS 8 클라이언트 시스템에 로그인하고 표시된 대로 dnf 패키지 관리자를 사용하여 Nginx 웹 서버를 설치합니다.

dnf install Nginx

2. 다음으로 Nginx 서비스를 시작합니다. 지금은 시스템 부팅 시 자동으로 시작되도록 활성화하고 systemctl을 사용하여 상태를 확인하여 서비스가 실행 중인지 확인합니다. 명령(모든 클라이언트 컴퓨터에서 이 작업을 수행)

systemctl start nginx
systemctl enable nginx
systemctl status nginx

3. 또한 모든 클라이언트 시스템에서 방화벽 서비스가 실행 중인 경우(systemctl start Firewalld를 실행하여 확인할 수 있음) HTTP 로드 밸런서의 요청이 방화벽을 통해 Nginx 웹 서버로 전달되도록 허용하는 방화벽 구성의 HTTPS 서비스. 그런 다음 방화벽 서비스를 다시 로드하여 새로운 변경 사항을 적용합니다(모든 클라이언트 시스템에서 이 작업을 수행).

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

4. 다음으로 로컬 컴퓨터에서 웹 브라우저를 열고 Nginx 설치가 제대로 작동하는지 테스트합니다. 클라이언트 IP를 사용하여 탐색하세요. Nginx 테스트 페이지가 보이면 클라이언트 컴퓨터에 설치된 웹 서버가 제대로 작동하고 있다는 의미입니다.

5. 다음으로 나중에 HAProxy 설정을 테스트하는 데 사용할 클라이언트 시스템에 테스트 페이지를 만들어야 합니다.

----------- Web Server #1 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #2 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #3 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html

2단계: CentOS 8에 HAProxy 서버 설치 및 구성

6. 이제 다음 명령을 실행하여 HAProxy 서버에 HAProxy 패키지를 설치합니다.

dnf install haproxy

7. 그런 다음 HAProxy 서비스를 시작하고 시스템 부팅 시 자동 시작되도록 활성화한 후 상태를 확인합니다.

systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy

8. 이제 다음 구성 파일을 사용하여 HAProxy를 구성하겠습니다.

vi /etc/haproxy/haproxy.cfg

구성 파일은 네 가지 주요 섹션으로 구분됩니다.

  • 전체 설정 - 프로세스 전체 매개변수를 설정합니다.
  • defaults – 이 섹션은 선언 이후의 다른 모든 섹션에 대한 기본 매개변수를 설정합니다.
  • 프런트엔드 – 이 섹션에서는 클라이언트 연결을 허용하는 청취 소켓 세트를 설명합니다.
  • 백엔드 – 이 섹션에서는 프록시가 수신 연결을 전달하기 위해 연결할 서버 세트에 대해 설명합니다.

전역 설정기본값 아래의 옵션을 이해하려면 HAProxy 문서(문서 끝에 제공된 링크)를 읽어보세요. 이 가이드에서는 기본값을 사용합니다.

HAProxy 로깅 설정

9. HAProxy는 일단 배포되면 IT 인프라에서 중요한 역할을 하므로 이에 대한 로깅 구성은 기본 요구 사항입니다. 이를 통해 백엔드 웹 서버에 대한 각 연결에 대한 통찰력을 얻을 수 있습니다.

로그 매개변수(다음 스크린샷에서 강조 표시됨)는 로그 메시지를 수신할 전역 Syslog 서버(예: CentOS의 기본값인 rsyslog)를 선언합니다. 여기서는 둘 이상의 서버를 선언할 수 있습니다.

기본 구성은 localhost(127.0.0.1)를 가리키며 local2에서 HAProxy 로그 메시지를 식별하는 데 사용되는 기본 시설 코드입니다. rsyslog.

10. 다음으로 HAProxy 로그 메시지를 수신하고 처리하는 방법을 rsyslog 서버에 알려야 합니다. rsyslog 구성 파일을 /etc/rsyslog.conf로 열거나 /etc/rsyslog.d 디렉토리 내에 새 파일을 생성합니다(예: /etc/rsyslog) .d/haproxy.conf.

vi /etc/rsyslog.d/haproxy.conf

기본 포트 514에서 UDP로 로그를 수집하려면 다음 구성을 복사하여 붙여넣으세요.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

또한 rsyslog가 심각도에 따라 두 개의 개별 로그 파일에 쓰도록 지시하려면 다음 줄을 추가하세요. 여기서 local2는 위의 HAProxy 구성에 정의된 시설 코드입니다.

local2.* 	/var/log/haproxy-traffic.log 
local2.notice 	/var/log/haproxy-admin.log

11. 파일을 저장하고 닫습니다. 그런 다음 rsyslog 서비스를 다시 시작하여 최근 변경 사항을 적용합니다.

systemctl restart rsyslog

HAProxy 프런트엔드 및 백엔드 구성

12. 이 섹션에서는 프런트엔드 및 백엔드 프록시를 구성하는 방법을 보여줍니다. HAProxy 구성 파일로 돌아가서 기본 프런트엔드 및 백엔드 섹션을 다음과 같이 수정합니다. 각 매개변수에 대한 자세한 설명은 다루지 않으며 언제든지 공식 문서를 참조할 수 있습니다.

다음 구성은 HAProxy 통계 페이지를 제공하는 데 사용되는 listen 섹션을 정의합니다. bind 매개변수는 지정된 IP 주소(이 경우 모두 *)와 포트(9000 )에 리스너를 할당합니다. ).

통계 활성화 설정은 URI /stats(예: http://server_ip:9000/stats)를 사용하여 액세스할 통계 페이지를 활성화합니다. .

통계 auth 설정은 페이지에 액세스할 때 기본 인증을 추가하는 데 사용됩니다(haproxyLostp@1ss를 사용자 이름과 비밀번호로 교체). 선택).

listen stats
    bind *:9000
    stats enable
    stats hide-version
    stats uri /stats
    stats admin if LOCALHOST
    stats auth haproxy:Lostp@1ss

13. 다음 구성은 TL이라는 프런트엔드 섹션을 정의합니다(원하는 이름을 지정할 수 있음). mode 매개변수는 HAProxy가 작동하는 모드를 정의합니다.

acl(액세스 제어 목록) 매개변수는 요청에서 추출된 콘텐츠를 기반으로 결정을 내리는 데 사용됩니다. 이 예에서 요청은 SSL을 통해 이루어지지 않은 경우 일반 HTTP로 간주됩니다.

그런 다음 http-request set-header 설정을 사용하여 요청에 HTTP 헤더를 추가합니다. 이는 초기 요청이 HTTP(또는 포트 80)를 통해 이루어졌음을 Nginx에 알리는 데 도움이 됩니다.

default_backend 또는 use_backend 지시문은 이 경우 TL_web_servers에서 참조하는 백엔드 서버를 정의합니다.

요청이 use_backend 또는 default_backendHAProxy는 '503 서비스를 사용할 수 없음 오류'를 반환합니다. > 지시문.

frontend TL
    bind *:80
    mode http
    acl http  ssl_fc,not
    http-request set-header X-Forwarded-Protocol http if http
    default_backend TL_web_servers

14. 그런 다음 balance 설정이 HAProxy가 백엔드 서버를 선택하여 요청이 없는 경우 요청을 처리하는 방법을 정의하는 백엔드 섹션을 정의해야 합니다. 지속성 방법은 해당 선택을 재정의합니다.

쿠키 지시문은 쿠키 기반 지속성을 활성화하며 HAProxySERVERID라는 쿠키를 클라이언트에 보내도록 지시하고 이를 초기 응답을 제공한 서버의 ID와 연결합니다.

서버 지시어는 서버_이름(예: websrv1), 서버_IP:포트 형식으로 업스트림 서버를 정의하는 데 사용됩니다. 및 옵션.

핵심 옵션 중 하나는 HAProxy에게 서버의 가용성을 계속 확인하고 통계 페이지에 보고하도록 지시하는 check입니다.

backend TL_web_servers
    mode http
    balance roundrobin
    option  httpchk HEAD /
    cookie SERVERUID insert indirect nocache
    server  websrv1 10.42.0.200:80 cookie websrv1 check
    server  websrv2 10.42.0.21:80  cookie websrv2 check
    server  websrv3 10.42.0.34:80  cookie websrv3 check

다음 스크린샷에 표시된 것처럼 다른 프런트엔드 및 백엔드 섹션을 주석 처리합니다. 파일을 저장하고 닫습니다.

15. 이제 HAProxy 서비스를 다시 시작하여 새로운 변경 사항을 적용합니다.

systemctl restart haproxy

16. 다음으로 HTTP(포트 80) 및 HTTPS(포트 433 Strong>) 서비스는 방화벽에서 다음과 같이 클라이언트 요청을 수락하기 위해 열립니다. 또한 통계 페이지에 액세스하기 위해 방화벽에서 포트 9000을 열고 방화벽 설정을 다시 로드하세요.

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent –add-service=https
firewall-cmd --zone=public --permanent --add-port=9000/tcp
firewall-cmd --reload

3단계: HAProxy 설정 테스트 및 통계 보기

17. 이제 HAProxoy 설정을 테스트할 차례입니다. 모든 서버에 액세스하는 로컬 데스크톱 시스템에서 /etc/hosts 파일에 다음 줄을 추가하여 더미 사이트 도메인을 사용할 수 있도록 합니다.

10.42.0.247  www.tecmint.lan

18. 그런 다음 브라우저를 열고 서버 주소나 사이트 도메인을 사용하여 탐색합니다.

http://10.42.0.247/
OR
http://www.tecmint.lan/

19. HAProxy 통계 페이지에 액세스하려면 다음 주소를 사용하세요.

http://10.42.0.247:9000/stats

그런 다음 HAProxy 구성 파일에 정의한 사용자 이름과 비밀번호를 사용하십시오(stats auth 매개변수 참조).

성공적으로 로그인하면 서버 상태, 현재 요청 비율, 응답 시간 등을 포괄하는 측정항목을 보여주는 HAProxy 통계 페이지가 표시됩니다.

색상 코드 작업과 관련된 상태 보고서가 어떻게 작동하는지 보여주기 위해 백엔드 서버 중 하나를 배치했습니다.

4단계: 자체 서명된 SSL 인증서를 사용하여 HAProxy에서 HTTPS 구성

20. 이 마지막 섹션에서는 HAProxy 서버와 클라이언트 간의 모든 통신을 보호하기 위해 SSL/TLS를 구성하는 방법을 보여줍니다. HAProxy는 네 가지 주요 HTTPS 구성 모드를 지원하지만 이 가이드에서는 SSL/TLS 오프로딩을 사용합니다.

SSL/TLS 오프로딩 모드에서 HAProxy는 클라이언트측 트래픽을 해독하고 백엔드 서버에 일반 트래픽으로 연결됩니다.

표시된 대로 인증서를 생성하는 것부터 시작하겠습니다(스크린샷에 강조표시된 것처럼 인증서 생성 중에 회사 세부정보를 기반으로 질문에 적절하게 답변하세요).

mkdir /etc/ssl/tecmint.lan
cd /etc/ssl/tecmint.lan/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt
cd /etc/ssl/tecmint.lan/
cat tecmint.crt tecmint.key >tecmint.pem
ls -l

21. 다음으로 HAProxy 구성 파일(/etc/haproxy/haproxy.cfg)을 열고 프런트 엔드 섹션을 편집합니다.

frontend TL
    bind *:80
    bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem
    redirect  scheme  https  if  !{ ssl_fc }
    mode http
    acl http  ssl_fc,not
    acl https ssl_fc
    http-request set-header X-Forwarded-Protocol http if http
    http-request set-header X-Forwarded-Protocol https if https
    default_backend TL_web_servers

파일을 저장하고 닫습니다.

22. 그런 다음 HAProxy 서비스를 다시 시작하여 새로운 변경 사항을 적용합니다.

systemctl restart haproxy.service

23. 다음으로, 웹 브라우저를 열고 해당 사이트에 다시 한 번 접속해 보세요. 자체 서명된 인증서로 인해 브라우저에 오류가 표시됩니다. 계속하려면 고급을 클릭하세요.

지금은 여기까지입니다! 모든 웹 애플리케이션에는 고유한 요구 사항이 있으므로 IT 인프라 및 애플리케이션의 요구 사항에 맞게 로드 밸런싱을 설계하고 구성해야 합니다.

이 가이드에 사용된 일부 구성 옵션과 일반적인 HAProxy 사용 방법에 대한 자세한 정보를 얻으려면 공식 HAProxy 커뮤니티 에디션 문서 또는 HAProxy 엔터프라이즈 버전 문서를 참조하세요. 아래 피드백 양식을 통해 질문이나 생각을 게시할 수 있습니다.