官方文檔地址: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 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)
圖形化操作