1minioはシンプルMinIO は、高性能な分散オブジェクト ストレージ システムです。標準ハードウェア上で 100% 実行できるソフトウェア製品です。つまり、X86 などの低コストのマシンでも MinIO を問題なく実行できます。 MinIO が従来のストレージや他のオブジェクト ストレージと異なる点は、そのソフトウェア アーキテクチャが最初から、より高いパフォーマンス要件を持つプライベート クラウド標準向けに設計されていることです。 MinIO は最初からオブジェクト ストレージ専用に設計されていたためです。そのため、よりユーザーフレンドリーな方法で設計されており、オブジェクト ストレージに必要なすべての機能を実現でき、パフォーマンスが強化されています。より多くのビジネス機能のために妥協することなく、MinIO の使いやすさと効率性を失うことはありません。 この結果の利点は、弾力的なスケーラビリティを備えたネイティブ オブジェクト ストレージ サービスをより簡単に実装できることです。 MinIO は、セカンダリ ストレージ、災害復旧、アーカイブなどの従来のオブジェクト ストレージの使用例に優れています。同時に、機械学習、ビッグデータ、プライベートクラウド、ハイブリッドクラウドなどのストレージ技術においても独自の存在です。もちろん、データ分析、高パフォーマンスのアプリケーション負荷、クラウドネイティブのサポートも除外されません。 minio コミュニティ版はオープンソースかつ無料なので、OSS を使う予算がない場合に検討できます。 2 Dockerビルド minioMinio はクラウドネイティブに対応しているので、docker を使って直接ビルドすることができます。もちろん、k8s を使って公式チャートを直接ダウンロードして使うこともできます。 2.1 単一ノードdocker runを使用して単一のノードを直接起動できます。 docker 実行 \ -p 9000:9000 \ -p 9001:9001 \ minio/minio サーバー /data --console-address ":9001" docker-compose を使用して実行することもできます。 docker-compose.yamlを書く バージョン: '3' サービス: ミニオ: 画像: minio/minio ホスト名: "minio" ポート: - 9000:9000 - 9001:9001 環境: MINIO_ACCESS_KEY: admin #コンソールログインアカウント MINIO_SECRET_KEY: 12345678 #コンソールログインパスワードボリューム: - ./data:/data #ストレージパス - ./config:/root/.minio/ #設定ファイルコマンド: server --console-address ':9001' /data 特権: true 再起動: 常に マウントされたファイル ディレクトリを作成し、docker-compose を実行して起動します。 docker-compser を起動 -d ip:9001と入力し、admin/12345678と入力してコンソールに入ります コンソール: バケットを作成したら、ファイルをアップロードできます。 名前を入力して保存します。 設定することは可能ですが、関連するポリシーについてはここでは説明しません。 操作オブジェクトファイルのアップロードとダウンロードが可能です。 2.2 マルチノード展開マルチノードのデプロイメントは、docker-compse を使用してシミュレートされます。 4 つのノードを作成し、各ノードにデータのコピーを 2 つマウントします。 docker-compose.yamlを書く バージョン: '3' # minio サーバー インスタンスを実行する 4 つの Docker コンテナを起動します。 # nginxリバースプロキシ、負荷分散を使用すると、アクセスできます # ポート 9000 経由で接続します。 サービス: ミニオ1: 画像: minio/minio ホスト名: minio1 ボリューム: - ./data1-1:/data1 - ./data1-2:/data2 さらす: - 「9000」 - 「9001」 環境: MINIO_ROOT_USER: ミニオ MINIO_ROOT_パスワード: minio123 コマンド: server --console-address ":9001" http://minio{1...4}/data{1...2} ヘルスチェック: テスト: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] 間隔: 30秒 タイムアウト: 20秒 再試行: 3 ミニオ2: 画像: minio/minio ホスト名: minio2 ボリューム: - ./data2-1:/data1 - ./data2-2:/data2 さらす: - 「9000」 - 「9001」 環境: MINIO_ROOT_USER: ミニオ MINIO_ROOT_パスワード: minio123 コマンド: server --console-address ":9001" http://minio{1...4}/data{1...2} ヘルスチェック: テスト: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] 間隔: 30秒 タイムアウト: 20秒 再試行: 3 ミニオ3: 画像: minio/minio ホスト名: minio3 ボリューム: - ./data3-1:/data1 - ./data3-2:/data2 さらす: - 「9000」 - 「9001」 環境: MINIO_ROOT_USER: ミニオ MINIO_ROOT_パスワード: minio123 コマンド: server --console-address ":9001" http://minio{1...4}/data{1...2} ヘルスチェック: テスト: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] 間隔: 30秒 タイムアウト: 20秒 再試行: 3 ミニオ4: 画像: minio/minio ホスト名: minio4 ボリューム: - ./data4-1:/data1 - ./data4-2:/data2 さらす: - 「9000」 - 「9001」 環境: MINIO_ROOT_USER: ミニオ MINIO_ROOT_パスワード: minio123 コマンド: server --console-address ":9001" http://minio{1...4}/data{1...2} ヘルスチェック: テスト: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] 間隔: 30秒 タイムアウト: 20秒 再試行: 3 nginx: イメージ: nginx:1.19.2-alpine ホスト名: nginx ボリューム: - ./nginx.conf:/etc/nginx/nginx.conf:ro ポート: - 「9000:9000」 - 「9001:9001」 依存: -ミニオ1 - ミニオ2 - ミニオ3 - ミニオ4 マウント用の対応するデータ ディレクトリと nginx ディレクトリを作成します。 nginx を使用して 4 つのノードを負荷分散し、nginx.conf を作成します。 ユーザー nginx; ワーカープロセスは自動です。 error_log /var/log/nginx/error.log 警告; pid /var/run/nginx.pid; イベント { ワーカー接続 4096; } http { /etc/nginx/mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log メイン; ファイル送信オン; キープアライブタイムアウト65; # /etc/nginx/conf.d/*.conf を含めます。 アップストリームミニオ{ サーバー minio1:9000; サーバー minio2:9000; サーバー minio3:9000; サーバー minio4:9000; } アップストリームコンソール{ ip_ハッシュ; サーバー minio1:9001; サーバー minio2:9001; サーバー minio3:9001; サーバー minio4:9001; } サーバー{ 9000を聴く; 聞く [::]:9000; server_name ローカルホスト; # ヘッダーに特殊文字を許可する ignore_invalid_headers をオフ; # あらゆるサイズのファイルをアップロードできるようにします。 # ファイルサイズを特定の値に制限するには、1000m などの値を設定します クライアントの最大ボディサイズ 0; # バッファリングを無効にするには proxy_buffering をオフ; 位置 / { proxy_set_header ホスト $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; プロキシ接続タイムアウト 300; # デフォルトは HTTP/1 です。キープアライブは HTTP/1.1 でのみ有効です。 プロキシ_http_バージョン 1.1; proxy_set_header 接続 ""; chunked_transfer_encoding をオフ; proxy_pass http://minio; } } サーバー{ 9001を聴く; 聞く [::]:9001; server_name ローカルホスト; # ヘッダーに特殊文字を許可する ignore_invalid_headers をオフ; # あらゆるサイズのファイルをアップロードできるようにします。 # ファイルサイズを特定の値に制限するには、1000m などの値を設定します クライアントの最大ボディサイズ 0; # バッファリングを無効にするには proxy_buffering をオフ; 位置 / { proxy_set_header ホスト $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-NginX-Proxy が true である; # ハッシュする正しいIPを渡すために必要です real_ip_header X-リアルIP; プロキシ接続タイムアウト 300; # Websocketをサポートする プロキシ_http_バージョン 1.1; proxy_set_header アップグレード $http_upgrade; proxy_set_header 接続「アップグレード」; chunked_transfer_encoding をオフ; proxy_pass http://コンソール; } } } 走る。 docker-compser を起動 -d 次にコンソールに入り、単一ノードと同じように操作します。 3 minioを使用したJava SDKSDK で minio を使用するには、まず AccessKey と SecretKey を取得する必要があります。 コンソールで生成します。 プロジェクトの pom ファイルが導入されます。 <依存関係> <groupId>io.minio</groupId> <artifactId>ミニオ</artifactId> <バージョン>8.3.0</バージョン> </依存関係> アップロード、ダウンロード、削除インターフェースを書き込みます。 パッケージ com.test.minio; javax.servlet.http.HttpServletResponse をインポートします。 java.io.InputStream をインポートします。 /** * ストレージファイル * * @著者 江玉瑠 */ パブリックインターフェースFileService{ /** * ファイルをアップロード * * @param 入力ストリーム 入力ストリーム * @param fdsFileName fdsFileName * @param 画像 画像 * @UUIDを返す */ 文字列アップロード(InputStream inputStream、文字列 fdsFileName、boolean img); /** * ファイルをダウンロード * * @param fdsFileName fds内のファイル名 * @param fileName 再割り当てされたファイル名 * @param response レスポンス */ void ダウンロード(String fdsFileName、String fileName、HttpServletResponse 応答); /** * 消去* * @param fdsFileName fdsFileName */ void 削除(文字列 fdsFileName); } 実装クラスを記述します。 パッケージ com.test.minio.impl; com.test.minio.FileService をインポートします。 io.minio.* をインポートします。 lombok.extern.slf4j.Slf4j をインポートします。 org.apache.commons.io.IOUtils をインポートします。 org.springframework.beans.factory.annotation.Autowired をインポートします。 org.springframework.beans.factory.annotation.Value をインポートします。 org.springframework.stereotype.Service をインポートします。 javax.servlet.http.HttpServletResponse をインポートします。 java.io.IOException をインポートします。 java.io.InputStream をインポートします。 java.net.URLEncoder をインポートします。 java.util.UUID をインポートします。 /** * @著者 jaingyulu */ 翻訳者 @サービス("ミニオ") パブリッククラス MinioFileServiceImpl は FileService を実装します { @Value("{$minio.endpoint}") プライベート文字列エンドポイント。 @Value("{$minio.accessKeyId}") プライベート文字列 accessKeyId; @Value("{$minio.accessKeySecret}") プライベート文字列 accessKeySecret; @Value("{$minio.bucketName}") プライベート文字列bucketName; @オーバーライド パブリック文字列アップロード(InputStream inputStream、文字列 fdsFileName、ブール値 img) { 試す { ミニオクライアント ミニオクライアント = MinioClient.ビルダー() .endpoint(エンドポイント) .credentials(アクセスキーID、アクセスキーシークレット) 。建てる(); ブール値が見つかりました = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); (見つかった場合){ log.info("バケットはすでに存在します。"); } それ以外 { minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); } もし(!img){ minioClient.putObject() 関数は、 PutObjectArgs.builder() .bucket(バケット名) .object(fdsファイル名) .stream(入力ストリーム、入力ストリーム.available()、-1) 。建てる()); } それ以外 { minioClient.putObject() 関数は、 PutObjectArgs.builder() .bucket(バケット名) .object(fdsファイル名) .stream(入力ストリーム、入力ストリーム.available()、-1) .contentType("画像/jpg") 。建てる()); } 入力ストリームを閉じます。 } キャッチ (例外 e) { e.printStackTrace(); } UUID.randomUUID().toString() を返します。 } @オーバーライド パブリック void ダウンロード (String fdsFileName、String fileName、HttpServletResponse 応答) { 入力ストリーム in = null; 試す { ミニオクライアント ミニオクライアント = MinioClient.ビルダー() .endpoint(エンドポイント) .credentials(アクセスキーID、アクセスキーシークレット) 。建てる(); StatObjectResponse オブジェクトStat = minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(fdsFileName).build()); レスポンスにContentTypeを設定します。 //レスポンス。ContentType を設定します(MediaType.APPLICATION_OCTET_STREAM_VALUE); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fdsFileName).build()); IOUtils.copy(in, response.getOutputStream()); } キャッチ (例外 e) { ログエラー(e.getMessage()); ついに if (in != null) { 試す { in.close(); } キャッチ (IOException e) { ログエラー(e.getMessage()); } } } } @オーバーライド パブリック void delete(String fdsFileName) { 試す { ミニオクライアント ミニオクライアント = MinioClient.ビルダー() .endpoint(エンドポイント) .credentials(アクセスキーID、アクセスキーシークレット) 。建てる(); minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(fdsFileName).build()); } キャッチ (例外 e) { e.printStackTrace(); } } } 以上で minio のファイル操作の基本機能は完了です。その他の機能については公式ドキュメントを参照してください。 SDK の 8.3.0 バージョンは、7.x と比べて大幅に変更されています。 これで、docker で minio をビルドし、java sdk を使用する方法についての記事は終了です。docker で minio をビルドする方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: インターネットウェブデザインにおけるバイオニックデザインの簡単な紹介
目次導入ログ分類パラメータファイルエラーログファイル完全なログファイルスロークエリログバイナリログフ...
背景:最近、同社のプロジェクトは同時実行のプレッシャーに耐えられないようなので、最適化が差し迫ってい...
1. 物件リストコードをコピーコードは次のとおりです。色: #999999 テキスト色フォントファミ...
知らせ! ! !この状況は、実際には仮想マシンのインストール中に回避できます。次回仮想マシンをテスト...
データ ボリューム コンテナーは、データ ボリュームをマウントするために特別に使用されるコンテナーで...
この記事では、参考までに、カルーセル効果の具体的なコードをJavaScript+CSSを使用して実装...
目次1. ハッシュテーブルの原理2. ハッシュテーブルの概念3. ハッシュ競合問題1. チェーンアド...
1. はじめにあなたのウェブサイトはまだインターネット上に公開されたままですか?ここでは、HTTPS...
目次背景表領域の断片化とは何ですか?表領域の断片化を確認する方法表スペースの断片化問題を解決する方法...
この記事では、シンプルなカルーセルを実装するためのJavaScriptの具体的なコードを参考までに紹...
キーコードは次のとおりです。コードをコピーコードは次のとおりです。 html{高さ:100%; }コ...
コードをコピーコードは次のとおりです。 html、アドレス、引用ブロック、本文、dd、div、 dl...
Web プロジェクトがどんどん大きくなると、CSS は天文学的な大きさと複雑さを増します。この問題を...
目次1. テーブルを作成する1.1. テーブルを作成するための基本構文1.1.1. シンプルなテーブ...
目次序文1. 従来のVueコンポーネント1. メインコンポーネントコード: 2. 使用方法3. 成果...