데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      MinIO 사용하기 (1/2)

      sungil 23.06.08
      20,844 13 2

      TKS (TACO)에서는 Object store의 활용이 필요한 부분에서 S3를 주 저장소로 사용하고 있으며 폐쇄망 환경등에 대응하기 위해 S3를 호환하는 MinIO를 제공하고 있다.

      “AWS S3 효율적으로 사용하기”라는 글에서 소개했던 것처럼 Object store의 경우에도 저장되는 개체에 대한 관리가 필요하며

      MinIO는 구축형으로 제한된 저장소를 활용하고 있으므로 이에 대한 통제는 더욱 필수적이다.

      사용자가 MinIO에 저장된 내역을 확인하며 처리하는 방법도 있지만 s3의 lifecycle configuration과 같이 이를 자동화하여 관리하는 기술이 있어 이 글을 통해 정리하고자 한다.

      특히 쿠버네티스 클러스터(TACO)의 내부에서 표준 객체저장소로 MinIO를 사용하면서 데이터 저장의 확장을 위해 S3를 활용하는 구체적인 방법을 다룬다.



      MinIO 개요

      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모드로 객체 저장예시

        1. 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
          
        2. EC 모드로 버킷 생성

          mc mb myminio/mybucket --storage-class EC1-RAID5
          • EC1-RAID5: 앞서 만든 EC 스토리지 클래스의 이름

        이제 EC 모드를 사용하여 MinIO에서 데이터를 저장할 수 있다. EC 모드를 사용하면 (일반 복제모드에 대비하여) 저장소 공간을 절약할 수 있고, 데이터 무결성과 내구성을 높일 수 있다.

      MinIO의 Data 라이프사이클 관리와 계층화

      ref. MinIO | Data Lifecycle Management and Tiering

      버전관리

      MinIO는 버킷들에 대한 버전관리를 지원한다.

      이를 통해 기존 개체를 덮어쓰는 쓰기 작업을 수행하면 그 결과로 해당 개체에대한 새로운 버전이 만들어지므로, 한번 들어온 데이터의 원본은 변경또는 삭제되지 않는다.

      버킷의 내역을 조회하면 항상 최신 데이터를 반환한다. 과거 버전을 나열하도록 요청할 수 있고 버전과 함께 조회하여 과거 데이터에 접근가능하다.


      변경 내역만 저장을 하는 기능(incremental backup)을 지원하지 않으므로 모든 데이터는 버전별로 전체가 저장된다.

      업데이트가 빈번하게 이뤄지는 경우 저장소의 사용량이 급격히 늘어날수 있다.

      만료(삭제)

      단순하게 저장된 데이터를 지우는 기능으로 특정 일자가 지난이후 데이터가 삭제되도록 할 수 있다.

      MinIO에서 이 주기는 버킷별로 지정할 수 있으며 객체 및 태그의 조합을 필터로 사용하여 지정다.

      필터를 지정하지 않고 적용하면 버킷내 모든 객체(Object)에 대해 적용된다.


      MinIO의 객체 만료 Lifecycle은 aws의 lifecycle 관리와 호환되어 s3에 적용된 JSON을 직접 적용할 수 있다.

      객체 저장의 계층화

      Minio 는 S3에서 소개했던 전환(Transiction)이 가능한데 이를 위한 장치의 계층화가 필요하다.

      다음 3가지 방식의 계층화를 생각해 볼수 있으며 이렇게 계층화된 저장소들간에 전환을 설정할 수 있다.

      (3가지는 예시일뿐이며 다양하게 구성가능하다.)

      마치며

      이 글을 통해 대표적인 Object Strage 서비스인 AWS S3에 호환되는 가장 대표적인 오픈소스인 MinIO에 대한 소개와 내부적으로 활용하는 기술들에 대해 소개하였다.

      단일 실행파일 형식으로 제공되는 소프트웨어로 매우 단순해 보이지만 잘 활용하기 위해서는 가능한 옵션들을 확인하고 이를 이용하는 Best Practice를 확인할 필요가 있어 정리한 내역이다.

      다음 글로 TACO에서 이를 활용하여 실제 서비스를 올릴때 사용하는 방법에 대해서도 다룰 예정이다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      sungil 님의 최신 블로그

      더보기
      동영상 기고하기