MINIO란 ?
오브젝트 스토리지는 전통적인 파일 시스템처럼 마운트하여 사용하는 개념이 아니고, API 또는 시스템 명령어를 통해 파일 (객체) 을 송수신하는 개념입니다.
오브젝트 스토리지의 주요 특징과 사용 방법은 다음과 같습니다.
– 데이터 구조 : 오브젝트 스토리지는 데이터를 객체(object) 단위로 저장하며, 각 객체는 고유의 ID와 메타데이터를 가집니다.
– 확장성 : 수평적 확장이 용이하여 대규모 데이터를 효율적으로 관리할 수 있습니다.
– API 기반 접근 : HTTP 기반의 RESTful API를 통해 데이터를 송수신합니다.
– 메타데이터 : 각 객체에 대한 상세한 메타데이터를 저장하여 데이터 관리를 용이하게 합니다.
일반적으로 Object storage 서비스를 제공하기 위해 사용하는 OpenStack Swift 대신 더 간단하게 Object Storage 서비스를 제공할 수 있는 패키지로 MinIO 를 고려해 볼 수 있습니다. MinIO 는 설치와 설정이 매우 간단하고, S3 호환 API 를 제공하는 고성능 객체 스토리지 서버입니다. 우분투에서 MinIO 를 설치하고 설정하는 방법은 다음과 같습니다.
https://min.io/
1. 설치
# apt -y update
# apt -y upgrade
# wget https://dl.min.io/server/minio/release/linux-amd64/minio
# chmod +x minio
# mv minio /usr/local/bin/
MinIO 를 실행하려면 데이터를 저장할 디렉토리를 지정해야 합니다. 예를 들어 /data 디렉토리에 데이터를 저장하도록 설정할 수 있습니다.
# mkdir /data
# minio server /data
이 명령을 실행하면 MinIO 서버가 시작되고, 웹 브라우저에서 http://<서버 IP>:9000 으로 접속할 수 있습니다.
기본적으로 MinIO 는 웹 UI 를 통해 관리할 수 있는데, 로그인 계정은 다음과 같습니다.
– RootUser: minioadmin
– RootPass: minioadmin
2. 계정 패스워드 변경
데몬 실행 전에 패스워드를 미리 지정하고 실행하면 됩니다.
# export MINIO_ROOT_USER= test
# export MINIO_ROOT_PASSWORD= test1234
# minio server /data
3. 사용 도구
1) MinIO 웹 인터페이스 사용
웹 브라우저에서 http://<서버 IP>:9000 에 접속하여 MinIO 웹 인터페이스에 로그인하면 전반적인 관리가 가능합니다.
2) 클라이언트 도구 설치
MinIO 클라이언트 (mc) 는 MinIO 서버를 관리하고 파일을 업로드/다운로드하는 데 사용됩니다.
# wget https://dl.min.io/client/mc/release/linux-amd64/mc
# chmod +x mc
# mv mc /usr/local/bin/
4. Client 에서 테스트
1) MinIO 클라이언트 설정
MinIO 클라이언트에서 MinIO 서버를 설정합니다.
# mc alias set test http://<서버 IP>:9000 test test1234
mc: Configuration written to `/root/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/root/.mc/share`.
mc: Initialized share uploads `/root/.mc/share/uploads.json` file.
mc: Initialized share downloads `/root/.mc/share/downloads.json` file.
Added `test` successfully.
2) 버킷 생성
파일을 업로드할 버킷을 생성합니다.
여기서 mybucket 은 새로 생성할 버킷의 이름입니다.
# mc mb test/mybucket
3) 파일 업로드
로컬 파일을 MinIO 서버에 업로드합니다.
# mc cp test.txt test/mybucket
aaa 디렉토리를 통째로 업로드 할때는 –recursive 옵션을 사용합니다.
# mc cp –recursive aaa test/mybucket/
4) 파일 다운로드
# mc cp test/mybucket/test.txt .
5) 파일 목록 확인
버킷에 있는 파일 목록을 확인합니다.
# mc ls test/mybucket
5. 공유 설정
위와 같이 업로드한 test.html 파일은 접근을 해보면 AccessDenied 메세지가 출력되는 것을 알 수 있습니다.
http://<서버 IP>:9000/mybucket/test.txt
이는 기본값이 private 으로 되어 있기 때문인데, bucket 에 해당되는 모든 파일을 public 처리하거나 특정 파일 하나에 대해서만 public 처리할 수 있습니다.
1) bucket 전체 public / private 처리
버킷 전체 공개
# mc anonymous set public test/mybucket
버킷 전체 비공개
# mc anonymous set private test/mybucket
2) 단일 파일 public / private 처리
하나의 파일 공개
# mc anonymous set public test/mybucket/test.txt
하나의 파일 비공개
# mc anonymous set private test/mybucket/test.txt
3) 특정 디렉토리 (aaa) 내 파일들 public / private 처리
for file in $(mc ls –recursive test/mybucket/aaa/ | awk ‘{print $5}’); do
mc anonymous set public test/mybucket/aaa/$file
done
private 처리할 경우 public 위치에 private 문자로 치환하여 사용하면 됩니다.
브라우저에서 접근하여 확인하고자 할 경우 MinIO 서버이름 (test) 은 제외하고 아래와 같이 접근하면 됩니다.
http://<서버 IP>:9000/mybucket/aaa/test.txt
Debian 12.x 에서 MinIO (Object storage service) 를 파일시스템처럼 마운트하기
원래 Object storage 는 파일시스템에 마운트 하는 형식이 아닌, API 또는 시스템 명령어를 통해 파일 (객체) 을 송수신하는 개념입니다.
그러나 S3FS-Fuse 를 설치하면 NFS 나 SMB 마운트한 것처럼 파일시스템에 마운트하여 파일 저장 및 읽기가 가능해집니다.
본 테스트는 Debian 12.x 환경에서 진행하였으나 Ubuntu 에서도 동일한 명령 사용이 가능합니다.
1. 설치
필수 구성 패키지를 먼저 설치합니다.
# apt -y update
# apt -y install automake autotools-dev fuse g++ git libcurl4-gnutls-dev libfuse-dev libssl-dev libxml2-dev make pkg-config
github 에서 소스파일을 다운로드 받아 설치합니다.
# git clone https://github.com/s3fs-fuse/s3fs-fuse.git
# cd s3fs-fuse
# ./autogen.sh
# ./configure
# make
# make install
2. 설정 및 마운트
사용하는 계정정보를 입력합니다.
# echo “ACCESS_KEY_ID:SECRET_ACCESS_KEY” > ~/.passwd-s3fs
# chmod 600 ~/.passwd-s3fs
마운트할 디렉토리를 생성하고 버킷 이름과 Object 스토리지 서버 IP, PORT 번호로 마운트 합니다.
# mkdir /data
# s3fs <bucket-name> /data -o allow_other -o use_path_request_style -o url=http://<Object 스토리지 서버 IP:PORT> -o passwd_file=~/.passwd-s3fs -o nonempty
마운트 된 파일시스템을 확인합니다.
# df -h
Filesystem Size Used Avail Use% Mounted on
udev 7.7G 0 7.7G 0% /dev
tmpfs 1.6G 1.1M 1.6G 1% /run
/dev/mapper/pve-root 67G 9.9G 54G 16% /
tmpfs 7.8G 63M 7.7G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1.6G 0 1.6G 0% /run/user/0
/dev/fuse 128M 32K 128M 1% /etc/pve
s3fs 64P 0 64P 0% /data
단위가 이상하게 표시 되어도 마운트 및 파일 입출력은 잘 됩니다.
# echo test > /data/lasttest.txt
# cat /data/lasttest.txt
test