Minio 導入の概要

公式紹介

MinIO は、Apache License v2.0 オープン ソース プロトコルに基づくオブジェクト ストレージ サービスです。Amazon S3 クラウド ストレージ サービス インターフェイスと互換性があり、写真、ビデオ、ログ ファイル、バックアップ データ、コンテナ/仮想マシン イメージなどの大容量の非構造化データやオブジェクト ファイルの保存に非常に適しています。数 kb から最大 5T までの任意のサイズにすることができます

MinIO は単一ポイントで展開でき、分散クラスタ展開が可能で、操作と展開が簡単で、拡張をサポートできます。SDK は Ali OSS に似ており、私のニーズをちょうど満たしています。唯一の欠点は、動的拡張をサポートしていないことです。

Docker 単一ノードのデプロイメント

まずミラーをプルし、最新バージョンのミラーをダウンロードします。

docker pull minio/minio

コンテナを起動します。開始ポートは 9000 "-v /mnt/data:/data"、コンテナを指すホストのストレージ アドレスを指定します。アップロードされたファイルはここに保存されます。起動するコマンドは "server /data"、コンテナの内部ストレージアドレスを/dataとして指定します

docker run -p 9000:9000 --name minio1 \
 --restart=always \
 --net=host \
  -e MINIO_ACCESS_KEY=minioadmin \
   -e MINIO_SECRET_KEY=minioadmin \
  -v /mnt/data:/data \
  -v /mnt/config:/root/.minio \
  minio/minio server /data


起動が成功すると、ブラウザは http://{ip}:9000 にアクセスし、ログインには accessKey と SecretKey が必要になります。Docker コンテナはデフォルトで「minioadmin」で開始され、起動後に表示されます。

Linux 単一ノードのバイナリ展開

ダウンロード

mkdir /home/minio/{app,config,data,logs} -p
cd /home/minio/app
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio

データディレクトリの作成

mkdir /minio_data

起動スクリプト

min_server_start.sh

chmod 755 min_server_single.sh

#!/bin/bash
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=12345678
MINIO_HOME=/home/minio/app	
nohup ${MINIO_HOME}/minio server /minio_data  --address :9000 --console-address :8000 > ${MINIO_HOME}/minio.log 2>&1 &

起動スクリプト

bash min_server_single.sh

 起動が成功すると、ブラウザは http://{ip}:9000 にアクセスします。ログインには accessKey と SecretKey が必要です。スクリプトではそれぞれ admin/12345678 です。

Linux 分散展開

公式導入:分散 Minio には少なくとも 4 台のハードディスクが必要で、分散 Minio を使用すると消去コード機能が自動的に導入されます。

分散型 Minio の利点

データ保護
Distributed Minio は消去コードを使用して、複数ノードのダウンタイムとビットの腐敗を防ぎます。
分散 Minio には少なくとも 4 台のハードディスクが必要で、分散 Minio を使用すると消去コード機能が自動的に導入されます。

高可用性の
スタンドアロン Minio サービスには単一障害点が存在しますが、逆に、N 個のハードディスクを備えた分散型 Minio の場合は、N/2 個のハードディスクがオンラインにある限り、データは安全です。ただし、新しいオブジェクトを作成するには、少なくとも N/2+1 個のハード ドライブが必要です
たとえば、ノードごとに 16 台のハードディスクを備えた 16 ノードの Minio クラスターでは、8 台のサーバーがダウンしてもクラスターは引き続き読み取り可能ですが、データを書き込むには 9 台のサーバーが必要です。


分散およびスタンドアロン モードの一貫性Minio、すべての読み取りおよび書き込み操作は、読み取り後書き込み一貫性モデルに厳密に従います。
 

環境を整える

192.168.10.159 ミニオン-2
192.168.10.153 ミニオン-1

ノードあたり 4 台のハードドライブ

注: ハードディスクは 4 台必要であり、ハードディスクが空である場合、エラーが報告されます。

#创建挂载点
mkdir /mnt/mongo1
mkdir /mnt/mongo2
mkdir /mnt/mongo3
mkdir /mnt/mongo4
#分区
fdisk /dev/sdc
fdisk /dev/sdd
fdisk /dev/sde
fdisk /dev/sdf
#格式化
mkfs.ext4 /dev/sdc1
mkfs.ext4 /dev/sdd1
mkfs.ext4 /dev/sde1
mkfs.ext4 /dev/sdf1
#加载
mount /dev/sdc1 /mnt/mongo2/
mount /dev/sdd1 /mnt/mongo3/
mount /dev/sde1 /mnt/mongo4/
mount /dev/sdf1 /mnt/mongo1/
#写入系统配置
echo "/dev/sdc1 /mnt/mongo2 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/sdd1 /mnt/mongo3 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/sde1 /mnt/mongo4 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/sdf1 /mnt/mongo1 ext4 defaults 0 0" >> /etc/fstab

