使用 MinIO 和 PostgreSQL 简化数据事件

本教程将教您如何使用 Docker 和 Docker Compose 在 MinIO 和 PostgreSQL 之间设置和管理数据事件,也称为存储桶或对象事件。

您可能已经在利用 MinIO 事件与外部服务进行通信,现在您将通过使用 PostgreSQL 自动化和简化数据事件管理来增强数据处理能力。本文是为那些对 MinIO、PostgreSQL 和 Docker 有基本了解的人量身定制的,提供了一种实践方法来部署一个 MinIO 和 PostgreSQL 协同工作的内聚环境。

让我们深入了解如何使用 Docker Compose 部署这些服务,并探索将事件从 MinIO 发布到 PostreSQL 的实际应用。

先决条件:

  • 已安装 Docker 和 Docker Compose
  • MinIO、PostgreSQL 和 Docker 的基础知识
  • 使用 Docker 访问 MinIO UI 或命令行界面

MinIO 和集成服务

Kubernetes 原生 MinIO 与各种云原生技术无缝集成。本指南将利用 MinIO 对 Postgres、Redis、Kafka 等服务的原生支持。这些集成对于跨不同云环境的流畅数据管理至关重要。

我们将使用 Docker Compose 创建一个用户友好的配置驱动设置。 本教程提供了一条简单的途径来集成高级通知功能和微调 MinIO 设置,以满足项目的特定要求。

数据管理中的实际应用

正如所展示的那样,MinIO 与 PostgreSQL 的集成在各个领域开辟了大量的实际应用:

  • 数据分析和报告:自动捕获 MinIO 存储桶中的数据变化,并使用 PostgreSQL 进行分析和生成见解。

  • 备份和恢复:通过跟踪 MinIO 中存储的数据的每一次更改,实施强大的数据备份解决方案。

  • 事件驱动型应用:开发响应 MinIO 中数据更改的应用,例如在上传新数据时触发进程或发出警报。

  • 合规性和审核:维护数据访问和更改的日志,以符合法规标准。

此设置在实时数据跟踪至关重要的环境中特别有用,例如金融服务、医疗保健和电子商务。

部署 MinIO 和 PostgreSQL 服务

在 MinIO 中设置事件通知

MinIO 中的事件通知通过各种方法进行配置,包括使用用户界面、运行命令行实用程序以及使用各种编程语言和 SDK 编写脚本。让我们来看看每种方法的优缺点:

  • MinIO 控制台:此方法提供用户友好的图形界面,允许您直观地管理 Webhook 设置。

  • MinIO 的 mc 命令行工具:对于那些喜欢命令行界面的用户,MinIO 提供了 mc 命令工具,它允许对 webhook 进行详细且可编写脚本的配置。

  • 代码和脚本:借助 Bash 和 Python 脚本,此方法在设置 Webhook 时提供了高度的灵活性和自动化。

使用 Docker-Compose 部署:MinIO + Postgres

我们将首先设置 MinIO 及其环境以及 PostgreSQL 数据库。这涉及部署 Docker Compose 文件(如果尚未运行这些服务)。

我们将使用下面的 docker-compose YAML 文件,使用 Docker Compose 部署和启动 MinIO 和 PostgreSQL。

version: '3.8'
services:minio:container_name: minioimage: minio/minioenvironment:MINIO_ACCESS_KEY: minioMINIO_SECRET_KEY: minio123command: server /data --console-address ":9001"ports:- "9000:9000"- "9001:9001"volumes:- minio_data:/datapostgres:container_name: postgresimage: postgres:alpineenvironment:POSTGRES_DB: postgresPOSTGRES_USER: myuserPOSTGRES_PASSWORD: mypasswordports:- "5432:5432"volumes:- postgres_data:/var/lib/postgresql/datavolumes:minio_data:postgres_data:

此 docker-compose 结构概述了两个服务及其各自的配置变量,以及每个服务的持久卷和网络端口转发。

When configuring the PostgreSQL connection in MinIO, include the user and password in the connection string. For instance, your connection string in the MinIO configuration might look like: connection_string=“user=myuser password=mypassword host=postgres dbname=postgres port=5432 sslmode=disable”. This ensures that MinIO can successfully connect and authenticate with the PostgreSQL database.

