96编辑器旗下产品
找图
终身
ID:0
到期时间:永久
退出登录
您的位置:首页 > 百科管理 > 详情

minio 图片压缩-【Minio】基于AWS S3协议搭建个人云存储服务

原创:找图网 2023-04-14 03:00:57
  • minio原理和使用

  • Minio 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

    Minio是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

    单主机单硬盘模式

    单主机多硬盘模式

    多主机多硬盘分布式

    Minio使用纠删码erasure code和校验和checksum。 即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据。

    校验和

    保护数据免受硬件故障和无声数据损坏

    纠删码

    纠删码是一种恢复丢失和损坏数据的数学算法,目前,纠删码技术在分布式存储系统中的应用主要有三类,阵列纠删码(Array Code: RAID5、RAID6等)、RS(Reed-Solomon)里德-所罗门类纠删码和LDPC(LowDensity Parity Check Code)低密度奇偶校验纠删码。Erasure Code是一种编码技术,它可以将n份原始数据,增加m份数据,并能通过n+m份中的任意n份数据,还原为原始数据。即如果有任意小于等于m份的数据失效,仍然能通过剩下的数据还原出来。

    Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。 这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),仍可以从剩下的盘中的数据进行恢复。

    RS code编码数据恢复原理

    RS编码以word为编码和解码单位,大的数据块拆分到字长为w(取值一般为8或者16位)的word,然后对word进行编解码。 数据块的编码原理与word编码原理相同,后文中以word为例说明,变量Di, Ci将代表一个word。

    把输入数据视为向量D=(D1,D2,..., Dn), 编码后数据视为向量(D1, D2,..., Dn, C1, C2,.., Cm),RS编码可视为如下(图1)所示矩阵运算。

    图1最左边是编码矩阵(或称为生成矩阵、分布矩阵,Distribution Matrix),编码矩阵需要满足任意n*n子矩阵可逆。为方便数据存储,编码矩阵上部是单位阵(n行n列),下部是m行n列矩阵。下部矩阵可以选择范德蒙德矩阵或柯西矩阵。

    RS最多能容忍m个数据块被删除。 数据恢复的过程如下:

    (1)假设D1、D4、C2丢失,从编码矩阵中删掉丢失的数据块/编码块对应的行。(图2、3)

    (2)由于B' 是可逆的,记B'的逆矩阵为 (B'^-1),则B' * (B'^-1) = I 单位矩阵。两边左乘B' 逆矩阵。 (图4、5)

    (3)得到如下原始数据D的计算公式 。

    (4)对D重新编码,可得到丢失的编码

  • MinIO 快速入门之一 ―― MinIO 简介

  • MinIO 官网

    MinIO 官方GitHub

    MinIO 官方文档

    关于对象存储,我们可以看下 阿里云OSS 的解释。

    对象存储最大的优势就在于它可以存储大容量的非结构化数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。对于大多数的企业来说,这可以说是最为理想的存储媒介了。

    对于业务已在公有云上的企业来说,使用公有云提供的 OSS 服务,可以很好的节省存储的成本,且一般都提供易接入的 SDK,以阿里云的OSS 服务为例,在存储介质的上层封装可标注的 RESTful API 接口,使用起来十分方便。

    但是对于一些没有选择业务上云或者想要下云的企业来说,要使用公有云的 OSS,在公网带宽方面就需要有一定的投入,毕竟需要通过公网传输,带宽太小,传输速度就会慢,且在传输过程中数据的安全性和完整性也有损失的风险,走专线的费用又十分昂贵,不实在。

    这种情况下,MinIO 就是一个不错的选择,麻雀虽小,五脏俱全,企业可以以此快速构建自己内部的对象存储服务。

    Minio 是个基于 Golang 编写的开源对象存储套件,基于Apache License v2.0开源协议,虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口。可以很简单的和其他应用结合使用,例如 NodeJS、Redis、MySQL等。

    如下图,MinIO 的应用场景除了可以作为私有云的对象存储服务来使用,也可以作为云对象存储的网关层,无缝对接 Amazon S3 或者 MicroSoft Azure 。

    Minio 使用纠删码 erasure code 和校验和 checksum 。 即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据。

    保护数据免受硬件故障和无声数据损坏

    纠删码是一种恢复丢失和损坏数据的数学算法,目前,纠删码技术在分布式存储系统中的应用主要有三类,阵列纠删码(Array Code: RAID5、RAID6等)、RS(Reed-Solomon)里德-所罗门类纠删码和LDPC(LowDensity Parity Check Code)低密度奇偶校验纠删码。Erasure Code是一种编码技术,它可以将n份原始数据,增加m份数据,并能通过n+m份中的任意n份数据,还原为原始数据。即如果有任意小于等于m份的数据失效,仍然能通过剩下的数据还原出来。

    Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。 这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),仍可以从剩下的盘中的数据进行恢复。

    RS编码以word为编码和解码单位,大的数据块拆分到字长为w(取值一般为8或者16位)的word,然后对word进行编解码。 数据块的编码原理与word编码原理相同,后文中以word为例说明,变量Di, Ci将代表一个word。

    把输入数据视为向量D=(D1,D2,..., Dn), 编码后数据视为向量(D1, D2,..., Dn, C1, C2,.., Cm),RS编码可视为如下(图1)所示矩阵运算。

    图1最左边是编码矩阵(或称为生成矩阵、分布矩阵,Distribution Matrix),编码矩阵需要满足任意n*n子矩阵可逆。为方便数据存储,编码矩阵上部是单位阵(n行n列),下部是m行n列矩阵。下部矩阵可以选择范德蒙德矩阵或柯西矩阵。

    RS最多能容忍m个数据块被删除。 数据恢复的过程如下:

    (1)假设D1、D4、C2丢失,从编码矩阵中删掉丢失的数据块/编码块对应的行。(图2、3)

    (2)由于B' 是可逆的,记B'的逆矩阵为 (B'^-1),则B' * (B'^-1) = I 单位矩阵。两边左乘B' 逆矩阵。 (图4、5)

    (3)得到如下原始数据D的计算公式 。

    (4)对D重新编码,可得到丢失的编码

  • 【Minio】基于AWS S3协议搭建个人云存储服务

  • 在2007年,GlusterFS演变为大型分布式存储方案后,任何配备合适硬件的公司,单位都可以利用个做分布式的流媒体,数据分析。在2011年,Red Hat收购了GlusterFS.

    Minio是GlusterFS创始人之一Anand Babu Periasamy发布新的开源项目。Minio兼容Amason的S3分布式对象存储项目,采用Golang实现,客户端支持Java,Python,Javacript, Golang语言。

    Minio 提供对象存储服务,兼容了 AWS S3 存储协议,用于非结构化的数据存。非结构化对象,比如图像,音、视频,日志文件,备份镜像…等等管理不方便,不定长,大小变化大、类型多,云端的访问复杂,minio就是来解决这种场景的。非结构化的文件从数KB到5TB都能很好的支持。开源并且用 Go 语言开发,有web操作界面,我们可以用它来搭建兼容S3协议的存储云服务。

    Minio可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作在Windows,Linux, OS X和FreeBSD上。配置简单,基本是复制可执行程序,单行命令可以运行起来。

    官网:

    那么,如何自己搭建一个私有的S3存储云服务呢?

    官方的话是推荐用Docker来搞,我们先用普通的二进制文件来直接解决了!

    ######################################################################################

    # mkdir /data/aws_s3

    # wget

    # mv  minio /usr/local/bin/

    #  chmod  755  /usr/local/bin/minio

    # minio server  /data/aws_s3

    #############################################################

    Created minio configuration file successfully at /root/.minio

    Endpoint:

    http://10.5.10.89:9000

    http://127.0.0.1:9000

    http://172.17.0.1:9000

    AccessKey: U3XLU4IMXY3IDKHU268F

    SecretKey: /6NCL6HGacviaCgRqr2qLbVOjhkkJdRpV7wz0JJD

    Region:    us-east-1

    SQS ARNs:

    Browser Access:

    http://10.5.10.89:9000

    http://127.0.0.1:9000

    http://172.17.0.1:9000

    Command-line Access:

    ################################################################

    $ mc config host add myminio

    http://10.5.10.89:9000

    U3XLU4IMXY3IDKHU268F /6NCL6HGacviaCgRqr2qLbVOjhkkJdRpV7wz0JJD

    Object API (Amazon S3 compatible):

    Go:

    Java:

    Python:

    JavaScript:

    Drive Capacity: 8.3 GiB Free, 9.1 GiB Total

    ##############################################################

    我们就成功启动了minio的s3服务,默认端口9000,可以通过网页访问:

    http://10.5.10.89:9000

    http://127.0.0.1:9000

    http://172.17.0.1:9000

    注意 :第一次打开时候需要填写AccessKey和SecretKey才能进入,我们上面启动服务的时候,已经看到屏幕有输出:

    AccessKey: U3XLU4IMXY3IDKHU268F

    SecretKey:6NCL6HGacviaCgRqr2qLbVOjhkkJdRpV7wz0JJD

    把这两个Key填入,就能顺利进入,进入后展开页面如下:

    这就是我们的S3云存储的管理页面了,看着是不是和七牛什么的提供云存储的产品页面挺像的,大家都是基于S3协议开发的!

    上传个文件试试:

    点击右下角的红色小加号按钮,弹出的菜单选择”create bucket”则会创建一个桶,输入名字”test”

    点击刚才那个红色小加号按钮,这次选择”Upload file”上传文件,给这个桶上传了一个叫的文本文档

    此时页面如下:

    至此我们可以看到文件已经上传,要访问这个文件,可以点击文件右侧的三个点的按钮,选择分享就可以得到一个外链,在浏览器中访问这个外链就可以直接访问文件。

    那么文件到底被存到哪里去了呢,我们启动命令中其实指定了工作路径/data/aws_s3/,所以到服务器这个目录下看看:

    # ls /data/aws_s3/

    test

    # ls /data/aws_s3/test/

    桶名称test是一个目录,其下就有上传的文件。

    如果想指定ip和端口,可以这样写:

    # minio server /data/aws_s3 --address=0.0.0.0:9000

    如果想让服务在后台运行:

    # nohup minio server /data/aws_s3   --address=0.0.0.0:443 &

    [1] 19882

    // nohup: 忽略输入并把输出追加到启动命令的当前目录下的 ""文件

    minio可以用来搭建分布式存储系统 GlusterFS,这样就成了真正的云存储了,有时间再研究下把它从现在的单机测试,变成一朵存储云!

    minio官网:

    minio官方文档:

    minio github主页:

    最新文章 更多
    最新素材 更多
    公司介绍 网站地图 图片资讯
    Copyright © 2010-2022 山东找图网络科技有限公司  鲁ICP备18007836号-3  邮箱:15653358549@163.com