df -h

 時計が同期していることを確認してください

Centosサーバー設定時刻自動同期

配置脚本

注: ここでは、スケーラブルでない疑似分散導入方法はスキップしてください。

まず、minio-1 単一ノード クラスターを起動します (後でクラスターの拡張を試みる必要があります)。

minio_cluster.sh

chmod 755 minio_cluster.sh

#!/bin/bash
  
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=12345678
MINIO_HOME=/home/minio/app
nohup ${MINIO_HOME}/minio server --address :9000 --console-address :8000  \
        http://minio-1/mnt/mongo{1...4} > ${MINIO_HOME}/minio.log 2>&1 &

クラスターを開始する

bash chmod 755 minio_cluster.sh

確認する

クラスター展開方法

ピアツーピア拡張

まず、MinIO のミニマリスト設計コンセプトにより、MinIO 分散クラスタは、単一ノードの追加によるデータのバランスや消去グループの分割が問題となるため、クラスタに単一ノードを追加して自動調整する拡張方法をサポートしていません。原因 クラスタ全体に複雑なスケジューリングと処理手順が必要となるため、メンテナンスが困難になります。したがって、MinIO はピアツーピア拡張方法を提供します。つまり、増加する必要があるノードとディスクの数は元のクラスターと同じでなければなりません。

注:同じデータ冗長性 SLA を維持するには、追加される各リージョンのディスク数 (消去コード セット) サイズが元のリージョンと同じである必要があります
たとえば、最初のゾーンには 8 個のディスクがありますが、クラスタを 16、32、または 1024 個のディスクのゾーンに拡張できます。ただし、展開 SLA が元のゾーンの倍数であることを確認してください。

minio-1 ノードの起動スクリプトは構成を追加します

容量を拡張するには、拡張したノードを元のコマンドの最後の行の末尾に追加し、クラスターを再起動します。

#!/bin/bash
  
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=12345678
MINIO_HOME=/home/minio/app
nohup ${MINIO_HOME}/minio server --address :9000 --console-address :8000  \
        http://minio-1/mnt/mongo{1...4} http://minio-2/mnt/mongo{1...4} > ${MINIO_HOME}/minio.log 2>&1 &

同期起動スクリプト

起動スクリプトを minio-2 ノードに同期すると、両方のノードがサービスを開始します。

確認する

連邦の拡大

MinIO は、別の拡張メカニズムを正式に提供します。フェデレーション拡張です。つまり、etcd を導入することで、複数の MinIO 分散クラスターが論理的にフェデレーションを形成し、全体として外部サービスを提供し、統一された名前空間を提供します。MinIO フェデレーテッド クラスタのアーキテクチャを図 3-1 に示します。

 フェデレーテッド拡張の長所と短所

ピアツーピア拡張と比較したフェデレーション拡張の利点は、①フェデレーション内の各クラスターのノード数とディスク数が同じである必要がないこと、②フェデレーションを無期限に拡張でき、新しいクラスターが継続的に追加できること、②フェデレーションを無制限に拡張できること、②フェデレーション拡張の利点が挙げられます。 ③ フェデレーション内のクラスターに障害が発生しても、その障害はフェデレーション内の他のクラスターに影響を与えず、サービスを提供します。欠点は、etcd を追加で導入する必要があり、設定プロセスがより複雑になることです。

フェデレーション クラスターには欠陥があることが確認されており、クラスター A がいっぱいの場合、クラスター A のみを拡張でき、それ以外の場合、クラスター A に関連するバケットを追加できません。クラスタ B の拡張は無効です

etcdをインストールする

インストール場所: 192.168.10.153

yum install -y etcd

vi /etc/etcd/etcd.conf

#[メンバー]
#ETCD_CORS=""
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_WAL_DIR=""
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:3380"
ETCD_LISTEN_CLIENT_URLS="http://0.0. 0.0:

