Mino环境搭建

Minio环境搭建

1. 说明

1.1 简介

MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。

MinIO与传统的存储和其他的对象存储不同的是:它一开始就针对性能要求更高的私有云标准进行软件架构设计。因为MinIO一开始就只为对象存储而设计。所以他采用了更易用的方式进行设计,它能实现对象存储所需要的全部功能,在性能上也更加强劲,它不会为了更多的业务功能而妥协,失去MinIO的易用性、高效性。 这样的结果所带来的好处是:它能够更简单的实现局有弹性伸缩能力的原生对象存储服务。

MinIO在传统对象存储用例(例如辅助存储,灾难恢复和归档)方面表现出色。同时,它在机器学习、大数据、私有云、混合云等方面的存储技术上也独树一帜。当然,也不排除数据分析、高性能应用负载、原生云的支持。

2. Minio使用与环境搭建

2.1 Docker运行Minio

version: "3"
services:
    portainer:
        image: reg.ji.com/portainer/portainer:1.21.0
        restart: always
        ports:
            - 29000:9000
        volumes:
            - "/var/run/docker.sock:/var/run/docker.sock"
            - "$VOLUME_PATH/portainer/data:/data"

    minio:
        image: reg.ji.com/minio:2021-05-27
        hostname: minio
        volumes:
            - "$VOLUME_PATH/minio/data:/data"
            - "$VOLUME_PATH/minio/config:/root/.minio"
        expose:
            - "9000"
        ports:
            - 9000:9000
        environment:
            - MINIO_ROOT_USER=minio
            - MINIO_ROOT_PASSWORD=minio123
            - MINIO_NOTIFY_WEBHOOK_ENABLE=ON
            - MINIO_NOTIFY_WEBHOOK_ENDPOINT=http://localhost:8090/webhooks
            - MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE
            - MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
            #- MINIO_ROOT_USER_FILE=access_key
            #- MINIO_ROOT_PASSWORD_FILE=secret_key
            #- MINIO_KMS_SECRET_KEY_FILE=kms_master_key
            - MINIO_UPDATE_MINISIGN_PUBKEY=RWTx5Zr1tiHQLwG9keckT0c45M3AGeHD6IvimQHpyRywVWGbP1aVSGav
        command: server /data
        healthcheck:
          test: ["CMD", "curl", "-f", "http://minio:9000/minio/health/live"]
          interval: 30s
          timeout: 20s
          retries: 3

    minio_mc:
        image: reg.ji.com/minio_mc:2021-05-26
        depends_on:
            - minio
        entrypoint: >
            /bin/sh -c "
            /usr/bin/mc config host rm local;
            /usr/bin/mc config host add --quiet --api s3v4 local http://minio:9000 minio minio123;"

服务运行起来后可访问 http://localhost:9000,使用 用户:minio 密码:minio123 登录进行操作

2.2 Minio 存储桶通知

存储桶(Bucket)如果发生改变,比如上传对象和删除对象,可以使用存储桶事件通知机制进行监控,并通过以下方式发布出去:

Notification Targets
AMQP
MQTT
Elasticsearch
Redis
NATS
PostgreSQL
MySQL
Apache Kafka
Webhooks

以下列出Minio通过postgresql、webhooks进行通知的相关配置,其他信息可访问minio官网查看。

前提条件
  • 部署并运行Minio Server
  • 部署Minio Client
2.2.1 使用Postgresql 发布Minio事件

安装 PostgreSQL 数据库。为了演示,我们将"postgres"用户的密码设为password,并且创建了一个minio_events数据库来存储事件信息。

这个通知目标支持两种格式: namespace and access

如果使用的是_namespace_格式,MinIO将存储桶里的对象同步成数据库表中的行。每一行有两列:key和value。key是这个对象的存储桶名字加上对象名,value都是一个有关这个MinIO对象的JSON格式的事件数据。如果对象更新或者删除,表中相应的行也会相应的更新或者删除。

如果使用的是access,MinIO将将事件添加到表里,行有两列:event_time 和 event_data。event_time是事件在MinIO server里发生的时间,event_data是有关这个MinIO对象的JSON格式的事件数据。在这种格式下,不会有行会被删除或者修改。

下面的步骤展示的是如何在namespace格式下使用通知目标,_access_差不多,不再赘述,我相信你可以触类旁通,举一反三,不要让我失望哦。