在 PostgreSQL 中为存储桶事件创建表

在设置 Flask 应用程序来记录和处理来自 MinIO 存储桶的事件通知之前,我们首先需要在 PostgreSQL 中建立适当的数据库结构。这涉及创建一个专用表来记录这些事件。

在 PostgreSQL 中创建“事件”表

首先访问 PostgreSQL 容器。这可以通过执行“docker exec”命令来完成。接下来,您需要创建“事件”表。此表旨在存储有关每个事件的各种详细信息。在 PostgreSQL 容器中执行以下命令:

docker exec postgres psql -U myuser -d postgres -c "DROP TABLE IF EXISTS events; CREATE TABLE events (key TEXT PRIMARY KEY, value JSONB);"

创建表后,通过在命令提示符下键入 exit 退出 PostgreSQL 容器:

我们已准备好使用事件来记录和分析与 MinIO 存储桶的交互,以系统地跟踪存储桶中的文件上传、修改或删除等事件。

使用本地 PostgreSQL 服务器设置事件通知

若要在 MinIO 中使用在 Docker 环境中的主机上运行的 PostgreSQL 服务器设置事件通知,请在连接字符串中用作 host.docker.internal 主机。此特殊 DNS 名称解析为主机使用的内部 IP 地址。此设置在我之前的文章 From Docker to Localhost 中有详细介绍。

如果 postgres 在 localhost 上运行,则连接字符串将为:

connection_string="user=myuser password=mypassword host=host.docker.internal dbname=postgres port=5432 sslmode=disable"

这种方法对于确保 Docker 容器中的 MinIO 能够与主机上运行的 PostgreSQL 进行有效通信至关重要。

MinIO UI 和 mc :增强数据管理的双重方法

在云存储和数据管理领域,灵活性和控制力至关重要。MinIO 通过其双重方法满足了这一需求:直观的 MinIO 控制台 (UI) 和强大的 mc (MinIO 客户端) 命令行界面 (CLI)。本教程包含使用两者的说明,因此您可以选择这个多功能且全面的工具集的任何元素。

MinIO UI: 图形用户界面用户友好,非常适合那些喜欢可视化配置和管理方法的人。它允许您轻松浏览存储桶、设置事件通知和监控存储。UI 对于快速设置和更熟悉点击式环境的用户特别有益。

mc 命令行工具:另一方面, mc CLI 提供对 MinIO 实例的精细控制。它是用于脚本编写、自动化和详细配置的强大工具。该接口非常适合需要精确控制其存储、网络和数据管理任务的高级用户。CLI 有助于执行复杂的任务,例如批处理操作、自动备份脚本以及跨各种环境直接操作对象。

通过利用 UI 和 CLI,MinIO 用户可以享受两全其美的优势:易用性和高级控制,确保高效灵活的数据管理体验。

让我们看一下管理数据事件的不同方法。

使用 MinIO UI

在 MinIO 用户界面中配置 PostgreSQL:

打开浏览器并转到“http://localhost:9001”。使用在安装过程中创建的 MinIO 凭据登录。导航到 MinIO 控制台中的事件通知设置,单击“添加事件目标”,然后选择“PostgreSQL”作为服务。

如下面的屏幕截图所示,为我们希望创建的存储桶事件输入标识符“minio-postgres-demo”,然后继续配置所需的参数。

如前所述,通过分配“连接字符串”,我们可以将 Postgres 容器设置为主机;同样,将“表”名称“事件”添加为目标的表名称。

设置 PostgreSQL 服务终结点的过程涉及使用环境变量或设置运行时配置设置。指定这些设置后,需要重新启动 MinIO 服务器才能生效。这是因为 MinIO 在启动时加载其配置,而在 UI 中所做的更改需要重新启动才能被系统识别和实现。

重新启动 MinIO 服务器:

请务必注意,仅在 UI 中配置设置不会自动触发 MinIO 服务的重启。因此,在完成 PostgreSQL 事件通知的 UI 配置后,应使用带有 docker exec minio 前缀的命令手动重新启动 MinIO 部署。此步骤可确保获取配置更改,并且事件通知开始按预期运行。

docker exec minio mc admin service restart