3379" #ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
ETCD_NAME="etcd_minio"
#ETCD_SNAPSHOT_COUNT="100000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
#ETCD_QUOTA_BACKEND_BYTES="0"
#ETCD_MAX_REQUEST_BYTES ="1572864"
# ETCD_GRPC_KEEPALIVE_MIN_TIME="5s"
#ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s"
#ETCD_GRPC_KEEPALIVE_TIMEOUT="20s"
#
#[クラスタリング]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.10.153:3380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.10.153:3379"

#ETCD_DISCOVERY=""
#ETCD_DISCOVERY_FALLBACK="プロキシ"
#ETCD_DISCOVERY_PROXY=""
#ETCD_DISCOVERY_SRV=""
#ETCD_INITIAL_CLUSTER="default=http://localhost:2380"
#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
#ETCD_INITIAL_CLUSTER_STATE="new"
#ETCD_STRICT_RECONFIG_CHECK="true"
#ETCD_ENABLE_V2="true"
#
#[プロキシ]
#ETCD_PROXY="off"
#ETCD_PROXY_FAILURE_WAIT="5000"
#ETCD_PROXY_REF RESH_INTERVAL="30000 "
#ETCD_PROXY_DIAL_TIMEOUT="1000"
#ETCD_PROXY_WRITE_TIMEOUT="5000"
#ETCD_PROXY_READ_TIMEOUT="0"
#
#[セキュリティ]
#ETCD_CERT_FILE=""
#ETCD_KEY_FILE=""
#ETCD_CLIENT_CERT_AUTH="false"
#ETCD_TRUSTED_CA_FILE=""
#ETCD_AUTO_TLS="false"
#ETCD_PEER_CERT_FILE=""
# ETCD_PEER_KEY_FILE="" #ETCD_PEER_CLIENT_CERT_AUTH=
"false " #ETCD_PEER_TRUSTED_CA_FILE
=""
#ETCD_PE ER_AUTO_TLS="false"
#
#[ログ]
#ETCD_DEBUG="false"
#ETCD_LOG_PACKAGE_LEVELS=""
#ETCD_LOG_OUTPUT="default"
#
#[安全ではありません]
#ETCD_FORCE_NEW_CLUSTER="false"
#
#[バージョン]
#ETCD_VERSION="false"
#ETCD_AUTO_COMPACTION_RETENTION="0"
##[プロファイリング] #ETCD_ENABLE_PPROF="false" #ETCD_METRICS="基本" #




#[認証]
#ETCD_AUTH_TOKEN="シンプル"
 

etcd が正常にインストールされていることを確認してください。次のコマンドを使用して etcd のインストール状況を確認できます。

rpm -qa | grep etcd

etcd のバージョン情報が出力に表示される場合、etcd はすでにインストールされています。

etcdサービスを開始します。次のコマンドで etcd を起動します。

systemctl 起動 etcd


これにより、etcd サービスが起動して実行されます。

etcd サービスが正常に開始されたことを確認します。次のコマンドを使用して、etcd サービスの実行ステータスを確認できます。

systemctl ステータスなど

出力に「active (running)」と表示されれば、etcd サービスは正常に開始されました。

クラスター 1 起動スクリプト

minio_cluster.sh

#!/bin/bash
  
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=12345678
MINIO_HOME=/home/minio/app

export MINIO_ETCD_ENDPOINTS="http://192.168.10.153:3379"
export MINIO_PUBLIC_IPS=192.168.10.153
export MINIO_DOMAIN=bo.test.com


nohup ${MINIO_HOME}/minio server --address :9000 --console-address :8000  \
        http://minio-1/mnt/mongo{1...4} > ${MINIO_HOME}/minio.log 2>&1 &

クラスター 2 起動スクリプト

minio_cluster.sh

#!/bin/bash
  
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=12345678
MINIO_HOME=/home/minio/app

export MINIO_ETCD_ENDPOINTS="http://192.168.10.153:3379"
export MINIO_PUBLIC_IPS=192.168.10.159
export MINIO_DOMAIN=bo.test.com

nohup ${MINIO_HOME}/minio server --address :9000 --console-address :8000  \
        http://minio-2/mnt/mongo{1...4} > ${MINIO_HOME}/minio.log 2>&1 &

構成説明

MINIO_ETCD_ENDPOINTS パラメーターは、構築された ETCD クラスター内のすべてのノードの IP に対応する必要があります。

MINIO_PUBLIC_IPS パラメーターは、クラスター内のすべてのノードの IP です。

MINIO_DOMAIN パラメータを設定する必要があります。ドメイン名を使用してバケットにアクセスしない場合でも、フェデレーションは有効になりません。同じ MINIO_DOMAIN パラメータ値を持つクラスタのみがフェデレーションを形成します。

