LoginSignup
11
8

More than 3 years have passed since last update.

MinIO オブジェクトストレージの構築

Last updated at Posted at 2020-09-02

MinIO オブジェクトストレージの構築

アマゾンからの警告が来た。
オブジェクトストレージのお勉強で、パケットキャプチャのデータをガンガンS3に上げていたら2000リクエストに近くなったので「金払えやコラ」と。

AWS.png

という事で、自前でオブジェクトストレージを立てようと決心。

1、MinIOの導入 CentOS編 
2、MinIOの導入 Docker編
3、MinIOの導入 erasure-coding編
4、サービス停止

環境

H/W OS IPアドレス ソフトウェア
Supermicro E300-9D CentOS7.8 192.168.3.18 MinIO Server/MinIO Client(mc)
ノートPC Win10 192.168.3.100 Firefoxブラウザ

基本的にMinIOのドキュメントが素晴らしいので、これだけで最低限の構築は可能。
https://docs.min.io/docs/

1、MinIOの導入 CentOS編

Webに書いてある通りなのでその通り実行するだけ。
https://docs.min.io/docs/

# wget https://dl.min.io/server/minio/release/linux-amd64/minio
# chmod +x minio
# ./minio server /data

うまく動くと下記のメッセージが出る。
アクセス方法やコマンド、APIのドキュメント先、さらに「パスワード変えとけよ」と至れり尽くせり。

Endpoint:  http://192.168.3.18:9000  http://192.168.122.1:9000  http://127.0.0.1:9000
AccessKey: minioadmin
SecretKey: minioadmin

Browser Access:
   http://192.168.3.18:9000  http://192.168.122.1:9000  http://127.0.0.1:9000

Command-line Access: https://docs.min.io/docs/minio-client-quickstart-guide
   $ mc config host add myminio http://192.168.3.18:9000 minioadmin minioadmin

Object API (Amazon S3 compatible):
   Go:         https://docs.min.io/docs/golang-client-quickstart-guide
   Java:       https://docs.min.io/docs/java-client-quickstart-guide
   Python:     https://docs.min.io/docs/python-client-quickstart-guide
   JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
   .NET:       https://docs.min.io/docs/dotnet-client-quickstart-guide
Detected default credentials 'minioadmin:minioadmin', please change the credentials immediately using 'MINIO_ACCESS_KEY' and 'MINIO_SECRET_KEY'

で、ブラウザでhttp://192.168.3.18:9000にアクセスするとログイン画面が出る。
鳥がかわいい。(右下のアドレスは14になっていますが気にしないでください。)
miniologin.png

ログインして+マークからBucketの作成やオブジェクトのPut/Get/Deleteができちゃう。
本当に簡単。
button.png

また、MinIOではS3互換のコマンドライン"mc"も作っているのでそれも試す。
https://docs.min.io/docs/minio-client-complete-guide.html
インストールと minio = サーバーIPとパスワード のエイリアスの設定。

# wget https://dl.min.io/client/mc/release/linux-amd64/mc
# chmod +x mc
# cp mc /usr/bin
# mc alias set minio http://192.168.3.18:9000 minioadmin minioadmin

状態確認

# mc admin info minio
●  192.168.3.18:9000
   Uptime: 1 hour
   Version: 2020-08-27T05:16:20Z
   Network: 1/1 OK

1.3 GiB Used, 4 Buckets, 109 Objects

test01というバケットを作成し、test.txtをアップロード

# touch test.txt
# mc mb minio/test01
    Bucket created successfully `minio/test01`.
# mc cp test.txt minio/test01
    0 B / ? ┃░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓┃
# mc ls minio/test01
    [2020-09-01 03:31:26 EDT]      0B test.txt

2、MinIOの導入 Docker編

これもマニュアル通り
https://docs.min.io/docs/

もしDockerが入っていない場合は下記。

# yum update
# yum upgrade
# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum install -y docker-ce docker-ce-cli containerd.io
# systemctl start docker
# systemctl enable docker

MinIOの展開は下記

データ保存しないでいい場合
# docker run -p 9000:9000 -e "MINIO_ACCESS_KEY=minioadmin" -e "MINIO_SECRET_KEY=minioadmin" minio/minio server /data
永続的ボリュームが必要な場合
# docker run -p 9000:9000 --name minio1 -v /mnt/data:/data -e "MINIO_ACCESS_KEY=minioadmin" -e "MINIO_SECRET_KEY=minioadmin" minio/minio server /data

後は同じですが、Dockerネットワーク外からブラウザでアクセスさせたいので、-p 9000:9000オプションを付けてDocker外(例えばノートPCとか)からはhttp://192.168.3.18:9000(CentOSのIP:port)のようにしてアクセス可能にします。
Dockerのネットワーク(127.17.0.x的なやつ)に直接アクセスしようとすると、ほかの色々な設定が必要になると思います。

3、MinIOの導入 erasure-coding編

