オブジェクトストレージサーバー Minio を簡単に試してみた on Windows

前提

  • Windows Server 2016
  • Minio Verion: 2018-06-29T02:11:29Z

Minio とは?

  • オブジェクトストレージサーバー
  • 実行ファイル minio.exe 一つで動くシンプルさ
  • ブラウザ用 UI も
  • Amazon S3 互換のインターフェイス体系(CLIとかREST APIとか)なので S3 勢には使いやすい

動かすまで

ディレクトリ構造

たとえば以下のように配置する。

+ minio
 - minio.exe
 + data
 + config
  - config.json

実行コマンドライン

$ cd <WORKDIR>\minio
$ minio.exe --config-dir config server data

これで「config フォルダ配下の設定ファイルを使って」「data フォルダ配下にデータを格納する」オブジェクトストレージサーバーが立ち上がる。

アクセスする

minio.exe を実行すると、利用に必要な情報が色々アウトプットされる。

$ minio.exe --config-dir minio\config server minio\data

Endpoint:  http://10.0.0.1:9000  http://127.0.0.1:9000
AccessKey: aaaa
SecretKey: aaaaaaaa

Browser Access:
   http://10.0.0.1:9000  http://127.0.0.1:9000
...

たとえばブラウザで使いたいなら Browser Access 部分の URL を開けばいい。開くとアクセスキーとシークレットキーを訊かれるので、表示されてるのを打つ。

ブラウザ UI

アップロード:

  • バケットを作る(Create Bucket)
  • バケットの中にファイルをアップする(Upload file)

ダウンロード:

  • バケットを開く
  • 表示されたファイルを選択して Download object

config.json について

まずは何も作らないで minio.exe を立ち上げる。するとデフォ設定で config.json が生成。これをベースにカスタマイズする。

ガイドは Minio Server config.json Guide - Minio あたりを読む。

最低限の config.json

アクセスキーは最低3文字、シークレットキーは最低8文字あれば動く。

{
    "version": "26",
    "credential": {
        "accessKey": "333",
        "secretKey": "88888888"
    }
}

これに満たない場合、 Unable to load the configuration file: invalid credential in conf みたいなエラーが出てしまう。

config の version って何?

ガイドでは

determines the configuration file format. Any older version will be automatically be migrated to the latest version upon startup. [DO NOT EDIT THIS FIELD MANUALLY]

と言っている。要するに「Minio のバージョン毎に微妙に config のフォーマットが異なる」という状況があるのだが、「どのバージョンのフォーマットを使うのか」という指定をこの version フィールドで行う。基本的に minio.exe 側で決めるためユーザーはいじってはならない。

もうちょっと中身を知りたいなら ソースを見る のもアリ。構造体でズラっと定義してある。

data はどのように保存される?

たとえば

$ minio.exe server data

と実行した(data フォルダ配下に保存)上で、バケット bucket1, bucket2 にそれぞれ data1.txt と data2.txt をアップロードした場合。

data
├─.minio.sys
│  │  format.json
│  │  
│  ├─buckets
│  │  ├─bucket1
│  │  │  └─data1.txt
│  │  │          fs.json
│  │  │          
│  │  └─bucket2
│  │      └─data2.txt
│  │              fs.json
│  │              
│  ├─multipart
│  └─tmp
│      └─xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
├─bucket1
│      data1.txt
│      
└─bucket2
        data2.txt

噛み砕くと、こう。

+data
 +bucket1
  -bucket1にアップしたファイル
  -...
 +bucket2
  -bucket2にアップしたファイル
  -...
 +その他内部的な設定情報など