IBM Cloud Docs
s3fs 를 사용하여 버킷 마운트

s3fs 를 사용하여 버킷 마운트

NFS 스타일 파일 시스템에 읽고 쓸 애플리케이션은 s3fs를 사용하며, 이는 파일에 대한 기본 오브젝트 형식을 유지하면서 버킷을 디렉토리로서 마운트할 수 있습니다.

이렇게 되면 로컬 파일에서 읽기 및 쓰기에 의존하는 레거시 애플리케이션에 대한 액세스를 제공할 뿐만 아니라 익숙한 쉘 명령(예: 나열하는 경우 ls 또는 파일을 복사하는 경우 cp)을 사용하여 클라우드 스토리지와 상호작용할 수 있습니다. 자세한 개요는 프로젝트의 공식 README를 방문하십시오.

IBM Cloud Kubernetes Service 클러스터에서 IBM Cloud® Object Storage 을 사용하는 방법에 대한 지시사항을 찾으십니까? 대신 IBM Cloud Kubernetes Service 문서 로 이동하십시오.

전제조건

설치

Debian 또는 Ubuntu의 경우:

sudo apt-get install automake autotools-dev fuse g++ git libcurl4-openssl-dev libfuse-dev libssl-dev libxml2-dev make pkg-config

RHEL및 CentOS 7이상에서 EPEL을 사용하는 경우:

sudo yum install epel-release
sudo yum install s3fs-fuse

IBM의 개인용 저장소에서 사용할 수 없으므로 이 EPEL 저장소를 가져오려면 디바이스에 공용 연결이 있어야 합니다. 자세한 정보는 RHEL및 CentOS Stream에 EPEL을 설치하는 방법 을 참조하십시오.

공식 s3fs 문서에서는 libcurl4-gnutls-dev 대신 libcurl4-openssl-dev 사용을 제안합니다. 어느 쪽이든 작동되지만 OpenSSL 버전에서 성능이 향상될 수 있습니다.

macOS의 경우 소스에서 s3fs 를 빌드해야 합니다.

다음 패키지가 설치되어 있는지 확인하십시오 (모두 Homebrew 를 통해 사용 가능).

  • macfuse
  • automake
  • gcc
  • curl
  • libxml2
  • pkg-config
  • openssl

openssl 설치의 출력에 언급된 대로 다음 환경 변수를 설정해야 합니다.

export LDFLAGS="-L/usr/local/opt/openssl@3/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@3/include"
export PKG_CONFIG_PATH="/usr/local/opt/openssl@3/lib/pkgconfig"

macFUSE 는 커널 확장을 포함하는 닫힌 소스 소프트웨어 이며 상업용 라이센스가 필요할 수 있습니다.

먼저 Github 저장소를 복제하십시오.

git clone https://github.com/s3fs-fuse/s3fs-fuse.git 

그런 다음 s3fs를 빌드하십시오.

cd s3fs-fuse
./autogen.sh
./configure
make

바이너리를 설치하십시오.

sudo make install

구성

<access_key>:<secret_key> 또는 :<api_key> 가 포함된 파일에 신임 정보를 저장하십시오. 이 파일은 제한된 액세스를 가져야 하므로 다음을 실행하십시오.

chmod 0600 <credentials_file>

이제 다음을 사용하여 버킷을 마운트할 수 있습니다.

s3fs <bucket> <mountpoint> -o url=http{s}://<endpoint> -o passwd_file=<credentials_file>

인증 정보 파일에 API 키만 있는 경우(HMAC 인증 정보가 없음) ibm_iam_auth 플래그도 추가해야 합니다.

s3fs <bucket> <mountpoint> -o url=http{s}://<endpoint> -o passwd_file=<credentials_file> -o ibm_iam_auth

예제의 <bucket> 는 기존 버킷을 참조하며 <mountpoint> 는 버킷을 마운트하려는 로컬 경로입니다. <endpoint>버킷의 위치 에 해당해야 합니다. credentials_file은 API 키 또는 HMAC 인증 정보를 사용하여 작성된 파일입니다.

이제 ls <mountpoint> 는 로컬 파일인 것처럼 해당 버킷의 오브젝트를 나열합니다 (또는 오브젝트 접두부의 경우에는 중첩된 디렉토리인 것처럼).

성능 최적화

성능이 실제 로컬 파일 시스템과 같지 않지만 몇 가지 고급 옵션을 사용하여 처리량을 늘릴 수 있습니다.