確認する

クラスター A にバケットを作成し、それがクラスター B にすぐに表示される場合は、クラスターが正常に構築されたことを意味します。

Docker デプロイメント ピアツーピア拡張

要求シーン

本来のクラスタ導入方法では、空のハードディスクが少なくとも4台必要で、多くのリソースが必要ですが、リソースが限られている場合には、ストレージリソースを拡張できるクラスタが必要になる場合があり、これをDocker方式で導入できます。

Docker によってインストールされた minio クラスターは、ディスクの代わりにフォルダーを使用できます。また、元のインストールの minio クラスター データ ディレクトリは、空のディスク全体を使用する必要があります。
クラスター バージョンでは消去コードを使用してデータを維持し、データのバックアップ (ただしフォルダー内のみ) を保証します。スタンドアロン バージョンでは消去コードは使用されません。
運用環境では 1 つのデータ ディレクトリと 1 つのディスクを使用することをお勧めします。

サーバーリスト

192.168.10.159,192.168.10.160

注意点

1.ネットワークは --net-host モードを使用する必要がありますが、マッピング モードを試してみたところ、使用できませんでした推測では、マッピング モードを使用する場合、各ノードの ID をクラスターに報告するときに、取得された IP は内部コンテナーの IP であり、次のパラメーターのデータ アドレス IP と一致しないと考えられます。

2. データを永続化する必要がある場合は、データ ディレクトリと構成ファイル ディレクトリをホストにマッピングする必要があります。

3. サービス ポートとコンソール ポートは、--address、--console-address パラメータを使用してカスタマイズできます。

4. すべてのディスクのコピー数は、2 の n 乗、つまり 4 以上であることをお勧めします。
 

Dockerfileをビルドする

FROM centos:centos7.9.2009
wget https://dl.min.io/server/minio/release/linux-amd64/minio
WORKDIR /opt
RUN  chmod +x minio
ENTRYPOINT ["./minio"]
CMD ["server", "--address :9000","--console-address :9999","http://10.22.1.27/data{1...4}"]

minio ファイルがダウンロードされている場合は、次を使用できます。

FROM centos:centos7.9.2009
COPY ./minio /opt/
WORKDIR /opt
RUN  chmod +x minio
ENTRYPOINT ["./minio"]
CMD ["server", "--address :9000","--console-address :9999","http://10.22.1.27/data{1...4}"]

ビルド ビルドイメージ

sudo docker build -t myminio .

起動スクリプト

docker run   --name minio1   \
    --restart=always \
    --net=host \
    -e MINIO_ACCESS_KEY=minioadmin \
    -e MINIO_SECRET_KEY=minioadmin \
    -v /data1:/data1 \
    -v /data2:/data2 \
	-v /data3:/data3 \
    -v /data4:/data4 \
    myminio server \
    --address :29000 \
    --console-address :29001  \
    http://192.168.10.159/data{1...4} http://192.168.10.160/data{1...4}

知らせ:

1. wget が上記の minio ファイルを取得する理由は、デフォルトの minio/minio イメージではないため、実験の結果、minio/minio イメージに {} 構文を使用するとエラーが報告されることが判明したため、最新のバイナリ ファイルが直接使用されます。

2. 初期化されたマッピング ディレクトリが既に存在する場合、起動時にエラーが報告されることがありますが、最も安全な方法は、ディレクトリが存在しないことを確認し、docker の起動時に自動的にディレクトリを作成することです。

逆展開のアイデアを提供する

最初にできるだけ多くのディレクトリをマウントし、データ ディレクトリがほぼいっぱいになったら、データ ディレクトリの一部を新しい空のハード ディスクに mv し、コンテナを削除し、起動スクリプトのマウント パスを変更して再起動します。32 個のディレクトリがマウントされている場合は 5 回の拡張機会があり、16 個のディレクトリがマウントされている場合は 5 回の拡張機会があります。ディレクトリが 8 つある場合、拡張の機会は 4 つあります。最後に、mv ディレクトリを展開する機会がない場合は、マシン ノードを追加できます。

たとえば、最初に 16 個のディレクトリをマウントします。

