3.2.6 基于nginx实现loadbalancer
upstream minio { server 192.168.3.14:9001; server 192.168.3.14:9002; server 192.168.3.14:9003; server 192.168.3.14:9004; } upstream console { ip_hash; server 192.168.3.14:50001; server 192.168.3.14:50002; server 192.168.3.14:50003; server 192.168.3.14:50004; } server { listen 9000; listen [::]:9000; server_name localhost; # To allow special characters in headers ignore_invalid_headers off; # Allow any size file to be uploaded. # Set to a value such as 1000m; to restrict file size to a specific value client_max_body_size 0; # To disable buffering proxy_buffering off; location / { proxy_set_header Host $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_connect_timeout 300; # Default is HTTP/1, keepalive is only enabled in HTTP/1.1 proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_pass http://minio; } } server { listen 50000; listen [::]:50000; server_name localhost; # To allow special characters in headers ignore_invalid_headers off; # Allow any size file to be uploaded. # Set to a value such as 1000m; to restrict file size to a specific value client_max_body_size 0; # To disable buffering proxy_buffering off; location / { proxy_set_header Host $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; proxy_connect_timeout 300; # Default is HTTP/1, keepalive is only enabled in HTTP/1.1 proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_pass http://console; } }
4.Minio客户端使用
🏠 文档地址:https://min.io/docs/minio/linux/reference/minio-mc.html
MinIO Client (mc)为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)。
4.1 部署客户端mc
平台 | CPU架构 | URL |
GNU/Linux | 64-bit Intel | http://dl.minio.org.cn/client/mc/release/linux-amd64/mc |
# 1.下载mc文件 wget http://dl.minio.org.cn/client/mc/release/linux-amd64/mc # 2.打开权限 chmod +x mc # 3.查看帮助指令 ./mc --help # 4.将mc移动至环境变量使用 mv mc /usr/local/sbin/
平台 | CPU架构 | URL |
Microsoft Windows | 64-bit Intel | http://dl.minio.org.cn/client/mc/release/windows-amd64/ |
4.2 配置mc
mc 将所有的配置信息都存储在 ~/.mc/config.json
文件中
# 查询mc host配置 mc config host ls # 添加minio服务 mc config host add minio-server http://192.168.3.14:9000 admin 12345678 # 删除host mc config host remove minio-server
4.3 mc命令使用
命令 | 说明 |
ls | 列出文件和文件夹。 |
mb | 创建一个存储桶或一个文件夹。 |
cat | 显示文件和对象内容。 |
pipe | 将一个STDIN重定向到一个对象或者文件或者STDOUT。 |
share | 生成用于共享的URL。 |
cp | 拷贝文件和对象。 |
mirror | 给存储桶和文件夹做镜像。 |
find | 基于参数查找文件。 |
diff | 对两个文件夹或者存储桶比较差异。 |
rm | 删除文件和对象。 |
events | 管理对象通知。 |
watch | 监视文件和对象的事件。 |
policy | 管理访问策略。 |
config | 管理mc配置文件。 |
4.3.1 上传下载
# 查询minio服务上的所有buckets(文件和文件夹) mc ls minio-server # 下载文件 mc cp minio-server/tulingmall/fox/fox.jpg /tmp/ #删除文件 mc rm minio-server/tulingmall/fox/fox.jpg #上传文件 mc cp zookeeper.out minio-server/tulingmall/
4.3.2 Bucket管理
# 创建bucket mc mb minio-server/bucket01 # 删除bucket mc rb minio-server/bucket02 # bucket不为空,可以强制删除 慎用 mc rb --force minio-server/bucket01
# 查询bucket03磁盘使用情况 mc du minio-server/bucket03
4.4 mc admin使用
MinIO Client(mc)提供了“ admin”子命令来对您的MinIO部署执行管理任务。
service 服务重启并停止所有MinIO服务器 update 更新更新所有MinIO服务器 info 信息显示MinIO服务器信息 user 用户管理用户 group 小组管理小组 policy MinIO服务器中定义的策略管理策略 config 配置管理MinIO服务器配置 heal 修复MinIO服务器上的磁盘,存储桶和对象 profile 概要文件生成概要文件数据以进行调试 top 顶部提供MinIO的顶部统计信息 trace 跟踪显示MinIO服务器的http跟踪 console 控制台显示MinIO服务器的控制台日志 prometheus Prometheus管理Prometheus配置 kms kms执行KMS管理操作
4.4.1 用户管理
mc admin user --help # 新建用户 mc admin user add minio-server fox mc admin user add minio-server fox02 12345678 # 查看用户 mc admin user list minio-server # 禁用用户 mc admin user disable minio-server fox02 # 启用用户 mc admin user disable minio-server fox02 # 查看用户信息 mc admin user info minio-server fox # 删除用户 mc admin user remove minio-server fox02
4.4.2 策略管理
policy命令,用于添加,删除,列出策略,获取有关策略的信息并为MinIO服务器上的用户设置策略。
mc admin policy --help # 列出MinIO上的所有固定策略 mc admin policy list minio-server # 查看plicy信息 mc admin policy info minio-server readwrite
📍 添加新的策略:编写策略文件:vim /root/tulingmall.json
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::tulingmall" ] },{ "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::tulingmall/*" ] } ] }
将tulingmall.json添加到策略数据库:
# 添加新的策略 mc admin policy add minio-server tulingmall-admin /root/tulingmall.json mc admin policy list minio-server
mc admin user add minio-server fox03 12345678 # 设置用户的访问策略 mc admin policy set minio-server tulingmall-admin user=fox03
5.SDK-Minio Java Client使用
MinIO Java Client SDK提供简单的API来访问任何与Amazon S3兼容的对象存储服务。
🏠 官方demo: https://github.com/minio/minio-java
🏠 官方文档:https://min.io/docs/minio/linux/developers/java/minio-java.html
引入依赖:
<dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.3.0</version> </dependency> <dependency> <groupId>me.tongfei</groupId> <artifactId>progressbar</artifactId> <version>0.5.3</version> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.8.1</version> </dependency>
5.1 文件上传
import io.minio.BucketExistsArgs; import io.minio.MakeBucketArgs; import io.minio.MinioClient; import io.minio.UploadObjectArgs; import io.minio.errors.MinioException; import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; /** * @author 狐狸半面添 * @create 2023-02-05 17:06 */ public class FileUploadDemo { public static void main(String[] args) throws IOException, NoSuchAlgorithmException, InvalidKeyException { try { // Create a minioClient with the MinIO server playground, its access key and secret key. MinioClient minioClient = MinioClient.builder() // 指定连接的ip和端口 .endpoint("http://192.168.65.129:9000") // 指定 访问秘钥(也称用户id) 和 私有秘钥(也称密码) .credentials("admin", "12345678") .build(); // 创建bucket String bucketName = "sangxin-fox"; boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); if (!exists) { // 不存在,创建bucket minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); } // 上传文件 minioClient.uploadObject( UploadObjectArgs.builder() .bucket(bucketName) // 指定上传到minio的保存文件名(MyC文件夹下,文件夹不存在时会自动创建) .object("MyC/C语言.pdf") // 指定需要上传的文件地址 .filename("D:\\SoftwareEngineering\\LearningFile\\C语言\\C语言.pdf") .build()); System.out.println("上传文件成功"); } catch (MinioException e) { System.out.println("Error occurred: " + e); System.out.println("HTTP trace: " + e.httpTrace()); } } }
5.2 文件下载
import io.minio.DownloadObjectArgs; import io.minio.MinioClient; /** * @author 狐狸半面添 * @create 2023-02-05 17:12 */ public class DownLoadDemo { public static void main(String[] args) { // Create a minioClient with the MinIO server playground, its access key and secret key. MinioClient minioClient = MinioClient.builder() // 指定连接的ip和端口 .endpoint("http://192.168.65.129:9000") // 指定 访问秘钥(也称用户id) 和 私有秘钥(也称密码) .credentials("admin", "12345678") .build(); // Download object given the bucket, object name and output file name try { minioClient.downloadObject( DownloadObjectArgs.builder() // 指定 bucket 存储桶 .bucket("sangxin-fox") // 指定 哪个文件 .object("MyC/C语言.pdf") // 指定存放位置与名称 .filename("D:\\c语言.pdf") .build()); System.out.println("下载文件成功"); } catch (Exception e) { e.printStackTrace(); } } }
5.3 删除文件
public static void delete(String bucket,String filepath)throws IOException, NoSuchAlgorithmException, InvalidKeyException { try { minioClient.removeObject( RemoveObjectArgs.builder().bucket(bucket).object(filepath).build()); System.out.println("删除成功"); } catch (MinioException e) { System.out.println("Error occurred: " + e); System.out.println("HTTP trace: " + e.httpTrace()); } } public static void main(String[] args)throws IOException, NoSuchAlgorithmException, InvalidKeyException { // upload(); delete("testbucket","1.mp4"); delete("testbucket","avi/1.avi"); }
5.4 查询文件
public static void getFile(String bucket,String filepath,String outFile)throws IOException, NoSuchAlgorithmException, InvalidKeyException { try { try (InputStream stream = minioClient.getObject( GetObjectArgs.builder() .bucket(bucket) .object(filepath) .build()); FileOutputStream fileOutputStream = new FileOutputStream(new File(outFile)); ) { // Read data from stream IOUtils.copy(stream,fileOutputStream); System.out.println("下载成功"); } } catch (MinioException e) { System.out.println("Error occurred: " + e); System.out.println("HTTP trace: " + e.httpTrace()); } } public static void main(String[] args)throws IOException, NoSuchAlgorithmException, InvalidKeyException { upload(); // delete("testbucket","1.mp4"); // delete("testbucket","avi/1.avi"); getFile("testbucket","avi/1.avi","D:\\develop\\minio_data\\1.avi"); }