블로그 | NGINX

NGINX Plus 및 Minio를 사용한 엔터프라이즈급 클라우드 스토리지

NGINX-F5-수평-검정-유형-RGB의 일부
니티시 타와리 썸네일
니티시 타와리
2017년 1월 19일 게시

이는 클라우드 애플리케이션과 앱 개발 및 제공에 대한 DevOps 접근 방식에 특화된 분산 객체 스토리지 서버인 Minio 의 소프트웨어 개발자인 니티시 티와리가 쓴 게스트 블로그 게시물입니다. 니티시의 관심사에는 소프트웨어 기반 인프라, 특히 스토리지와 분산 시스템이 포함됩니다.

이 게시물에서 니티시는 NGINX와 NGINX Plus를 Minio 서버의 역방향 프록시로드 밸런서 로 사용하는 방법을 설명합니다. 이 게시물은 NGINX와 NGINX Plus에 모두 동일하게 적용됩니다. 간단히 말해서 NGINX Plus에만 적용됩니다.

객체 스토리지 설계

거의 모든 애플리케이션에는 저장소가 필요하지만, 다양한 앱은 특정 방식으로 저장소를 필요로 하고 사용합니다. 예를 들어 문서 저장소를 생각해 보겠습니다. 규모가 작을 때는 빈번한 읽기 요청을 처리할 필요가 없지만, 시간이 지남에 따라 확장해야 할 수도 있습니다. 이미지 갤러리와 같은 또 다른 애플리케이션은 요청을 신속하게 충족시키는 동시에 시간에 따라 확장될 수 있어야 합니다.

이런 미묘한 차이 때문에 보관 설정이 어렵습니다. 하지만 모든 것이 어두운 것은 아닙니다. 구조화되지 않은 데이터를 저장하는 기본 방식으로 객체 스토리지가 등장하면서 HTTP가 기본 통신 모드가 되었고, 애플리케이션이 스토리지와 통신하는 방식을 표준화했습니다.

그래도 여전히 의문은 남는다. 애플리케이션 요구 사항에 맞게 조정되면서도 유연한 개체 스토리지 설정을 구축하려면 어떻게 해야 할까요?

개체 스토리지에는 HTTP 서버와 클라이언트가 포함되므로 HTTP 트래픽을 처리하기 위해 NGINX Plus와 같은 다재다능한 웹 서버를 앞에 두는 것이 합리적입니다. Minio와 같은 가벼운 개체 스토리지 서버를 사용하면 백엔드에서 확장 가능한 스토리지를 제공할 수 있습니다. 이러한 시스템의 유연성은 엔터프라이즈급 서비스를 만드는 데 중요합니다.

NGINX Plus는 Minio 클라우드 기반 개체 스토리지 서버의 분산 인스턴스를 위한 효과적인 로드 밸런서입니다.
NGINX Plus는 SSL/TLS 클라이언트 연결을 종료하고 Minio 클라우드 스토리지 서버의 부하를 분산합니다.

NGINX Plus를 사용하면 관리자는 유입 트래픽의 부하를 분산할 수 있을 뿐만 아니라 SSL/TLS를 캐싱, 제한, 종료하고, 다양한 매개변수에 따라 트래픽을 필터링할 수도 있습니다. 반면, Minio는 Amazon S3 와 호환되는 가벼운 객체 스토리지 서버를 제공합니다.

MinIO는 AI 스토리지를 위해 구축되었으며 사진, 비디오, 로그 파일, 백업, VM 및 컨테이너 이미지와 같은 비정형 데이터를 저장하는 데 가장 적합합니다. Minio 서버는 Node.js, Redis, MySQL과 비슷하게 애플리케이션 스택과 함께 번들로 제공될 만큼 가볍습니다. Minio는 분산 모드 도 지원하여 여러 드라이브(여러 머신에 있음)를 단일 개체 스토리지 서버로 풀링할 수 있습니다.

이 게시물에서는 다양한 사용 사례에서 NGINX Plus의 일부 기능을 살펴보고 이를 Minio와 결합하여 프로덕션 등급의 높은 확장성, 높은 가용성 및 안정적인 개체 스토리지 시스템을 설정하는 방법을 알아봅니다.

역방향 프록시 및 부하 분산 장치로서의 NGINX Plus

NGINX Plus는 역방향 프록시 서버로 잘 알려져 있습니다. 하지만 Minio에 역방향 프록시가 필요한 이유는 무엇일까요? 몇 가지 사용 사례를 살펴보겠습니다.

  • 하나 이상의 Minio 서버 앞에 NGINX Plus 역방향 프록시를 사용하면 클라이언트나 애플리케이션을 업데이트하지 않고도 시간이 지남에 따라 Minio 서버 인스턴스를 다른 머신/위치로 옮길 수 있는 자유가 생깁니다.
  • NGINX Plus는 유입 트래픽의 부하를 분산하고 이를 분산된 Minio 서버 인스턴스에 균등하게 분산할 수 있습니다.
  • NGINX Plus 프록시는 Minio 클라이언트( mc ) 미러 명령을 사용하여 Minio를 통한 고가용성 개체 스토리지 설정의 일부가 될 수 있습니다.

NGINX Plus는 proxy_pass 지시문에서 지정한 URL을 수신하는 백엔드 서버로 요청을 전달하여 클라이언트 트래픽의 역방향 프록시를 실행합니다. 다음 구성 스니펫에서는 독립형 Minio 인스턴스가 localhost 에서 실행되므로 http://localhost:9000 에서 사용할 수 있습니다. www.example.com 의 최상위 디렉토리( / )에 대한 포트 80에서 들어오는 모든 요청은 Minio로 전달됩니다. NGINX Plus는 Host 헤더를 원래 요청의 값으로 명시적으로 설정합니다.

