重庆制作网站公司,国内美食网站欣赏,wordpress增加分类与标签,目前最好的引流方法1.什么是MinIO#xff1f;
MinIO 是一个非常轻量的服务,可以很简单的和其他应用的结合使用#xff0c;它兼容亚马逊 S3 云存储服务接口#xff0c;非常适合于存储大容量非结构化的数据#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。 官网#xff1…1.什么是MinIO
MinIO 是一个非常轻量的服务,可以很简单的和其他应用的结合使用它兼容亚马逊 S3 云存储服务接口非常适合于存储大容量非结构化的数据例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。 官网https://min.io中文https://www.minio.org.cn/http://docs.minio.org.cn/docs/MinIO集群采用去中心化共享架构每个结点是对等关系通过Nginx可对MinIO进行负载均衡访问。 Minio使用纠删码技术来保护数据它是一种恢复丢失和损坏数据的数学算法它将数据分块冗余的分散存储在各各节点的磁盘上所有的可用磁盘组成一个集合上图由8块硬盘组成一个集合当上传一个文件时会通过纠删码算法计算对文件进行分块存储除了将文件本身分成4个数据块还会生成4个校验块数据块和校验块会分散的存储在这8块硬盘上。 使用纠删码的好处是即便丢失一半数量N/2的硬盘仍然可以恢复数据。 比如上边集合中有4个以内的硬盘损害仍可保证数据恢复不影响上传和下载如果多于一半的硬盘坏了则无法恢复。
2.数据恢复演示
下载MinIO下载地址https://dl.min.io/server/minio/release/下边在本机演示MinIO恢复数据的过程在本地创建4个目录表示4个硬盘。 CMD进入有minio.exe的目录运行下边的命令
minio.exe server D:\develop\minio_data\data1 D:\develop\minio_data\data2 D:\develop\minio_data\data3 D:\develop\minio_data\data4启动结果如下
WARNING: MINIO_ACCESS_KEY and MINIO_SECRET_KEY are deprecated.Please use MINIO_ROOT_USER and MINIO_ROOT_PASSWORD
Formatting 1st pool, 1 set(s), 4 drives per set.
WARNING: Host local has more than 2 drives of set. A host failure will result in data becoming unavailable.
WARNING: Detected default credentials minioadmin:minioadmin, we recommend that you change these values with MINIO_ROOT_USER and MINIO_ROOT_PASSWORD environment variables
老版本使用的MINIO_ACCESS_KEY 和 MINIO_SECRET_KEY不推荐使用推荐使用MINIO_ROOT_USER 和MINIO_ROOT_PASSWORD设置账号和密码。pool即minio节点组成的池子当前有一个pool和4个硬盘组成的set集合因为集合是4个硬盘大于2的硬盘损坏数据将无法恢复。账号和密码默认为minioadmin、minioadmin可以在环境变量中设置通过’MINIO_ROOT_USER’ and ‘MINIO_ROOT_PASSWORD’ 进行设置。
下边输入http://localhost:9000进行登录。 6. 账号密码 minioadmin/minioadmin 7. 创建桶它相当于存储文件的目录可以创建若干的桶 8. 输入bucket的名称点击“CreateBucket”创建成功 9. 点击“upload”上传文件。 10.下边去四个目录观察文件的存储情况 。 11.上传的文件存储在了这四个目录上删除四个目录中的两个以内的目录上传的文件还可以预览如删除三个目录则不会恢复上传的文件损坏不可预览此时会报错
We encountered an internal error, please try again.
(Read failed. Insufficient number of drives online)在线驱动器数量不足。3.SpringBoot整合MinIO
MinIO提供多个语言版本SDK的支持下边找到java版本的文档 地址https://docs.min.io/docs/java-client-quickstart-guide.html 最低需求Java 1.8或更高版本
dependencygroupIdio.minio/groupIdartifactIdminio/artifactIdversion8.4.3/version
/dependency
dependencygroupIdcom.squareup.okhttp3/groupIdartifactIdokhttp/artifactIdversion4.8.1/version
/dependency
需要三个参数才能连接到minio服务。
Endpoint 对象存储服务的URLAccess Key Access key就像用户ID可以唯一标识你的账户。Secret Key Secret key是你账户的密码。
上传文件测试
package com.xuecheng.media;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;/*** description 测试MinIO* author xuewen* date 2023/2/12 21:24* version 1.0*/
public class MinIOTest {static MinioClient minioClient MinioClient.builder().endpoint(http://192.168.101.65:9000).credentials(minioadmin, minioadmin).build();//上传文件
public static void upload()throws IOException, NoSuchAlgorithmException, InvalidKeyException {try {boolean found minioClient.bucketExists(BucketExistsArgs.builder().bucket(testbucket).build());//检查testbucket桶是否创建没有创建自动创建if (!found) {minioClient.makeBucket(MakeBucketArgs.builder().bucket(testbucket).build());} else {System.out.println(Bucket testbucket already exists.);}//上传1.mp4minioClient.uploadObject(UploadObjectArgs.builder().bucket(testbucket).object(1.mp4).filename(D:\\develop\\upload\\1.mp4).build());//上传1.avi,上传到avi子目录minioClient.uploadObject(UploadObjectArgs.builder().bucket(testbucket).object(avi/1.avi).filename(D:\\develop\\upload\\1.avi).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();
}}
删除文件
//删除文件
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);}
查询/下载文件 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 streamIOUtils.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);}