第一步:确保确保至少满足第低要求

MinIO要求PostgresSQL9.5版本及以上。 MinIO用了PostgreSQL9.5引入的INSERT ON CONFLICT (aka UPSERT) 特性,以及9.4引入的 JSONB 数据类型。

第二步:集成PostgreSQL到MinIO

下面是一个PostgreSQL配置示例:

KEY:
notify_postgres[:name]  publish bucket notifications to Postgres databases

ARGS:
MINIO_NOTIFY_POSTGRES_ENABLE*              (on|off)             enable notify_postgres target, default is 'off'
MINIO_NOTIFY_POSTGRES_CONNECTION_STRING*   (string)             Postgres server connection-string e.g. "host=localhost port=5432 dbname=minio_events user=postgres password=password sslmode=disable"
MINIO_NOTIFY_POSTGRES_TABLE*               (string)             DB table name to store/update events, table is auto-created
MINIO_NOTIFY_POSTGRES_FORMAT*              (namespace*|access)  'namespace' reflects current bucket/object list and 'access' reflects a journal of object operations, defaults to 'namespace'
MINIO_NOTIFY_POSTGRES_QUEUE_DIR            (path)               staging dir for undelivered messages e.g. '/home/events'
MINIO_NOTIFY_POSTGRES_QUEUE_LIMIT          (number)             maximum limit for undelivered messages, defaults to '100000'
MINIO_NOTIFY_POSTGRES_COMMENT              (sentence)           optionally add a comment to this setting
MINIO_NOTIFY_POSTGRES_MAX_OPEN_CONNECTIONS (number)             maximum number of open connections to the database, defaults to '2'

注意一下,为了演示,咱们这把SSL禁掉了,但是为了安全起见,不建议在生产环境这么弄。

更新完配置文件后,重启MinIO Server让配置生效。如果一切顺利,MinIO Server会在启动时输出一行信息,类似 SQS ARNs: arn:minio:sqs:us-east-1:1:postgresql

和之前描述的一样,你也可以添加多个PostreSQL实例,只要ID不重复就行。

第三步:使用MinIO客户端启用bucket通知

我们现在可以在一个叫images的存储桶上开启事件通知,一旦上有文件上传到存储桶中,PostgreSQL中会insert一条新的记录或者一条已经存在的记录会被update,如果一个存在对象被删除,一条对应的记录也会从PostgreSQL表中删除。因此,PostgreSQL表中的行,对应的就是存储桶里的一个对象。

要配置这种存储桶通知,我们需要用到前面步骤中MinIO输出的ARN信息。更多有关ARN的资料,请参考这里

有了mc这个工具,这些配置信息很容易就能添加上。假设MinIO服务别名叫minio,可执行下列脚本:

//使用MC Client连接服务
mc config host add minio http://minio:9000
Enter Access Key:
Enter Secret Key:

mc admin config get minio/ notify_postgres

mc admin config set minio notify_postgres:1 connection_string="host=localhost port=5432 dbname=minio_events user=postgres password=password sslmode=disable" table="bucketevents" format="namespace"

//重启服务
mc admin service restart minio

//创建桶
mc mb minio/images

//开启桶通知
mc event add minio/images arn:minio:sqs:us-east-1:1:postgresql --events put --suffix .jpg
mc event add minio/images arn:minio:sqs:us-east-1:1:postgresql --events put --suffix .bmp

//查看桶开启的通知
mc event list minio/images
第四步:验证PostgreSQL

打开一个新的terminal终端并上传一张JPEG图片到images 存储桶。

mc cp myphoto.jpg minio/images

打开一个PostgreSQL终端列出表 bucketevents 中所有的记录。

$ psql -h 127.0.0.1 -U postgres -d minio_events
minio_events=# select * from bucketevents;

key                 |                      value
--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 images/myphoto.jpg | {"Records": [{"s3": {"bucket": {"arn": "arn:aws:s3:::images", "name": "images", "ownerIdentity": {"principalId": "minio"}}, "object": {"key": "myphoto.jpg", "eTag": "1d97bf45ecb37f7a7b699418070df08f", "size": 56060, "sequencer": "147CE57C70B31931"}, "configurationId": "Config", "s3SchemaVersion": "1.0"}, "awsRegion": "us-east-1", "eventName": "s3:ObjectCreated:Put", "eventTime": "2016-10-12T21:18:20Z", "eventSource": "aws:s3", "eventVersion": "2.0", "userIdentity": {"principalId": "minio"}, "responseElements": {}, "requestParameters": {"sourceIPAddress": "[::1]:39706"}}]}
(1 row)
2.2.2 使用Webhook发布Minio事件