创建存储桶:

要在 PostgreSQL 中有效地使用 MinIO 中的事件通知,请先在 MinIO 部署中创建一个存储桶。在此存储桶中,您希望监控的所有事件都将发生。出于本指南的目的,我们将此存储桶命名为“test”。此名称应与事件通知配置中使用的命名一致,以确保功能正常。

订阅存储桶通知事件:

成功创建存储桶事件后,我们可以继续访问要为其订阅事件的存储桶。以下屏幕截图为名为“test”的存储桶订阅了“minio-postgres-demo”事件,该事件将针对我们的 PostgreSQL 部署。在这里,您可以指定任何前缀或后缀,也可以选择要订阅的事件类型。

在 MinIO UI 的下一个屏幕截图中,我们可以看到 “test” 存储桶已成功订阅我们之前创建的 “event”。

使用 mc 命令行实用程序

使用 mc 的以 CLI 为中心的方法提供了一种强大而有效的方法来将 MinIO 与 PostgreSQL 集成,从而增强了云存储操作中的整体数据工作流和管理。对于那些喜欢将自动化/脚本和手动控制相结合来管理云存储和数据流程的人来说,这特别有益。

部署上述 docker-compose.yaml 后,继续使用 MinIO 客户端 mc 命令行实用工具。此设置涉及在 MinIO 中创建别名、配置 PostgreSQL 终端节点以及设置存储桶通知。

我们将在“minio”容器的交互式终端内工作,我们可以通过运行单个命令来生成该容器:

docker exec -it minio /bin/sh

从这个 shell 中运行 mc 命令的原因是 Docker minio/minio 镜像已经安装了 mc 并准备就绪。

配置 MinIO 以从 MinIO 容器内直接向 PostgreSQL 数据库发送事件通知

进入容器后,我们可以访问 mc 实用程序,从而可以继续执行配置 MinIO 以将事件直接发送到 PostgreSQL 的步骤。

为您的 MinIO 实例设置别名。这简化了将来的命令:

mc alias set myminio http://localhost:9000 minio minio123

创建“test”存储桶以监控:

mc mb myminio/test

配置 MinIO 实例以连接到 PostgreSQL 数据库以获取事件通知:

mc admin config set myminio notify_postgres:minio-postgres-demo connection_string="user=myuser password=mypassword host=postgres dbname=postgres port=5432 sslmode=disable" table="events" format="namespace"

重新启动 MinIO 服务以应用新配置:

mc admin service restart myminio

为特定存储桶操作(如 PUT、GET 和 DELETE)设置事件通知:

mc event add myminio/test arn:minio:sqs::minio-postgres-demo:postgresql --event put,get,delete

有关更详细的说明和信息,您可以参考 MinIO 文档中的存储桶通知和监控存储桶和对象事件。

验证设置

在 MinIO 中设置事件通知并在 PostgreSQL 中创建必要的“事件”表后,验证一切是否正常运行至关重要,例如,每当指定存储桶上有操作(如 PUT、GET、DELETE)时,MinIO 是否正确地将事件数据发送到 PostgreSQL。

让我们确认事件数据是否按预期记录。

首先,创建一个应触发事件通知的方案。例如,将文件上传到您为通知设置的 MinIO 存储桶。此操作应生成一个事件,该事件将发送到 PostgreSQL 数据库。

创建“sample.txt”文件并将其复制到“myminio/test”存储桶:

echo "Sample Content" > sample.txt
mc cp sample.txt myminio/test/

使用“exit”退出“docker exec”交互式 shell:

exit

使用“docker exec postgres”连接到 PostgreSQL 容器,以使用 psql 查询 events 表:

docker exec postgres psql -U myuser -d postgres -c "SELECT * FROM events;"

此 SQL 命令将显示“事件”表的内容。查找与文件上传事件对应的最近条目。输出应显示一行,其中包含有关在 MinIO 中触发的事件的详细信息。检查“test/sample.txt”、“eventName”、“bucket”、“object”、“key”等字段,以及确认事件已正确记录的任何其他相关详细信息。如果您看到预期的数据,则确认 MinIO 已成功向 PostgreSQL 发送事件通知。