せっかくなので4つ繋いでイレジャーコーディングを試す。
とはいえ、4つもHDD/SSDは無いので、自宅のSynology NASからiSCSIデバイスを/dev/sdbから/dev/sdeまで10GBずつ4個割り当て。
どうでもいいけど、Synologyは本当に便利。

# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0 745.2G  0 disk
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0 744.2G  0 part
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0   7.7G  0 lvm  [SWAP]
  └─centos-home 253:2    0 686.5G  0 lvm  /home
sdb               8:16   0    10G  0 disk
sdc               8:32   0    10G  0 disk
sdd               8:48   0    10G  0 disk
sde               8:64   0    10G  0 disk

/dev/sdbから/dev/sdeまでをパーティション作成してフォーマット、そしてマウント

fdisk/dev/sdb >>(1パーティションで作成)
mkfs -t ext4 /dev/sdb1
mount -t ext4 /dev/sdb1 /data1

何もしていなくても36MBくらいは使っているらしい。

# df
Filesystem              1K-blocks    Used Available Use% Mounted on

/dev/sdb1                10189076   36888   9611568   1% /data1  #<<36MBくらい何かで使っている
/dev/sdc1                10189076   36888   9611568   1% /data2
/dev/sdd1                10189076   36888   9611568   1% /data3
/dev/sde1                10189076   36888   9611568   1% /data4

そして、4つのマウントポイントに対してminio発動!
スペースを開けずに{}の中に1から4までを書くのがルールで、その際間のピリオドは必ず3つ必要。
ドライブ数が12台でも/data{1...12}とするのがルールとの事。

# ./minio server /data{1...4}

Formatting 1st zone, 1 set(s), 4 drives per set.
WARNING: Host local has more than 2 drives of set. A host failure will result in data becoming unavailable.
Status:         4 Online, 0 Offline.
Endpoint:  http://192.168.3.18:9000  http://192.168.122.1:9000  http://127.0.0.1:9000
AccessKey: minioadmin
SecretKey: minioadmin

Browser Access:
   http://192.168.3.18:9000  http://192.168.122.1:9000  http://127.0.0.1:9000

Command-line Access: https://docs.min.io/docs/minio-client-quickstart-guide
   $ mc config host add myminio http://192.168.3.18:9000 minioadmin minioadmin

Object API (Amazon S3 compatible):
   Go:         https://docs.min.io/docs/golang-client-quickstart-guide
   Java:       https://docs.min.io/docs/java-client-quickstart-guide
   Python:     https://docs.min.io/docs/python-client-quickstart-guide
   JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
   .NET:       https://docs.min.io/docs/dotnet-client-quickstart-guide
Detected default credentials 'minioadmin:minioadmin', please change the credentials immediately using 'MINIO_ACCESS_KEY' and 'MINIO_SECRET_KEY'

ちゃんと4drivesがオンラインになっている。

作成したtestbktに約180MBのOSイメージをアップロード。
右下に進捗が出る。
(左下のアドレスは14になっていますが気にしないでください。)
copy.png

各ボリュームから80MB程度が消費されているので、2ドライブx2セットに分散されている様子

#df
Filesystem              1K-blocks    Used Available Use% Mounted on

/dev/sdb1                10189076  118876   9529580   2% /data1  #<<118MBくらいになった。(82MBくらい増えた)
/dev/sdc1                10189076  118876   9529580   2% /data2
/dev/sdd1                10189076  118876   9529580   2% /data3
/dev/sde1                10189076  118876   9529580   2% /data4

この状態でiscsiボリュームをunmountしてみる。
グッバイ/disk4..

# umount /disk4

エラーメッセージが出た。

API: WebStorageInfo()
Time: 21:56:00 JST 08/12/2020
DeploymentID: 2d2ca653-ca60-4de7-aaca-7fbdf3ac3e09
RemoteHost: 127.0.0.1
Host: 127.0.0.1:9000
UserAgent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Error: unformatted disk found
       disk=/data4
       2: github.com/minio/minio@/cmd/erasure-metadata-utils.go:133:cmd.readAllFileInfo.func1()
       1: github.com/minio/minio@/pkg/sync/errgroup/errgroup.go:55:errgroup.(*Group).Go.func1()
Found drives to heal 1, proceeding to heal content...
Disk `/data4` is a root disk. Please ensure the disk is mounted properly, refusing to use root disk.

この状態のままファイルをアップロードすると、ほかの3個のHDDにはデータが入っている。
当然、外したドライブのマウントポイントにはアップロードしたデータはない。

さらに/disk4をmountしなおしてからファイルをアップロードすると、何事もなかったかのようにデータが入っている。

これがオブジェクトストレージの恩恵か。
普通のRAIDなら一度外してしまったら最後、もう一度戻しても他のドライブも巻き込んで再構築が走るもんね。

4、サービス停止

無事動いたら一旦止めておきます。

$ mc admin service stop minio

MinIOはかなり簡単かつ奥が深そうなので、これからも色々試してみよう。
お疲れさまでした。

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8