Ubuntu 14.04에서 WordPress 및 Nginx용 레이어 7 로드 밸런서로 HAProxy를 사용하는 방법


소개

이 튜토리얼에서는 HAProxy를 레이어 7 로드 밸런서로 사용하여 단일 도메인 이름 또는 IP 주소에서 여러 애플리케이션을 제공하는 방법을 알려드립니다. 로드 밸런싱은 환경의 성능, 가용성 및 복원력을 향상시킬 수 있습니다.

http 요청을 분석하여 트래픽을 수신해야 하는 애플리케이션을 결정할 수 있기 때문에 여러 애플리케이션에 서비스를 제공하는 단일 도메인 이름을 원하는 경우 레이어 7 리버스 프록시 및 로드 밸런싱이 사이트에 적합합니다.

이 튜토리얼은 WordPress와 정적 웹 사이트를 예로 들어 작성되었지만 일반적인 개념은 다른 응용 프로그램에서도 유사한 효과를 내기 위해 사용될 수 있습니다.

전제 조건

이 자습서를 계속하기 전에 별도의 서버에서 실행 중인 응용 프로그램이 두 개 이상 있어야 합니다. Nginx 및 WordPress에서 호스팅되는 정적 웹 사이트를 두 가지 애플리케이션으로 사용합니다. 이 자습서를 정확히 따르려면 전제 조건 환경을 설정하는 데 사용한 자습서는 다음과 같습니다.

  • wordpress-1 VPS: MySQL로 사이트 성능을 최적화하기 위해 원격 데이터베이스를 설정하는 방법
  • web-1 VPS: Ubuntu 14.04에 Nginx를 설치하는 방법

시작 환경은 다음과 같습니다.

현재 환경 외에도 다음 VPS를 만들 예정입니다.

  • haproxy-www: 로드 밸런싱 및 리버스 프록싱을 위한 HAProxy 서버
  • wordpress-2: 두 번째 WordPress 웹 응용 프로그램 서버(환경의 WordPress 구성 요소를 로드 밸런싱하려는 경우에만 필요)
  • web-2: 두 번째 Nginx 웹 서버(환경의 Nginx 구성 요소를 로드 밸런싱하려는 경우에만 필요)

레이어 7 로드 밸런싱, 백엔드 또는 ACL과 같은 기본 로드 밸런싱 개념이나 용어에 익숙하지 않은 경우 여기에서 설명하는 문서를 참조하십시오. 기본 사항: HAProxy 및 부하 분산 개념 소개.

우리의 목표

이 튜토리얼을 마치면 다음과 같은 환경을 갖기를 원합니다.

즉, 사용자는 http://example.com/wordpress를 통해 두 애플리케이션에 액세스하고 WordPress 서버로 전달되며 다른 모든 요청은 기본 Nginx 서버로 전달됩니다. . 애플리케이션을 단일 도메인에 표시하기 위해 반드시 로드 밸런싱을 할 필요는 없지만 이 자습서에서는 로드 밸런싱을 다룰 것입니다.

참고: HAProxy를 설정하는 대신 2단계에서 로드 밸런서를 설정하는 방법을 안내합니다.

HAProxy 설치

개인 네트워킹으로 새 VPS를 만듭니다. 이 자습서에서는 haproxy-www라고 합니다.

haproxy-www VPS에서 apt-get을 사용하여 HAProxy를 설치해 보겠습니다.

sudo apt-get update
sudo apt-get install haproxy

HAProxy 초기화 스크립트를 활성화해야 HAProxy가 VPS와 함께 시작 및 중지됩니다.

sudo vi /etc/default/haproxy

ENABLED 값을 1로 변경하여 HAProxy 초기화 스크립트를 활성화합니다.

ENABLED=1

저장하고 종료합니다. 이제 HAProxy가 VPS와 함께 시작 및 중지됩니다. 또한 이제 service 명령을 사용하여 HAProxy를 제어할 수 있습니다. 실행 중인지 확인해 보겠습니다.

user@haproxy-www:/etc/init.d$ sudo service haproxy status
haproxy not running.

실행되고 있지 않습니다. 사용하기 전에 구성해야 하므로 괜찮습니다. 다음으로 환경에 맞게 HAProxy를 구성해 보겠습니다.

HAProxy 구성

HAProxy의 구성 파일은 두 가지 주요 섹션으로 나뉩니다.

  • 글로벌: 프로세스 전체 매개변수 설정
  • 프록시: defaults, listen, frontendbackend 매개변수로 구성