如果您在 PostgreSQL 表中看不到预期的事件数据,请确保 MinIO 存储桶事件通知设置正确,PostgreSQL 表架构与 MinIO 发送的内容匹配,并且 MinIO 和 PostgreSQL 之间的网络连接正常运行。

通过执行这些步骤,您可以有效地验证 MinIO 与 PostgreSQL 的集成是否按预期工作。此过程对于确保数据事件管理准确可靠至关重要。

数据事件和数据管理

通过设置和利用 MinIO 和 PostgreSQL 集成,展示了 MinIO 在处理云存储和数据管理方面的稳健性和多功能性。无论是通过 MinIO UI 的图形易用性还是 CLI 提供的 mc 全面控制,MinIO 都能确保您的数据管理策略不仅高效,而且与 PostgreSQL 等现代数据库解决方案无缝集成。

当您继续探索 MinIO 的功能时,请记住,该系统的灵活性旨在满足广泛的用例和场景。对于那些希望更深入地研究技术细节或探索更高级配置的人来说,关于存储桶通知和监控存储桶和对象事件的 MinIO 文档是宝贵的资源。利用 MinIO 和 PostgreSQL 的强大功能来增强您的云存储解决方案和数据管理实践。

祝你好运,在您的项目中实施这些策略,请记住,MinIO的团队始终在这里支持您的数据事件管理之旅!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/242691.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】STL 算法 - 累加填充算法 ( 元素累加算法 - accumulate 函数 | 元素填充算法 - fill 函数 )

文章目录 一、元素累加算法 - accumulate 函数1、函数原型分析2、代码示例 二、元素填充算法 - fill 函数1、函数原型分析2、代码示例 一、元素累加算法 - accumulate 函数 1、函数原型分析 在 C 语言 的 标准模板库 ( STL , STL Standard Template Library ) 中 , 提供了 accu…

2024 年最佳 PDF 编辑器:我的首选清单

在我们日益多设备、跨平台的世界中,PDF 可能比以往任何时候都更有用。有大量免费的 PDF 阅读器可让您审阅和评论这些文件,但不可避免地,您需要具有编辑 PDF 的能力。这通常需要升级到高级 PDF 编辑器。 Adobe Acrobat 是最著名的&#xff0c…

20240119-子数组最小值之和

题目要求 给定一个整数数组 arr,求 min(b) 的总和,其中 b 的范围涵盖 arr 的每个(连续)子数组。由于答案可能很大,因此返回答案模数 Example 1: Input: arr [3,1,2,4] Output: 17 Explanation: Subarrays are [3]…

Unity3D学习之Unity基础——3D数学

文章目录 1. 前言2 Mathf和Math基础2.1 一般用于只计算一次的函数2.1.1 PI Π PI2.1.2 取绝对值 Abs2.1.3 向上取整 CeilToInt2.1.4 向下取整 FloorToInt2.1.5 钳制函数 Clamp2.1.6 获取最大值 Max2.1.7 获取最小值 Min2.1.8 一个数的n次幂 Pow2.1.9 四舍五入 RoundToInt2.1.10…

苹果Find My可查找添加32件物品,伦茨科技ST17H6x芯片加速产品赋能

苹果最近更新的支持文档证实,从 iOS 16 开始,"Find My"可查找添加物品从16件增加到32件,AirTag 和“查找”网络中的物品利用“查找”网络的强大功能来发挥作用,这个网络由数亿台加密的匿名 Apple 设备构成。“查找”网络…

【Unity】AB包下载

【Unity】AB包下载 1.使用插件打AB包 a.AB包分类 一般地,将预制体作为AB包资源,不仅需要对预制体本身进行归类,还要对其涉及的动画(AnimationClip)、动画状态机(AnimatorController)、以及所…

golang学习笔记——http.Handle和http.HandleFunc的区别与type func巧妙运用

文章目录 http.Handle和http.HandleFunc的区别http.Handle分析type func巧妙运用 http.HandleFunc分析总结参考资料 http.Handle和http.HandleFunc的区别 http.Handle和http.HandleFunc的区别体现了Go语言接口的巧妙运用 下面代码启动了一个 http 服务器,监听 808…

Android学习之路(22) 从模块化到组件化

