一个开源的高性能对象存储系统-MinIO

一个开源的高性能对象存储系统-MinIO

我们经常会遇到文件存储的场景,一般避免怎么运维成本,可能会选择成熟稳定且性价比高的产品,国内有很多OSS产品,比如:阿里、腾讯、七牛、青云等都有自己的对象存储产品,最终我选择了七牛,因为它0-10GB空间免费(我把我的图片还有我的所有静态网页都放在上面),而且提供的API也比较丰富,青云也有12个月30 GB免费政策,其他的就没看过,因为要钱嘛,我是能省则省。

其实在github也有多款热门的对象存储系统,如:FastDFSHDFSCeph等,这次也是无意见看到了基于Minio和Thumbor搭建独立图片服务这篇文章,所以也想着自己搭建一个类似于七牛云的私有对象存储空间,那么首先我们要先基本了解一下MinIOthumbor的用途:

  • MinIO,是与Amazon S3云存储服务API兼容的高性能对象存储系统
  • thumbor,是一个智能图像服务。它可以按需裁剪、调整大小和翻转图像

基于Docker搭建MinIO对象存储服务器

基于Docker来安装MinIO非常方便一句命令就OK了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@instance-p0a4erj8 ~]# docker run -p 19000:9000 minio/minio server /minio_data
Unable to find image 'minio/minio:latest' locally
latest: Pulling from minio/minio
89d9c30c1d48: Pull complete
4795054645d0: Pull complete
4f7991ccecfe: Pull complete
Digest: sha256:53c65fca691336b77b74180937d8d6f7845ef1afea0e0ae9780598835d7a5979
Status: Downloaded newer image for minio/minio:latest
Endpoint: http://172.17.0.5:9000 http://127.0.0.1:9000

Browser Access:
http://172.17.0.5:9000 http://127.0.0.1:9000

Object API (Amazon S3 compatible):
Go: https://docs.min.io/docs/golang-client-quickstart-guide
Java: https://docs.min.io/docs/java-client-quickstart-guide
Python: https://docs.min.io/docs/python-client-quickstart-guide
JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
.NET: https://docs.min.io/docs/dotnet-client-quickstart-guide
Detected default credentials 'minioadmin:minioadmin', please change the credentials immediately using 'MINIO_ACCESS_KEY' and 'MINIO_SECRET_KEY'

当然这不是后台运行方式,所以得加一个参数docker run -d -p 19000:9000 minio/minio server /minio_data,但是这时候是看不到日志的,只有通过docker logs [CONTAINER ID]来查看,我们先通过docker ps -a查看运行起的容器:

1
2
3
[root@instance-p0a4erj8 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9118cbd8c05d minio/minio "/usr/bin/docker-ent…" 29 seconds ago Up 27 seconds 0.0.0.0:19000->9000/tcp

docker logs 9118cbd8c05d即可看到MinIO启动时的日志:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@instance-p0a4erj8 ~]# docker logs 9118cbd8c05d
Endpoint: http://172.17.0.5:9000 http://127.0.0.1:9000

Browser Access:
http://172.17.0.5:9000 http://127.0.0.1:9000

Object API (Amazon S3 compatible):
Go: https://docs.min.io/docs/golang-client-quickstart-guide
Java: https://docs.min.io/docs/java-client-quickstart-guide
Python: https://docs.min.io/docs/python-client-quickstart-guide
JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
.NET: https://docs.min.io/docs/dotnet-client-quickstart-guide
Detected default credentials 'minioadmin:minioadmin', please change the credentials immediately using 'MINIO_ACCESS_KEY' and 'MINIO_SECRET_KEY'

我们打开浏览器访问我们刚才映射的端口19000,使用默认的用户名密码minioadmin:minioadmin来登录我们的MinIO Web文件系统.然上传一个文件:

我们可以复制图片链接到其他浏览器访问.

至此,我们单机版的的S3对象存储服务器就搭建好了,由于设备有限,集群版就不弄了,在此附上其他人的经验:

基于Docker搭建thumbor图片处理服务

