23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
TKS (TACO)에서는 Object store의 활용이 필요한 부분에서 S3를 주 저장소로 사용하고 있으며 폐쇄망 환경등에 대응하기 위해 S3를 호환하는 MinIO를 제공하고 있다.
“AWS S3 효율적으로 사용하기”라는 글에서 소개했던 것처럼 Object store의 경우에도 저장되는 개체에 대한 관리가 필요하며
MinIO는 구축형으로 제한된 저장소를 활용하고 있으므로 이에 대한 통제는 더욱 필수적이다.
사용자가 MinIO에 저장된 내역을 확인하며 처리하는 방법도 있지만 s3의 lifecycle configuration과 같이 이를 자동화하여 관리하는 기술이 있어 이 글을 통해 정리하고자 한다.
특히 쿠버네티스 클러스터(TACO)의 내부에서 표준 객체저장소로 MinIO를 사용하면서 데이터 저장의 확장을 위해 S3를 활용하는 구체적인 방법을 다룬다.
Minio는 AWS의 S3 SDK와 호환되는 오픈소스 Object Storage이고 사용에 있어서는 큰 제약사항이 없으나 이를 활용할 개발시에는 관련코드를 공개해야하는 AGPLv3 라이센스를 채택하고 있다.(Apache v2라이센스로 자유로운 사용이 가능하다. 이었으나 https://github.com/minio/minio/commit/069432566fcfac1f1053677cc925ddafd750730a 에서 GNU AGPLv3 로 변경 됨)
Go 언어로 개발되어 단일 파일만으로 배포가 되고 빠른성능을 제공한다.
앞에서 언급한 것처럼 하나의 바이너리로 실행됨으로 설치과정 필요없이 환경에 맞는 파일을 실행한다. (아래 예시는 리눅스에서 실행을 준비하는 내역)
# 다운로드
$ wget https://dl.min.io/server/minio/release/linux-amd64/minio
# 실행 가능하도록 권한을 부여
chmod +x minio 실행시에는 파라미터로 server (object storeage 실행)와 데이터를 넣을 디렉토리를 정의할 수 있다.
기본적으로 localhost(127.0.0.1)로 서버가 올라가기때문에 원격에서 접근하도록 하기위해서는 --address 옵션을 추가해야 한다.
siim@adm:~$ ./minio server --address 0.0.0.0:8888 /tmp
WARNING: Detected default credentials 'minioadmin:minioadmin', we recommend that you change these values with 'MINIO_ROOT_USER' and 'MINIO_ROOT_PASSWORD' environment variables
API: SYSTEM()
Time: 07:04:43 UTC 05/25/2023
DeploymentID: c3c60d2b-4cba-4501-9364-a785fbf136de
Error: Unable to initialize config, some features may be missing: open config/config.json: not a directory (*fmt.wrapError)
4: internal/logger/logger.go:258:logger.LogIf()
3: cmd/server-main.go:470:cmd.initConfigSubsystem()
2: cmd/server-main.go:435:cmd.initServer()
1: cmd/server-main.go:637:cmd.serverMain()
MinIO Object Storage Server
Copyright: 2015-2023 MinIO, Inc.
License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
Version: RELEASE.2023-05-18T00-05-36Z (go1.19.9 linux/amd64)
Status: 1 Online, 0 Offline.
S3-API: http://0.0.0.0:8888
RootUser: minioadmin
RootPass: minioadmin
Console: http://192.168.105.161:35257 http://192.168.5.61:35257 http://192.168.96.61:35257 http://172.17.0.1:35257 http://127.0.0.1:35257
RootUser: minioadmin
RootPass: minioadmin
Command-line: https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart
$ mc alias set myminio http://0.0.0.0:8888 minioadmin minioadmin
Documentation: https://min.io/docs/minio/linux/index.html
Warning: The standard parity is set to 0. This can lead to data loss.서버가 실행되었으니 브라우저를 통해 접근할 수 있다. (실행시 보여지는 계정 - minioadmin/minioadmin -을 사용하여 로그인)
MinIO는 간단하게 사용해보기부터 상용활용을 위한 형상까지 다양한 배포방법을 제공한다.
단일서버 단일저장소(Single-Node Single-Drive, SNSD)
Standalone이라고도 불리우며 개발이나 간단하게 사용해보기 위한 모드이다.
단일서버 다중저장소 (Single-Node Multi-Drive, SNMD)
가용성, 성능, 처리용량 등에 대한 요구사항이 적은 경우 사용할 수 있다.
순간적인 문제상황에서도 다수의 저장소가 적절히 설정되어 있다면 데이터 무결성을 제공할 수 있다.
다중서버 다중저장소 (Multi-Node Multi-Drive, MNMD)
다양한 요구사항에 맞는 구성을 통해 기업에서 사용할 만한 고가용성의 Object storage를 제공한다.
다수의 서버중 반이상이 기동하면 서비스 수준의 가용성을 유지할 수 있다.
본 글에서는 TACO LMA에서 제공하는 MinIO를 기준으로 설명하고 이는 standalone 방식을 사용하고 있다.
앞 설치에서 실행한 방법또한 standalone 모드이다.
실행모드에 대한 자세한 설명은 공식페이지(https://min.io/docs/minio/linux/operations/installation.html)를 활용하자.
MinIO는 데이터를 관리하는 방식으로 FS (File System)과 EC(Erasure Code)의 두가지 저장모드를 제공한다.
FS 모드는 MinIO 서버를 실행할 때 하나의 파일시스템 위치를 지정해주는 것으로 MinIO에 저장되는 데이터는 지정된 위치에 기록된다.
지정된 위치에 이전에 존재하는 파일 시스템 폴더, 파일 및 MinIO 백엔드 데이터는 그대로 활용되므로 별도의 스토리지 클래스를 만들 필요는 없이 서버실행시 지정한 파일시스템을 사용하는 것이다.
이 모드를 사용하면 MinIO가 실행되는 서버에서는 MinIO를 통하지 않고 적접적으로 올려진 객체를 수정하는 것도 가능하다.
이에 따라 권장하는 사용방법은 아니다.
EC(Erasure Code) 모드는 데이터 무결성 및 내구성을 높이기 위해 사용되는 방식 중 하나이고 MinIO에서는 EC 모드로 데이터를 저장할 수 있다.
EC모드의 스토리지 클래스를 만들고 그곳에 버킷을 생성하면 해당 버킷에 올라가는 데이터는 EC모드로 저장된다.
EC모드로 객체 저장예시
EC 스토리지 클래스를 만들기
mc admin storage add myminio EC1-RAID5 erasure=<data-shards>:<parity-shards><data-shards>: 데이터 조각수
<parity-shards>: 패리티 조각 수
mc admin storage add myminio EC1-RAID5 erasure=6:3
EC 모드로 버킷 생성
mc mb myminio/mybucket --storage-class EC1-RAID5EC1-RAID5: 앞서 만든 EC 스토리지 클래스의 이름
이제 EC 모드를 사용하여 MinIO에서 데이터를 저장할 수 있다. EC 모드를 사용하면 (일반 복제모드에 대비하여) 저장소 공간을 절약할 수 있고, 데이터 무결성과 내구성을 높일 수 있다.
ref. MinIO | Data Lifecycle Management and Tiering
MinIO는 버킷들에 대한 버전관리를 지원한다.
이를 통해 기존 개체를 덮어쓰는 쓰기 작업을 수행하면 그 결과로 해당 개체에대한 새로운 버전이 만들어지므로, 한번 들어온 데이터의 원본은 변경또는 삭제되지 않는다.
버킷의 내역을 조회하면 항상 최신 데이터를 반환한다. 과거 버전을 나열하도록 요청할 수 있고 버전과 함께 조회하여 과거 데이터에 접근가능하다.
변경 내역만 저장을 하는 기능(incremental backup)을 지원하지 않으므로 모든 데이터는 버전별로 전체가 저장된다.
업데이트가 빈번하게 이뤄지는 경우 저장소의 사용량이 급격히 늘어날수 있다.
단순하게 저장된 데이터를 지우는 기능으로 특정 일자가 지난이후 데이터가 삭제되도록 할 수 있다.
MinIO에서 이 주기는 버킷별로 지정할 수 있으며 객체 및 태그의 조합을 필터로 사용하여 지정다.
필터를 지정하지 않고 적용하면 버킷내 모든 객체(Object)에 대해 적용된다.
MinIO의 객체 만료 Lifecycle은 aws의 lifecycle 관리와 호환되어 s3에 적용된 JSON을 직접 적용할 수 있다.
Minio 는 S3에서 소개했던 전환(Transiction)이 가능한데 이를 위한 장치의 계층화가 필요하다.
다음 3가지 방식의 계층화를 생각해 볼수 있으며 이렇게 계층화된 저장소들간에 전환을 설정할 수 있다.
(3가지는 예시일뿐이며 다양하게 구성가능하다.)
저장장치별 계층화: 저장되는 미디어의 성능에 따라 계층화 가능하다.
출처: https://min.io/product/automated-data-tiering-lifecycle-management
클라우드 유형별 (hybridc cloud): 데이터의 지역성을 부여할 수 있으며, 내부의 저장소와 외부 클라우드를 사용하는 저장소로 분리하여 계층화 가능하다.
출처: https://min.io/product/automated-data-tiering-lifecycle-management
퍼블릭 클라우드 내부: 퍼블릭 클라우드만 사용하는 경우에 Minio의 저장소 영역과 s3와 같은 서비스 저장소로 계층화 가능하다.
출처: https://min.io/product/automated-data-tiering-lifecycle-management
이 글을 통해 대표적인 Object Strage 서비스인 AWS S3에 호환되는 가장 대표적인 오픈소스인 MinIO에 대한 소개와 내부적으로 활용하는 기술들에 대해 소개하였다.
단일 실행파일 형식으로 제공되는 소프트웨어로 매우 단순해 보이지만 잘 활용하기 위해서는 가능한 옵션들을 확인하고 이를 이용하는 Best Practice를 확인할 필요가 있어 정리한 내역이다.
다음 글로 TACO에서 이를 활용하여 실제 서비스를 올릴때 사용하는 방법에 대해서도 다룰 예정이다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.