1. 程式人生 > 其它 >MinIO儲存桶通知指南

MinIO儲存桶通知指南

官方文件地址:http://docs.minio.org.cn/docs/master/minio-bucket-notification-guide

儲存桶(Bucket)如果發生改變,比如上傳物件和刪除物件,可以使用儲存桶事件通知機制進行監控,並通過以下方式釋出出去:

官方文件中是通過配置檔案來實現的,也可以通過web頁面配置來實現


這裡以MySQL通知為例,其他的按照文件或圖形化介面配置操作就行了

使用MySQL釋出MinIO事件

這個通知目標支援兩種格式: namespace and access。

如果使用的是 namespace 格式,MinIO將儲存桶裡的物件同步成資料庫表中的行。每一行有兩列:key_name和value。key_name是這個物件的儲存桶名字加上物件名,value都是一個有關這個MinIO物件的JSON格式的事件資料。如果物件更新或者刪除,表中相應的行也會相應的更新或者刪除。

如果使用的是access,MinIO將將事件新增到表裡,行有兩列:event_time 和 event_data。event_time是事件在MinIO server裡發生的時間,event_data是有關這個MinIO物件的JSON格式的事件資料。在這種格式下,不會有行會被刪除或者修改。

下面的步驟展示的是如何在namespace格式下使用通知目標,_access_差不多,不再贅述。

第一步:確保確保至少滿足第低要求

MinIO要求MySQL 版本 5.7.8及以上,MinIO使用了MySQL5.7.8版本引入的 JSON 資料型別。我們使用的是MySQL5.7.32進行的測試。

第二步:整合MySQL到MinIO

MinIO Server的配置檔案預設路徑是 ~/.minio/config.json。MySQL配置資訊是在notify這個節點下的mysql節點下,在這裡為你的MySQL例項建立配置資訊鍵值對,key是你的MySQL的名稱,value是下面表格中列列的鍵值對集合。

下面是一個MySQL配置示例:

"mysql": {
        "1": {
                "enable": true,
                "dsnString": "",
                "table": "minio_images",
                "host": "172.17.0.1",
                "port": "3306",
                "user": "root",
                "password": "password",
                "database": "miniodb"
        }
}

更新完配置檔案後,重啟MinIO Server讓配置生效。如果一切順利,MinIO Server會在啟動時輸出一行資訊,類似 SQS ARNs: arn:minio:sqs:us-east-1:1:mysql。

和之前描述的一樣,你也可以新增多個MySQL例項,只要ID不重複就行。

圖形化配置如下 (table表名看說明是會自動建立,但是儲存的時候提示需要填寫,那就手動填寫上後再儲存)


注意:填寫的表名是:minio_events,實際生成的表名是events.

重啟MinIO Server讓配置生效

第三步:使用MinIO客戶端啟用bucket通知

現在可以在一個叫images的儲存桶上開啟事件通知,一旦上有檔案上傳到儲存桶中,MySQL中會insert一條新的記錄或者一條已經存在的記錄會被update,如果一個存在物件被刪除,一條對應的記錄也會從MySQL表中刪除。因此,MySQL表中的行,對應的就是儲存桶裡的一個物件。

要配置這種儲存桶通知,我們需要用到前面步驟MinIO輸出的ARN資訊。更多有關ARN的資料,請參考這裡。

有了mc這個工具,這些配置資訊很容易就能新增上。假設咱們的MinIO服務別名叫myminio,可執行下列指令碼:

# Create bucket named `images` in myminio
mc mb myminio/images
# Add notification configuration on the `images` bucket using the MySQL ARN. The --suffix argument filters events.
mc event add myminio/images arn:minio:sqs:us-east-1:1:postgresql --suffix .jpg
# Print out the notification configuration on the `images` bucket.
mc event list myminio/images
arn:minio:sqs:us-east-1:1:postgresql s3:ObjectCreated:*,s3:ObjectRemoved:* Filter: suffix=”.jpg”

圖形化介面配置



第四步:驗證MySQL

開啟一個新的terminal終端並上傳一張JPEG圖片到images 儲存桶。

mc cp myphoto.jpg myminio/images

開啟一個MySQL終端列出表 minio_images 中所有的記錄。

$ mysql -h 172.17.0.1 -P 3306 -u root -p miniodb
mysql> select * from minio_images;
+--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| key_name           | value                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
+--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| images/myphoto.jpg | {"Records": [{"s3": {"bucket": {"arn": "arn:aws:s3:::images", "name": "images", "ownerIdentity": {"principalId": "minio"}}, "object": {"key": "myphoto.jpg", "eTag": "467886be95c8ecfd71a2900e3f461b4f", "size": 26, "sequencer": "14AC59476F809FD3"}, "configurationId": "Config", "s3SchemaVersion": "1.0"}, "awsRegion": "us-east-1", "eventName": "s3:ObjectCreated:Put", "eventTime": "2017-03-16T11:29:00Z", "eventSource": "aws:s3", "eventVersion": "2.0", "userIdentity": {"principalId": "minio"}, "responseElements": {"x-amz-request-id": "14AC59476F809FD3", "x-minio-origin-endpoint": "http://192.168.86.110:9000"}, "requestParameters": {"sourceIPAddress": "127.0.0.1:38260"}}]} |
+--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

圖形化操作