从模块化到组件化 一、从模块化到组件化 Android 应用项目 , 都存在一个应用模块 ( Application Module ) , 在 build.gradle 构建脚本中 , 第一个插件配置 com.android.application , 表明 该 Module 编译打包后的输出是 APK 安装包 ; 该项目可以直接运行 ; plugins {id co…

基础+常用的数据结构

基础 java基础 JDK 和 JRE JDK,它是功能齐全的 Java SDK,是提供给开发者使用,能够创建和编译 Java 程序的开发套件。它包含了 JRE,同时还包含了编译 java 源码的编译器 javac 以及一些其他工具比如 javadoc(文档注释工具&#…

AI 的未来是开源的

想象一下,在未来,人工智能不会被锁在公司的金库里,而是由全球创新者社区一砖一瓦地在开放中构建的。协作,而不是竞争,推动进步,道德考虑与原始绩效同等重要。这不是科幻小说,而是人工智能发展核…

代码随想录 Leetcode1047. 删除字符串中的所有相邻重复项

题目&#xff1a; 代码(首刷自解 2024年1月21日&#xff09;&#xff1a; class Solution { public:string removeDuplicates(string s) {if (s.size() < 2) return s;stack<char> t;for (int i 0; i < s.size(); i) {if (t.empty()) t.push(s[i]);else {if (s[i…

广和通AI解决方案“智”赋室外机器人迈向新天地!

大模型趋势下&#xff0c;行业机器人将具备更完善的交互与自主能力&#xff0c;逐步迈向AI 2.0时代&#xff0c;成为人工智能技术全面爆发的重要基础。随着行业智能化&#xff0c;更多机器人应用将从“室内”走向“室外”&#xff0c;承担更多高风险、高智能工作。复杂的室外环…

使用easyexcel 导出多级表头demo

先看效果&#xff1a; 1、引入maven依赖 <!--EasyExcel --> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.1</version> </dependency> 2、实体类 package com.…

【算法练习Day50】下一个更大元素II接雨水

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 下一个更大元素II接雨水单调…

应用层—HTTPS详解(对称加密、非对称加密、密钥……)

文章目录 HTTPS什么是 HTTPSHTTPS 如何加密HTTPS 的工作过程对称加密非对称加密 HTTPS 什么是 HTTPS HTTPS 也是一个应用层的协议。是在 HTTP 协议的基础上引入的一个加密层。 由来&#xff1a;HTTP 协议内容都是按照文本的方式明纹传输&#xff0c;这就导致在传输过程中出现…

Python 面向对象绘图(Matplotlib篇-16)

Python 面向对象绘图(Matplotlib篇-16)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

GaussDB数据库中的MERGE INTO介绍

一、前言 二、GaussDB MERGE INTO 语句的原理概述 1、MERGE INTO 语句原理 2、MERGE INTO 的语法 3、语法解释 三、GaussDB MERGE INTO 语句的应用场景 四、GaussDB MERGE INTO 语句的示例 1、示例场景举例 2、示例实现过程 1&#xff09;创建两个实验表&#xff0c;并…

css-盒子等样式学习

盒子居中&#xff0c;继承外层盒子的宽高 兼容性&#xff08;border-box&#xff09;将边框收到盒子内部 初始化div 不用管box-setting content-box 还原 创建为一个类 &#xff0c;让所有需要还原的类 进行继承 padding 用法表示margin上下左右边距 body 外边距&…

C++ 设计模式之策略模式

【声明】本题目来源于卡码网&#xff08;题目页面 (kamacoder.com)&#xff09; 【提示&#xff1a;如果不想看文字介绍&#xff0c;可以直接跳转到C编码部分】 【设计模式大纲】 【简介】什么是策略模式&#xff08;第14种模式&#xff09; 策略模式是⼀种⾏为型设计模式&…

深度学习常用代码总结(k-means, NMS)

目录 一、k-means 算法 二、NMS 一、k-means 算法 k-means 是一种无监督聚类算法&#xff0c;常用的聚类算法还有 DBSCAN。k-means 由于其原理简单&#xff0c;可解释强&#xff0c;实现方便&#xff0c;收敛速度快&#xff0c;在数据挖掘、数据分析、异常检测、模式识别、金…