使用 MinIO 和 PostgreSQL 简化数据事件

本教程将教你如何设置和管理数据事件(也称为桶或对象事件),以及如何在 MinIO 和 PostgreSQL 之间使用 Docker 和 Docker Compose 进行通信。
您可能已经在利用 MinIO 事件与外部服务通信,现在您将通过使用 PostgreSQL 自动化和简化数据事件管理来增强您的数据处理能力。本文面向那些对 MinIO、PostgreSQL 和 Docker 有基本了解的人,提供了一种动手部署一个协调环境的方法,在该环境中 MinIO 和 PostgreSQL 协同工作。
让我们深入研究如何使用 Docker Compose 部署这些服务,并探索将 MinIO 中的事件发布到 PostgreSQL 的实际应用。
先决条件:
- 已安装 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 时提供了高度的灵活性和自动化。
以下描述了如何使用两种不同的方法部署和连接 MinIO 和 PostgreSQL:MinIO 控制台和 mc 命令行客户端实用程序。这两种方法都侧重于配置 MinIO 以将桶事件通知直接发送到 PostgreSQL 数据库,确保实时数据同步和简化的工作流程。
使用 Docker-Compose 部署:MinIO + Postgres
我们将首先设置 MinIO 及其环境以及 PostgreSQL 数据库。如果您尚未运行这些服务,则需要部署一个 Docker Compose 文件。
我们将使用下面的 docker-compose YAML 文件来使用 Docker Compose 部署和启动 MinIO 和 PostgreSQL。
version: '3.8'
services:
minio:
container_name: minio
image: minio/minio
environment:
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: minio123
command: server /data --console-address ":9001"
ports:
- "9000:9000"
- "9001:9001"
volumes:
- minio_data:/data
postgres:
container_name: postgres
image: postgres:alpine
environment:
POSTGRES_DB: postgres
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
minio_data:
postgres_data:
此 docker-compose 结构概述了两个服务及其各自的配置变量,以及每个服务的持久卷和网络端口转发。
在 MinIO 中配置 PostgreSQL 连接时,请在连接字符串中包含用户名和密码。例如,您在 MinIO 配置中的连接字符串可能如下所示:connection_string="user=myuser password=mypassword host=postgres dbname=postgres port=5432 sslmode=disable"。这确保了 MinIO 可以成功连接并验证 PostgreSQL 数据库。
在 PostgreSQL 中创建桶事件表
在设置 Flask 应用程序以记录和处理来自 MinIO 桶的事件通知之前,我们首先需要在 PostgreSQL 中建立适当的数据库结构。这包括创建一个专门的表来记录这些事件。
在 PostgreSQL 中创建“Events”表
首先访问您的 PostgreSQL 容器。这可以通过执行“docker exec”命令来完成。接下来,您需要创建“events”表。此表旨在存储有关每个事件的各种详细信息。在 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 服务器的事件通知
要在 Docker 环境中使用主机上的 PostgreSQL 服务器在 MinIO 中设置事件通知,请在连接字符串中使用host.docker.internal
作为主机。此特殊 DNS 名称解析为主机使用的内部 IP 地址。此设置在我的上一篇文章从 Docker 到本地主机中详细介绍。
如果 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 容器设置为主机;同样,将“table”名称“events”添加为目标的表名。
设置 PostgreSQL 服务端点的过程涉及使用环境变量或设置运行时配置。指定这些设置后,需要重新启动 MinIO 服务器才能使它们生效。这是因为 MinIO 在启动时加载其配置,并且在 UI 中进行的更改需要重新启动才能被系统识别和实现。
重启 MinIO 服务器
需要注意的是,仅在 UI 中配置设置不会自动触发 MinIO 服务的重启。因此,在完成 PostgreSQL 事件通知的 UI 配置后,您应该使用带有 **docker exec minio
** 前缀的命令手动重启您的 MinIO 部署。此步骤确保您的配置更改被获取,并且事件通知按预期开始工作。
docker exec minio mc admin service restart
创建 Bucket
为了有效地使用 MinIO 与 PostgreSQL 的事件通知,首先在 MinIO 部署中创建一个 Bucket。此 Bucket 是您希望监视的所有事件发生的地方。在本指南中,我们将此 Bucket 命名为 **“test”**。此名称应与事件通知配置中使用的名称一致,以确保功能正常。
订阅 Bucket 通知事件
成功创建 Bucket 事件后,我们可以继续操作要订阅事件的 Bucket。以下屏幕截图将名为 **“test”** 的 Bucket 订阅到 **“minio-postgres-demo”** 事件,该事件将针对我们的 PostgreSQL 部署。在这里,您可以指定任何前缀或后缀,以及选择要订阅的事件类型。
在 MinIO UI 的下一个屏幕截图中,我们可以看到 **“test”** Bucket 已成功订阅到我们之前创建的“事件”。
使用 mc 命令行工具
使用 mc 的以 CLI 为中心的方法提供了一种强大且高效的方式来将 MinIO 与 PostgreSQL 集成,从而增强云存储操作中整体的数据工作流程和管理。对于那些希望在管理云存储和数据流程时结合自动化/脚本和手动控制的人来说,它尤其有用。
在部署上面概述的 **docker-compose.yaml** 后,继续使用 MinIO 客户端 mc 命令行工具。此设置涉及在 MinIO 中创建别名、配置 PostgreSQL 端点以及设置 Bucket 通知。
我们将使用 **“minio”** 容器的交互式终端进行操作,我们可以通过运行单个命令来启动它。
docker exec -it minio /bin/sh
从这个 Shell 中运行我们的 mc 命令的原因是,Docker **minio/minio** 镜像已经安装了 **mc** 并准备就绪。
配置 MinIO 将事件通知直接发送到 PostgreSQL 数据库(在 MinIO 容器内)
进入容器后,我们可以访问 mc 实用程序,从而可以继续执行将 MinIO 配置为将事件直接发送到 PostgreSQL 的步骤。
为您的 MinIO 实例设置别名。这简化了以后的命令。
mc alias set myminio http://localhost:9000 minio minio123
创建要监视的“test”Bucket。
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
为特定的 Bucket 操作(如 PUT、GET 和 DELETE)设置事件通知。
mc event add myminio/test arn:minio:sqs::minio-postgres-demo:postgresql --event put,get,delete
有关更详细的说明和信息,您可以参考 MinIO 文档中的 Bucket 通知 和 监视 Bucket 和对象事件。
验证设置
在 MinIO 中设置事件通知并在 PostgreSQL 中创建必要的 **"events"** 表后,至关重要的是要验证一切是否正常运行,例如,MinIO 是否在指定 Bucket 上执行操作(如 PUT、GET、DELETE)时正确地将事件数据发送到 PostgreSQL。
让我们确认事件数据是否按预期记录。
首先,创建一个应该触发事件通知的场景。例如,将文件上传到您为通知设置的 MinIO Bucket。此操作应生成一个将发送到 PostgreSQL 数据库的事件。
创建“sample.txt”文件并将其复制到“myminio/test”Bucket。
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 命令将显示 **"events"** 表的内容。查找与文件上传事件相对应的最近条目。输出应显示一行,其中包含有关您在 MinIO 中触发的事件的详细信息。检查 **"test/sample.txt"**、**"eventName"**、**"bucket"**、**"object"**、**"key"** 等字段,以及确认事件已正确记录的任何其他相关详细信息。如果您看到预期的数据,则确认 MinIO 正成功地将事件通知发送到 PostgreSQL。
如果在 PostgreSQL 表中没有看到预期的事件数据,请确保 MinIO Bucket 事件通知已正确设置,PostgreSQL 表架构与 MinIO 发送的架构匹配,并且 MinIO 和 PostgreSQL 之间的网络连接正常工作。
通过遵循这些步骤,您可以有效地验证 MinIO 与 PostgreSQL 的集成是否按预期工作。此过程对于确保您的数据事件管理准确可靠至关重要。
数据事件和数据管理
设置和利用 MinIO 和 PostgreSQL 集成的过程展示了 MinIO 在处理云存储和数据管理方面的稳健性和多功能性。无论是通过 MinIO UI 的图形化简易性,还是通过 mc
CLI 提供的全面控制,MinIO 都确保您的数据管理策略不仅高效,而且与 PostgreSQL 等现代数据库解决方案无缝集成。
在您继续探索 MinIO 的功能时,请记住,系统的灵活性旨在满足各种用例和场景。对于那些希望深入了解技术细节或探索更高级配置的人员,MinIO 文档中的 Bucket 通知和监视 Bucket 和对象事件是一个宝贵的资源。利用 MinIO 和 PostgreSQL 的强大功能来增强您的云存储解决方案和数据管理实践。
祝您在项目中顺利实施这些策略,请记住,MinIO 团队始终在支持您在数据事件管理方面的旅程!