다시 말하지만, HAProxy 또는 기본 로드 밸런싱 개념 및 용어에 익숙하지 않은 경우 다음 링크를 참조하십시오. HAProxy 및 로드 밸런싱 개념 소개

HAProxy 구성: 글로벌

모든 HAProxy 구성은 HAProxy VPS인 haproxy-www에서 수행해야 합니다.

먼저 기본 haproxy.cfg 파일의 복사본을 만들어 보겠습니다.

cd /etc/haproxy; sudo cp haproxy.cfg haproxy.cfg.orig

이제 텍스트 편집기에서 haproxy.cfg를 엽니다.

sudo vi /etc/haproxy/haproxy.cfg

globaldefaults의 두 섹션이 이미 정의되어 있음을 알 수 있습니다. 먼저 몇 가지 기본 매개변수를 살펴보겠습니다.

defaults에서 다음 줄을 찾습니다.

mode    http
option  httplog

http를 모드로 선택하면 레이어 7 또는 애플리케이션 레이어 로드 밸런싱을 수행하도록 HAProxy가 구성됩니다. 이는 로드 밸런서가 http 요청의 내용을 확인하고 프런트엔드에 정의된 규칙에 따라 적절한 서버로 전달함을 의미합니다. 이 개념에 익숙하지 않은 경우 HAProxy 소개의 로드 밸런싱 유형 섹션을 읽어보십시오.

아직 구성 파일을 닫지 마십시오! 다음에 프록시 구성을 추가합니다.

HAProxy 구성: 프록시

프런트엔드 구성

가장 먼저 추가하고 싶은 것은 프런트엔드입니다. 기본 레이어 7 리버스 프록싱 및 로드 밸런싱 설정의 경우 트래픽을 적절한 백엔드 서버로 보내는 데 사용할 ACL을 정의해야 합니다. HAProxy에서 사용할 수 있는 많은 ACL이 있으며 이 자습서(path_beg)에서는 그 중 하나만 다룰 것입니다. HAProxy의 전체 ACL 목록은 공식 문서인 HAProxy ACL을 확인하십시오.

파일 끝에 www 프런트엔드를 추가해 보겠습니다. haproxy_www_public_IP를 haproxy-www VPS의 공용 IP로 바꾸십시오.

<예비>

다음은 위의 프런트엔드 구성 스니펫의 각 행이 의미하는 바에 대한 설명입니다.

  • 프론트엔드 www: 들어오는 www 트래픽을 처리하는 데 사용할 것이므로 "www\라는 프런트엔드를 지정합니다.
  • bind haproxy_www_public_IP:80: haproxy_www_public_IP를 haproxy-www의 공용 IP 주소로 바꿉니다. 이렇게 하면 이 프런트엔드가 이 IP 주소 및 포트에서 들어오는 네트워크 트래픽을 처리할 것이라고 HAProxy에 알립니다.
  • 옵션 http-server-close: 서버에서 HTTP 연결 닫기 모드를 활성화하고 클라이언트에서 HTTP 연결 유지 및 파이프라인을 지원하는 기능을 유지합니다. 이 옵션을 사용하면 HAProxy가 단일 연결로 여러 클라이언트 요청을 처리할 수 있어 종종 성능이 향상됩니다.
  • acl url_wordpress path_beg /wordpress: 요청 경로가 "/wordpress”로 시작하는 경우 true로 평가되는 url_wordpress라는 ACL을 지정합니다(예: http://example.com). /wordpress/hello-world
  • use_backend wordpress-backend if url_wordpress: url_wordpress ACL과 일치하는 트래픽을 곧 정의할 wordpress-backend로 안내
  • default_backend web-backend: 이것은 use_backend 규칙과 일치하지 않는 모든 트래픽이 다음 단계에서 정의할 web-backend로 전달되도록 지정합니다.

백엔드 구성

프런트엔드 구성을 마친 후 다음 줄을 추가하여 첫 번째 백엔드를 계속 추가합니다. 강조 표시된 단어를 적절한 값으로 바꾸십시오.

<예비>

다음은 위의 백엔드 구성 스니펫의 각 행이 의미하는 바에 대한 설명입니다.

  • backend web-backend: web-backend라는 백엔드 지정
  • server web-1 …: web-1이라는 백엔드 서버, 사설 IP(대체해야 함) 및 수신 포트 80을 지정합니다. 이 경우. check 옵션은 로드 밸런서가 이 서버에서 주기적으로 상태 점검을 수행하도록 합니다.

그런 다음 WordPress 애플리케이션의 백엔드를 추가합니다.