docker run   --name minio1  -d \
    --restart=always \
    --net=host \
    -e MINIO_ACCESS_KEY=minioadmin \
    -e MINIO_SECRET_KEY=minioadmin \
    -v /mnt/mongo1/data1:/data1 \
    -v /mnt/mongo1/data2:/data2 \
	-v /mnt/mongo1/data3:/data3 \
    -v /mnt/mongo1/data4:/data4 \
	-v /mnt/mongo1/data5:/data5 \
    -v /mnt/mongo1/data6:/data6 \
	-v /mnt/mongo1/data7:/data7 \
    -v /mnt/mongo1/data8:/data8 \
	-v /mnt/mongo1/data9:/data9 \
    -v /mnt/mongo1/data10:/data10 \
	-v /mnt/mongo1/data11:/data11 \
    -v /mnt/mongo1/data12:/data12 \
	-v /mnt/mongo1/data13:/data13 \
    -v /mnt/mongo1/data14:/data14 \
	-v /mnt/mongo1/data15:/data15 \
    -v /mnt/mongo1/data16:/data16 \
    myminio server  \
    --address :29000 \
    --console-address :29001  \
    http://192.168.10.159:29000/data{1...16}

/mnt/mongo1 が配置されているハードディスクがほぼいっぱいになったら、9-16 を新しいハードディスクに移動します

mv /mnt/mongo1/data9 /total_min/
mv /mnt/mongo1/data10 /total_min/
mv /mnt/mongo1/data11 /total_min/
mv /mnt/mongo1/data12 /total_min/
mv /mnt/mongo1/data13 /total_min/
mv /mnt/mongo1/data14 /total_min/
mv /mnt/mongo1/data15 /total_min/
mv /mnt/mongo1/data16 /total_min/

コンテナを削除し、起動スクリプトを変更してコンテナを再起動すると、拡張効果が有効になり、実験的検証が有効になります。

docker run   --name minio1  -d \
    --restart=always \
    --net=host \
    -e MINIO_ACCESS_KEY=minioadmin \
    -e MINIO_SECRET_KEY=minioadmin \
    -v /mnt/mongo1/data1:/data1 \
    -v /mnt/mongo1/data2:/data2 \
	-v /mnt/mongo1/data3:/data3 \
    -v /mnt/mongo1/data4:/data4 \
	-v /mnt/mongo1/data5:/data5 \
    -v /mnt/mongo1/data6:/data6 \
	-v /mnt/mongo1/data7:/data7 \
    -v /mnt/mongo1/data8:/data8 \
	-v /total_min/data9:/data9 \
    -v /total_min/data10:/data10 \
	-v /total_min/data11:/data11 \
    -v /total_min/data12:/data12 \
	-v /total_min/data13:/data13 \
    -v /total_min/data14:/data14 \
	-v /total_min/data15:/data15 \
    -v /total_min/data16:/data16 \
    myminio server  \
    --address :29000 \
    --console-address :29001  \
    http://192.168.10.159:29000/data{1...16}

コンテナを削除することもできません。ファイルを移動した後、ln を使用して元の場所を指すファイル リンクを作成します。

 ln -s /mnt/mongo2/data9 /mnt/mongo1/data9
 ln -s /mnt/mongo2/data10 /mnt/mongo1/data10
 ln -s /mnt/mongo2/data11 /mnt/mongo1/data11
 ln -s /mnt/mongo2/data12 /mnt/mongo1/data12
 ln -s /mnt/mongo2/data13 /mnt/mongo1/data13
 ln -s /mnt/mongo2/data14 /mnt/mongo1/data14
 ln -s /mnt/mongo2/data15 /mnt/mongo1/data15
 ln -s /mnt/mongo2/data16 /mnt/mongo1/data16

図に示すように、docker start コマンドを変更せずにコンテナーを再起動できます。

ハードディスクの使用状況をテストします。これは非常に便利なコマンドです。

fallocate -l 8G /mnt/mongo1/test2.zip

ソース

Minio 分散クラスター展開_51CTO ブログ_分散クラスター展開

Minio 分散クラスター展開_51CTO ブログ_分散クラスター展開

minio クラスター、expansion_minio クラスター_leoppeng のブログ - CSDN ブログ

MinIO の展開と拡張

 MinIOクラスタの拡張方法についての話

Docker ベースの minio federal extension (ETCD) 2023 最新 _minio extension_qq_38343011 のブログ - CSDN ブログ

 etcd+minio フェデレーション拡張計画_minio etcd_18 歳 Xu Song のブログ - CSDN ブログ

docker-install minioCluster_dockerdeployminiocluster_ブログを振らないでください-CSDN ブログ

Minio クラスターのインストール docker バージョン_docker minio クラスターが最適です

おすすめ

転載: blog.csdn.net/csdncjh/article/details/131754563