跟上面的MinIO类似,直接启动docker即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@instance-p0a4erj8 ~]# docker run -d -p 1800:80 minimalcompact/thumbor
Unable to find image 'minimalcompact/thumbor:latest' locally
latest: Pulling from minimalcompact/thumbor
16ea0e8c8879: Pull complete
50024b0106d5: Pull complete
ff95660c6937: Pull complete
9c7d0e5c0bc2: Pull complete
29c4fb388fdf: Pull complete
02ced85d1576: Pull complete
dfe2cd30976f: Pull complete
d3ec517ed16e: Pull complete
ed6982ebc0cc: Pull complete
7a410d29bed3: Pull complete
1c062599a579: Pull complete
2b6e7f7d0ea8: Pull complete
c47dad1e5ead: Pull complete
1eea835ac597: Pull complete
77558b8bbf29: Pull complete
156cf949b8be: Pull complete
bb3b169ae09d: Pull complete
a296ec13d049: Pull complete
4c03d2a2c52d: Pull complete
Digest: sha256:f888ed733ad57414289a6e2072b8b210ee3a18af5206d60d34619ee265e6df80
Status: Downloaded newer image for minimalcompact/thumbor:latest
c062f3a72259ec0835214a4da11532823cb2257827bb80c008150a4fcafb45bb
[root@instance-p0a4erj8 ~]# docker logs c062f3a72259
---> Starting thumbor solo...

至此,我们的thumbor图片处理服务搭建好了,我们来试试它的各项功能吧.

thumbor图片处理

首先我们先看看原图

这样才能感受到thumbor给我们带来的变化。这里我们直接从thumbor官网教程可以知道,使用http://localhost:8888/unsafe/300x200/图片地址的方式访问就可以实现图片裁剪

使用http://localhost:8888/unsafe/-0x-0/图片地址可以实现图片翻转

其功能还是比较多,其他的功能请参照Getting Started

一般情况下,MinIO创建的bucket是私有的,只有通过分享链接的方式访问,但是thumbor无法直接访问MinIO分享的私有文件,会提示无法连接到服务,那么我们怎么才能访问呢?有两种方式:

  • bucket变更为public;
  • 配置thumborLOADER,在thumbor社区已经为我们提供了多种插件,如:thumbor_awsthumbor_hbasethumbor_mongodb等,由于MinIO首先了S3的API,所以需要thumbor_aws插件,并配置tc_aws.loaders.s3_loader
    不过今天我们还是用简单点的方式把–把bucket变更为public。这里我们要么下载一个MinIO Client,但是下载Windows客户端是真的慢啊,所以我选择了Docker方式:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    docker run -it --entrypoint=/bin/sh minio/mc
    / # mc config host ls
    gcs
    URL : https://storage.googleapis.com
    AccessKey : YOUR-ACCESS-KEY-HERE
    SecretKey : YOUR-SECRET-KEY-HERE
    API : S3v2
    Lookup : dns

    local
    URL : http://localhost:9000
    AccessKey :
    SecretKey :
    API :
    Lookup : auto

    play
    URL : https://play.min.io
    AccessKey : Q3AM3UQ867SPQQA43P2F
    SecretKey : zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG
    API : S3v4
    Lookup : auto

    s3
    URL : https://s3.amazonaws.com
    AccessKey : YOUR-ACCESS-KEY-HERE
    SecretKey : YOUR-SECRET-KEY-HERE
    API : S3v4
    Lookup : dns
    然后新增一个
    1
    2
    / # mc config host add local http://xxx.xx.xx.xx:9000 minioadmin minioadmin
    Added `local` successfully.
    这里我新建一个bucket:
    1
    2
    / # mc mb local/publicbucket
    Bucket created successfully `local/publicbucket`.
    把它变为public:
    1
    2
    / # mc policy set public local/publicbucket
    Access permission for `local/publicbucket` is set to `public`
    现在我上传一张图片,后即可直接访问。


小结

这次只是简单的采用Docker安装了thumborMinIO来实现类似于七牛云的图片存储、处理服务器。也只是大概了体验了它们强大的功能,为以后再项目中实践奠定基础。后面有时间,我会针对thumborMinIO进行伪集群部署(条件有限)。

You forgot to set the qrcode for Alipay. Please set it in _config.yml.
You forgot to set the qrcode for Wechat. Please set it in _config.yml.
You forgot to set the business and currency_code for Paypal. Please set it in _config.yml.
You forgot to set the url Patreon. Please set it in _config.yml.
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×