<예비>

다음은 위의 백엔드 구성 스니펫의 각 행이 의미하는 바에 대한 설명입니다.

  • backend wordpress-backend: wordpress-backend라는 백엔드 지정
  • reqrep …: 트래픽을 WordPress 서버로 전달할 때 /wordpress에 대한 요청을 /에 다시 씁니다. WordPress 응용 프로그램이 서버 루트에 설치되어 있지만 HAProxy 서버에서 /wordpress를 통해 액세스할 수 있도록 하려는 경우에는 필요하지 않습니다.
  • server wordpress-1 …: wordpress-1이라는 백엔드 서버, 사설 IP(대체해야 함) 및 수신 포트 80을 지정합니다. 이 경우. check 옵션은 로드 밸런서가 이 서버에서 주기적으로 상태 점검을 수행하도록 합니다.

HAProxy 구성: 통계

HAProxy가 들어오는 트래픽을 처리하는 방법을 결정하는 데 유용할 수 있는 HAProxy 통계를 활성화하려면 다음을 구성에 추가해야 합니다.

<예비>

다음은 위의 listen stats 구성 스니펫에서 중요하지 않은 행에 대한 설명입니다.

  • listen stats :1936: 포트 1936에서 액세스할 수 있도록 HAProxy의 통계 페이지를 구성합니다(예: http://haproxy_www_public_IP:1936 )
  • 통계 범위 …: 지정된 프런트엔드 또는 백엔드에서 통계 수집
  • stats uri /: 통계 페이지의 URI를 /
  • 로 지정합니다.\n
  • stats realm Haproxy\\ Statistics: stats auth 옵션과 함께 사용되는 통계 활성화 및 인증 영역(팝업 인증) 이름 설정
  • stats auth haproxy:password: 통계 페이지에 대한 인증 자격 증명을 지정합니다. 사용자 이름과 비밀번호를 자신의 것으로 변경하십시오

이제 저장하고 종료합니다. HAProxy를 시작하면 HAProxy 서비스를 시작하면 http://haproxy_www_public_ip:1936/을 통해 통계 페이지를 사용할 수 있습니다. 이제 HAProxy를 시작할 준비가 되었지만 먼저 로깅을 활성화하겠습니다.

HAProxy 로깅 활성화

HAProxy에서 로그인을 활성화하는 것은 매우 간단합니다. 먼저 rsyslog.conf 파일을 편집합니다.

sudo vi /etc/rsyslog.conf

그런 다음 다음 두 줄을 찾아 주석 처리를 제거하여 UDP syslog 수신을 활성화합니다. 완료되면 다음과 같이 표시됩니다.

$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1

이제 rsyslog를 다시 시작하여 새 구성을 활성화하십시오.

sudo service rsyslog restart

이제 HAProxy 로깅이 활성화되었습니다! 로그 파일은 HAProxy가 시작되면 /var/log/haproxy.log에 생성됩니다.

WordPress 구성 업데이트

이제 WordPress 애플리케이션의 URL이 변경되었으므로 WordPress에서 몇 가지 설정을 업데이트해야 합니다.

WordPress 서버에서 wp-config.php를 편집합니다. WordPress를 설치한 위치에 있습니다(튜토리얼에서는 /var/www/example.com에 설치했지만 설치는 다를 수 있음).

<예비>

상단 근처에서 define(DB_NAME, wordpress);라고 적힌 줄을 찾고 그 위에 다음 줄을 추가하여 강조 표시된 값을 대체합니다.

<예비>

저장하고 종료합니다. 이제 WordPress URL은 wp-admin 대시보드에 액세스하려고 할 때 작동하는 원래 WordPress 서버 대신 로드 밸런서를 가리키도록 구성됩니다.

HAProxy 시작

haproxy-www에서 HAProxy를 시작하여 구성 변경 사항을 적용합니다.

sudo service haproxy restart

리버스 프록시 완료

이제 동일한 도메인인 example.com과 레이어 7 리버스 프록시를 통해 애플리케이션에 액세스할 수 있지만 아직 로드 밸런싱되지 않았습니다. 환경은 다음 다이어그램과 같아야 합니다.

앞에서 정의한 프런트엔드에 따라 HAProxy가 트래픽을 전달하는 방법에 대한 설명은 다음과 같습니다.

  • **http://example.com/wordpress**: /wordpress로 시작하는 모든 요청은 wordpress-backend(귀하의 wordpress-1 서버)
  • **http://example.com/**: 다른 모든 요청은 web-backend(web-1 서버로 구성됨)로 전송됩니다.

원하는 모든 작업이 단일 도메인에서 여러 애플리케이션을 호스트하는 것이라면 완료되었습니다! 애플리케이션의 부하를 분산하려면 계속 읽어야 합니다.

로드 밸런싱을 추가하는 방법

부하 분산 웹-1

기본 웹 서버의 부하를 분산하려면 원본과 동일한 구성 및 콘텐츠를 가진 새 웹 서버를 생성하기만 하면 됩니다. 이 새 서버를 web-2라고 합니다.

새 VPS를 생성할 때 두 가지 옵션이 있습니다.

  1. web-1의 스냅샷에서 새 VPS를 생성할 수 있는 옵션이 있다면 web-2
  2. 를 생성하는 가장 간단한 방법입니다.\n
  3. 처음부터 새로 만듭니다. 동일한 소프트웨어를 모두 설치하고 동일하게 구성한 다음 rsync를 사용하여 web-1에서 web-2로 Nginx 서버 루트의 콘텐츠를 복사합니다(Rsync 자습서 참조).< /리>

참고: 앞서 언급한 두 가지 방법 모두 서버 루트 콘텐츠를 일회성으로 복사합니다. 서버 노드 web-1 또는 web-2 중 하나에서 파일을 업데이트하는 경우 파일을 다시 동기화해야 합니다.

동일한 웹 서버를 설정한 후 HAProxy 구성의 web-backend에 추가합니다.

haproxy-www에서 haproxy.cfg를 편집합니다.

sudo vi /etc/haproxy/haproxy.cfg

구성의 web-backend 섹션을 찾습니다.

<예비>

그런 다음 다음 줄에 web-2 서버를 추가합니다.

<예비>

저장하고 종료합니다. 이제 HAProxy를 다시 로드하여 변경 사항을 적용합니다.

sudo service haproxy reload

이제 웹 백엔드에는 WordPress 이외의 모든 트래픽을 처리하는 두 개의 서버가 있습니다! 부하가 분산되었습니다!"

로드 밸런싱 wordpress-1

WordPress와 같은 애플리케이션의 로드 밸런싱은 정적 웹 서버의 로드 밸런싱보다 약간 더 복잡합니다. 업로드된 파일 동기화 및 추가 데이터베이스 사용자와 같은 것에 대해 걱정해야 하기 때문입니다.

추가로 동일한 WordPress 서버를 만드는 데 필요한 모든 단계는 다른 로드 밸런싱 자습서인 WordPress용 레이어 4 로드 밸런서로 HAProxy를 사용하는 방법에 설명되어 있습니다. 해당 자습서에서 다음 세 단계를 완료하여 두 번째 WordPress 서버인 wordpress-2를 만듭니다.

  1. 두 번째 웹 응용 프로그램 서버 만들기
  2. 웹 애플리케이션 파일 동기화
  3. 새 데이터베이스 사용자 만들기

Not Yet Load Balanced라는 섹션에 도달하면 중지합니다.

wordpress-2를 만들고 데이터베이스를 올바르게 설정했으면 HAProxy 구성에서 wordpress-backend에 추가하기만 하면 됩니다.

haproxy-www에서 haproxy.cfg를 편집합니다.

sudo vi /etc/haproxy/haproxy.cfg

구성의 wordpress-backend 섹션을 찾습니다.

<예비>

그런 다음 다음 행에 wordpress-2 서버를 추가하십시오.

<예비>

저장하고 종료합니다. 이제 HAProxy를 다시 로드하여 변경 사항을 적용합니다.

sudo service haproxy reload

이제 wordpress-backend에는 모든 WordPress 트래픽을 처리하는 두 개의 서버가 있습니다! 로드 밸런싱입니다!

결론

이제 이 자습서를 완료했으므로 리버스 프록시 및 부하 분산 개념을 확장하여 환경에 더 많은 응용 프로그램과 서버를 추가하여 요구 사항에 더 잘 맞도록 만들 수 있습니다. 환경을 구성하는 방법에는 제한이 없으며 더 복잡한 요구 사항이 있는 경우 HAProxy 구성 설명서를 자세히 살펴봐야 할 수도 있습니다.

또한 WordPress 인스턴스의 성능을 개선할 다른 방법을 찾고 있다면 MySQL 복제를 살펴볼 수 있습니다. WordPress로 설정하는 방법을 설명하는 이 자습서를 확인하십시오.

  • Ubuntu 14.04에서 MySQL 복제로 WordPress 성능을 최적화하는 방법

작성: Mitchell Anicas