公式紹介
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
時計が同期していることを確認してください
配置脚本
注: ここでは、スケーラブルでない疑似分散導入方法はスキップしてください。
まず、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 ブログ
Docker ベースの minio federal extension (ETCD) 2023 最新 _minio extension_qq_38343011 のブログ - CSDN ブログ
etcd+minio フェデレーション拡張計画_minio etcd_18 歳 Xu Song のブログ - CSDN ブログ
docker-install minioCluster_dockerdeployminiocluster_ブログを振らないでください-CSDN ブログ