はじめに
Amazon S3オブジェクトストレージは、WEBシステムのデータや、ログファイルの格納場所などとして、AWSサービスの中でも利用された方が多いかと思います。※1
Amazon S3 は、任意の量のデータの保存と取得をどこからでも行えるように設計されたオブジェクトストレージです。S3 は、業界をリードする耐久性、可用性、パフォーマンス、セキュリティ、および事実上無制限のスケーラビリティを非常に低コストで提供する、シンプルなストレージサービスです。※2
拡張性や、耐障害性としては高い評価がある一方、転送量でも課金が発生するため、常にR/Wが発生するシステムの場合は注意が必要です。
Amazon S3オブジェクトストレージはAPIのエコシステムが多く存在し、そのエコシステムをそのまま活用するため、S3互換ソフトウエアが開発されています。AWS以外のクラウドベンダもAmazon S3互換のサービスを提供しています。※3
今回はコスト面や、外部にデータを置けない場合などの候補として、MinIOを使ったS3互換ストレージを検証したいと思います。
MinIOは以下の4つの特徴があります。
シンプルなアーキテクチャ
✔Go言語で記述され、単一バイナリで動作する設計
✔技術的、運用的にも導入ハードルが低いです
ハイパフォーマンス
✔NVMeドライブ搭載の32ノードを100GbE ネットワーク上で構築し、読み込み(GETメソッド)で325GiB/秒、書き込み(PUTメソッド)で165 GiB/秒を記録
Kubernetesネイティブ
✔MinIOはパブリック、プライベート、エッジ様々なクラウド上のKubernetesディストリビューションをサポート
検証環境
OSはRocky Linux 9.3仮想マシン
$ cat /etc/os-release
NAME="Rocky Linux"
VERSION="9.3 (Blue Onyx)"
ストレージは16GBの仮想SSDです。
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 1.8G 8.0K 1.8G 1% /dev/shm
tmpfs 730M 8.6M 721M 2% /run
/dev/vda5 15G 1.4G 14G 10% /
/dev/vda2 936M 250M 687M 27% /boot
/dev/vda1 99M 7.0M 92M 8% /boot/efi
tmpfs 365M 0 365M 0% /run/user/1000
Docker(Podman)のインストール
rhel系OSではPodmanの利用が推奨されているためこちらを利用します。※5
$ sudo dnf -y install podman
略
======================================================================================================
Package Architecture Version Repository Size
======================================================================================================
Installing:
podman x86_64 2:4.6.1-7.el9_3 appstream 15 M
Installing dependencies:
conmon x86_64 2:2.1.8-1.el9 appstream 51 k
container-selinux noarch 3:2.221.0-1.el9 appstream 55 k
containers-common x86_64 2:1-55.el9 appstream 131 k
criu x86_64 3.18-1.el9 appstream 552 k
crun x86_64 1.8.7-1.el9 appstream 205 k
fuse-common x86_64 3.10.2-6.el9 baseos 7.2 k
fuse-overlayfs x86_64 1.12-1.el9 appstream 66 k
fuse3 x86_64 3.10.2-6.el9 appstream 52 k
fuse3-libs x86_64 3.10.2-6.el9 appstream 91 k
iptables-nft x86_64 1.8.8-6.el9_1 baseos 185 k
libnet x86_64 1.2-6.el9 appstream 58 k
libnftnl x86_64 1.2.2-1.el9 baseos 83 k
libslirp x86_64 4.4.0-7.el9 appstream 68 k
netavark x86_64 2:1.7.0-2.el9_3 appstream 3.6 M
nftables x86_64 1:1.0.4-11.el9_3 baseos 398 k
protobuf-c x86_64 1.3.3-13.el9 baseos 34 k
shadow-utils-subid x86_64 2:4.9-8.el9 baseos 86 k
slirp4netns x86_64 1.2.1-1.el9 appstream 46 k
yajl x86_64 2.1.0-22.el9 appstream 37 k
Installing weak dependencies:
aardvark-dns x86_64 2:1.7.0-1.el9 appstream 1.0 M
criu-libs x86_64 3.18-1.el9 appstream 30 k
Transaction Summary
======================================================================================================
略
docker composeを利用するためのパッケージも導入します。
$ sudo dnf install -y podman-docker
略
======================================================================================================
Package Architecture Version Repository Size
======================================================================================================
Installing:
podman-docker noarch 2:4.6.1-7.el9_3 appstream 58 k
Transaction Summary
======================================================================================================
略
サービスの起動を行います。
sudo systemctl enable --now podman.socket
sudo systemctl status podman.socket
docker composeコマンドをインストールします。
sudo curl -SL https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-x86_64 -o /usr/bin/docker-compose
sudo chmod 755 /usr/bin/docker-compose
MinIOコンテナの起動
作業ディレクトリを作成し移動します。
$ mkdir minio
$ cd minio/
docker composeベースの構成ファイルを作成します。
version: "3"
services:
minio:
image: minio/minio:latest
ports:
- 9000:9000
- 9001:9001
environment:
MINIO_ROOT_USER: minio
MINIO_ROOT_PASSWORD: dev-password
volumes:
- data:/export
- config:/root/.minio
command: server /export --console-address ":9001"
volumes:
data:
config:
コンテナを作成・起動します。
# docker-compose up -d
[+] Running 9/8
✔ minio 8 layers [⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 9.0s
✔ 368b91b99e37 Download complete 0.0s
✔ ea29d36b883e Download complete 1.4s
✔ 299e050c843d Download complete 1.8s
✔ a3b4ec08421f Download complete 0.2s
✔ 4a5c805461ae Download complete 0.2s
✔ 8e0d38efaf34 Download complete 0.0s
✔ 192e202aef0b Download complete 6.1s
✔ 04185fa70834 Download complete 0.0s
[+] Running 1/2
⠴ Network minio_default Created 0.6s
✔ Container minio-minio-1 Started 0.6s
動作状況を確認します。
# docker ps -a
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
438402466aa3 docker.io/minio/minio:latest server /export --... 8 seconds ago Up 8 seconds 0.0.0.0:9000-9001->9000-9001/tcp minio-minio-1
コンソール動作確認
検証機のIP:9001にブラウザでアクセスし動作確認を行います。ユーザはminio
、パスワードはdev-password
です。
ログインが成功すると様々な操作が行えるコンソールにアクセスできます。
試しにバケットを作成してみます。
アクセスキーを作成するとS3互換の様々なソフトウエアから操作することができます。
おわりに
今回はRocky Linux上でMinIOの構築を行いました。オンプレミス環境でS3互換オブジェクトストレージを利用したい場合は候補に挙がるかと思います。そのほかのソフトウエアとしては分散ストレージCeph + ObjectGWなどがあります。
今後、性能測定や、バックアップなど、運用に必要な設計を行いたいと思います。
参考
- 【AWS初心者向け】ストレージサービス「Amazon S3」とは?実際に使用してみた https://business.ntt-east.co.jp/content/cloudsolution/column-try-43.html
- Amazon S3 のよくある質問 https://aws.amazon.com/jp/s3/faqs/
- Amazon S3からAlibaba Cloud OSS へのデータの移行 https://www.alibabacloud.com/help/ja/oss/developer-reference/migrate-data-from-amazon-s3-to-alibaba-cloud-oss-1
- MinIO https://min.io/
- Podmanでのファイル作成の使用 https://docs.oracle.com/ja/learn/podman-compose/index.html#start-the-podman-socket