서버 { listen 80;
server_name www.example.com;

location / {
proxy_set_header 호스트 $http_host;
proxy_pass http://localhost:9000;
}
}

여러 Minio 서버가 있는 경우 업스트림 구성 블록에 서버를 나열하고 proxy_pass 지시문에서 업스트림 그룹을 참조하여 서버 간 트래픽 부하를 분산합니다.

업스트림 minio_servers { 서버 minio-server-1 :9000; 서버 minio-server-2 :9000; } 서버 { 수신 80; 서버 이름 www.example.com; 위치 / { proxy_set_header 호스트 $http_host; proxy_pass http:// minio_servers ; } }

Minio의 프록시로 NGINX 또는 NGINX Plus를 설정하는 방법에 대한 자세한 내용은 Minio 설명서를 참조하세요.

SSL/TLS 종료

HTTPS가 현재 대부분의 웹 트래픽에서 기본 프로토콜이 되고 있으므로 Minio에 단순한 HTTP 서버가 아닌 HTTPS 서버를 배포하는 것이 합리적입니다. NGINX Plus를 HTTPS 서버로 설정하는 것은 매우 쉽습니다. 시작하려면 SSL/TLS 인증서가 필요합니다. Let's Encrypt는 무료 SSL/TLS 인증서를 제공하고 NGINX Plus와 통합됩니다 .

다음 단계는 NGINX Plus 구성 파일을 편집하는 것입니다. 여기서는 서버 블록의 listen 지시문에 ssl 매개변수를 지정해야 하며, 그런 다음 서버 인증서와 개인 키가 포함된 파일을 지정해야 합니다.

서버 { 수신 80; 서버 이름 www.example.com; 반환 301 https://www.example.com$request_uri; } 서버 { 수신 443 ssl ; 서버 이름 www.example.com; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key ; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; 위치 / { proxy_set_header 호스트 $http_host; proxy_pass http://localhost:9000; } }

SSL/TLS 종료에 대한 자세한 내용은 NGINX Plus 관리자 가이드를 참조하세요.

캐싱

개체 스토리지 서버는 속도가 빠른 것으로 유명하지 않지만, 그렇다고 해서 클라이언트에 대한 응답이 느리다는 것은 아닙니다. NGINX Plus 서버에서 캐싱을 활성화하면 자주 액세스하는 데이터가 저장되어 백엔드 서버로 요청을 전달하지 않고도 클라이언트에 즉시 반환할 수 있습니다.

작동 원리는 다음과 같습니다. NGINX Plus 웹 캐시는 클라이언트와 Minio 사이에 위치하여 요청된 각 콘텐츠 파일의 사본을 저장합니다. 클라이언트가 캐시에 저장된 콘텐츠를 요청하면 NGINX Plus는 Minio에 연결하지 않고 직접 해당 콘텐츠를 반환합니다. 이를 통해 클라이언트의 응답 시간이 향상되고 Minio 서버의 부하도 줄어듭니다.

proxy_cache_pathproxy_cache 지시문을 사용하여 Minio에 대한 NGINX Plus 캐시를 설정합니다. proxy_cache_path 지시어는 캐시의 위치와 구성을 설정하고, proxy_cache 지시어는 이를 활성화합니다. 자세한 내용은 NGINX 및 NGINX Plus를 사용한 캐싱 가이드를 참조하세요.

proxy_cache_path /캐시 경로 레벨=1:2 키_존=my_cache:10m 최대_크기=10g 비활성=60m use_temp_path=off ; 서버 { # ... 위치 / { proxy_cache my_cache ; proxy_set_header 호스트 $http_host; proxy_pass http://localhost:9000; } }

조절

때로는 비즈니스 또는 보안상의 이유로 요청을 제한해야 할 수도 있습니다. NGINX Plus를 사용하면 사용 가능한 대역폭, 요청 수 또는 연결 수를 제한할 수 있습니다.

대역폭을 제한하려면 limit_rate 지시어를 사용합니다. 이 예제에서는 다운로드 속도를 초당 200KB로 제한합니다.

서버 { # ... 위치 /이미지/ { limit_rate 200k ; # ... } }

요청 제한의 경우 이 예에서처럼 limit_reqlimit_req_zone 지침을 사용하면 각 고유 IP 주소를 초당 10개의 요청으로 제한하는 동시에 최대 20개의 요청 버스트를 허용합니다.

limit_req_zone $binary_remote_addr zone=my_req_limit:10m rate=10r/s ; 서버 { # ... 위치 /images/ { limit_req zone=my_req_limit burst=20 ; # ... } }

연결 수를 제한하려면 limit_connlimit_conn_zone 지침을 사용합니다. 이 예에서는 각 고유 IP 주소의 동시 연결을 5개로 제한합니다.

limit_conn_zone $binary_remote_addr zone=my_conn_limit:10m ; 서버 { # ... 위치 /images/ { limit_conn my_conn_limit 5 ; # ... } }

자세한 내용은 NGINX Plus 관리자 가이드를 참조하세요.

요약

이 게시물에서는 NGINX Plus의 여러 기능을 사용하여 부하 분산을 수행하는 방법을 설명했습니다. 특히 Minio 개체 스토리지 서버 앞에서 부하 분산을 수행하는 방법을 설명했습니다. NGINX Plus와 Minio를 결합하면 애플리케이션 요구 사항에 맞춰 유연한 개체 스토리지 서버를 설정할 수 있습니다.

NGINX Plus를 사용한 부하 분산에 대한 자세한 내용은 다음 블로그 게시물 및 기타 리소스를 참조하세요.

 

NGINX Plus를 직접 사용해보려면 오늘 무료 30일 체험판을 시작하거나 저희에게 연락해 사용 사례에 대해 논의해 보세요 .


"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."