Webhooks 采用推的方式获取数据,而不是一直去拉取。

第一步:集成Webhook到MinIO

在docker-compose文件中,可以使用以下参数配置webhook。

KEY:
notify_webhook[:name]  publish bucket notifications to webhook endpoints

ARGS:
MINIO_NOTIFY_WEBHOOK_ENABLE*      (on|off)    enable notify_webhook target, default is 'off'
MINIO_NOTIFY_WEBHOOK_ENDPOINT*    (url)       webhook server endpoint e.g. http://localhost:8080/minio/events
MINIO_NOTIFY_WEBHOOK_AUTH_TOKEN   (string)    opaque string or JWT authorization token
MINIO_NOTIFY_WEBHOOK_QUEUE_DIR    (path)      staging dir for undelivered messages e.g. '/home/events'
MINIO_NOTIFY_WEBHOOK_QUEUE_LIMIT  (number)    maximum limit for undelivered messages, defaults to '100000'
MINIO_NOTIFY_WEBHOOK_COMMENT      (sentence)  optionally add a comment to this setting
MINIO_NOTIFY_WEBHOOK_CLIENT_CERT  (string)    client cert for Webhook mTLS auth
MINIO_NOTIFY_WEBHOOK_CLIENT_KEY   (string)    client cert key for Webhook mTLS auth   

endpoint是监听webhook通知的服务。注意一下,在重启MinIO时,这个endpoint必须是启动并且可访问到

第二步:使用MinIO客户端启用bucket通知

我们现在可以在一个叫images的存储桶上开启事件通知,一旦上有文件上传到存储桶中,事件将被触发。在这里,ARN的值是arn:minio:sqs:us-east-1:1:webhook。服务配置完webhook,在log中可查看到ARN信息。

//使用MC Client连接服务
mc config host add minio http://minio:9000
Enter Access Key:
Enter Secret Key:

mc admin config get minio/ notify_webhook

mc admin config set minio notify_webhook:1 queue_limit="0"  endpoint="http://localhost:8090/webhooks" queue_dir=""

//重启服务
mc admin service restart minio

//创建桶
mc mb minio/images
mc mb minio/images-thumbnail

//开启桶通知
mc event add minio/images arn:minio:sqs:us-east-1:1:webhook --events put --suffix .jpg
mc event add minio/images arn:minio:sqs:us-east-1:1:webhook --events put --suffix .bmp

//查看桶开启的通知
mc event list minio/images

验证事件通知是否配置正确:

mc event list minio/images

你应该可以收到如下的响应:

arn:minio:sqs:us-east-1:1:webhook   s3:ObjectCreated:*   Filter: suffix=".jpg"
第三步:采用Thumbnailer进行验证

我们使用 Thumbnailer 来监听MinIO通知。如果有文件上传于是MinIO服务,Thumnailer监听到该通知,生成一个缩略图并上传到MinIO服务。 安装Thumbnailer:

git clone https://github.com/minio/thumbnailer/npm install

然后打开Thumbnailer的config/webhook.json配置文件,添加有关MinIO server的配置,使用下面的方式启动Thumbnailer:

NODE_ENV=webhook node thumbnail-webhook.js

Thumbnailer运行在http://localhost:3000/。下一步,配置MinIO server,让其发送消息到这个URL(第一步提到的),并使用 mc 来设置存储桶通知(第二步提到的)。然后上传一张图片到MinIO server:

mc cp ~/images.jpg minio/images.../images.jpg:  8.31 KB / 8.31 KB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 100.00% 59.42 KB/s 0s

稍等片刻,然后使用mc ls检查存储桶的内容 -,你将看到有个缩略图出现了。

mc ls minio/images-thumbnail[2017-02-08 11:39:40 IST]   992B images-thumbnail.jpg

注意 如果你用的是 distributed MinIO,请修改所有节点的 ~/.minio/config.json

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值