s3fs <bucket_name> <mountpoint> -o url=http{s}://<COS_endpoint> –o passwd_file=<credentials_file> \
-o cipher_suites=AESGCM \
-o kernel_cache \
-o max_background=1000 \
-o max_stat_cache_size=100000 \
-o multipart_size=52 \
-o parallel_count=30 \
-o multireq_max=30 \
-o dbglevel=warn
  1. cipher_suites=AESGCM은 HTTPS 엔드포인트를 사용할 때만 관련됩니다. 기본적으로 IBM COS에 대한 보안 연결은 AES256-SHA 암호 스위트를 사용합니다. 대신 AESGCM 스위트를 사용하면 동일한 레벨의 암호화 보안을 제공하면서 TLS 암호화 기능으로 인해 발생하는 클라이언트 시스템의 CPU 로드를 크게 줄일 수 있습니다.
  2. kernel_caches3fs mountpoint 마운트 포인트에서 커널 버퍼 캐시를 사용합니다. 즉, 동일한 파일에 대한 각 읽기가 커널의 버퍼 캐시에서 제공될 수 있으므로 s3fs에서 오브젝트를 한 번만 읽습니다. 커널 버퍼 캐시는 다른 프로세스에서 사용하지 않는 사용 가능한 메모리만 사용합니다. 이 옵션은 버킷이 마운트될 때 다른 프로세스/시스템에서 버킷 오브젝트를 겹쳐쓰게 하려고 하고 유스 케이스에 최신 컨텐츠에 대한 라이브 액세스가 필요한 경우에 권장되지 않습니다.
  3. max_background=1000s3fs 동시 파일 읽기 성능을 개선합니다. 기본적으로 FUSE는 최대 128KB의 파일 읽기 요청을 지원합니다. 더 많이 읽어야 하는 경우 커널이 대형 요청을 작은 하위 요청으로 분할하여 s3fs 프로세스가 비동기식으로 이를 처리할 수 있도록 합니다. max_background 옵션은 이와 같은 동시 비동기 요청의 글로벌 최대 수를 설정합니다. 기본적으로 12로 설정되지만 임의의 높은 값 (1000) 으로 설정하면 동시에 많은 파일을 읽는 경우에도 읽기 요청이 차단되지 않습니다.
  4. max_stat_cache_size=100000HEAD에서 전송된 중복 HTTP s3fs 요청의 수를 줄이고 디렉토리를 나열하거나 파일 속성을 검색하는 데 걸리는 시간을 줄입니다. 일반적인 파일 시스템 사용에서는 오브젝트 스토리지 시스템의 stat() 요청에 맵핑된 HEAD 호출을 통해 파일의 메타데이터에 빈번하게 액세스할 수 있습니다. 기본적으로 s3fs는 최대 1000개의 오브젝트의 속성(메타데이터)을 캐시합니다. 각 캐시된 항목은 최대 0.5KB의 메모리를 사용합니다. 이상적으로는 캐시가 버킷의 모든 오브젝트에 대한 메타데이터를 보유할 수 있기를 원합니다. 하지만 이 캐싱의 메모리 사용 결과를 고려해야 합니다. 100000으로 설정하면 0.5KB * 100000 = 50MB가 사용됩니다.
  5. multipart_size=52 는 COS 서버에서 보내고 받은 요청 및 응답의 최대 크기 (MB) 를 설정합니다. s3fs 는 기본적으로 이 값을 10MB로 설정합니다. 이 값을 늘리면 HTTP 연결당 처리량(MB/s)도 늘어납니다. 반면에 파일에서 제공되는 첫 번째 바이트의 대기 시간도 증가합니다. 따라서 유스 케이스가 각 파일에서 적은 양의 데이터만 읽는 경우 이 값을 늘리지 않을 수 있습니다. 또한 대형 오브젝트의 경우(예를 들어, 50MB를 넘는) 이 값이 다중 요청을 사용하여 동시에 파일을 페치할 수 있을 만큼 작은 경우 처리량이 늘어납니다. 이 옵션의 최적 값은 약 50MB입니다. COS 우수 사례는 4MB의 배수인 요청 사용을 제안하므로 이 옵션을 52MB로 설정하는 것이 좋습니다.
  6. parallel_count=30은 동시에 COS로 전송된 단일 파일 읽기/쓰기 오퍼레이션당 최대 요청 수를 설정합니다. 기본적으로 이 값은 5로 설정됩니다. 매우 큰 오브젝트의 경우 이 값을 늘려 더 많은 처리량을 얻을 수 있습니다. 이전 옵션과 마찬가지로 각 파일에서 적은 양의 데이터만 읽는 경우 이 값을 작게 유지하십시오.
  7. multireq_max=30 디렉토리를 나열할 때 오브젝트 메타데이터 요청(HEAD)은 목록의 각 오브젝트에 대해 전송됩니다(메타데이터가 캐시에 있는 경우 제외). 이 옵션은 단일 디렉토리 나열 오퍼레이션에 대해 COS로 전송된 이와 같은 동시 요청 수를 제한합니다. 기본적으로 이는 20으로 설정됩니다. 이 값은 위의 parallel_count 옵션 이상이어야 합니다.
  8. dbglevel=warn은 /var/log/syslog에 메시지를 로그하기 위해 디버그 레벨을 기본값(warn) 대신 crit으로 설정합니다.

제한사항

오브젝트 스토리지 서비스에서 TTFB(Time to The First Byte)에 대한 대기 시간이 길고 랜덤 쓰기 액세스가 부족하므로 s3fs가 모든 애플리케이션에는 적합하지 않을 수 있습니다. 딥러닝 워크로드와 같이 대형 파일만 읽는 워크로드는 s3fs를 사용하여 양호한 처리량을 유지할 수 있습니다.