本教程将教您如何使用 Docker 和 Docker Compose 在 MinIO 和 PostgreSQL 之间设置和管理数据事件,也称为存储桶或对象事件。
您可能已经在利用 MinIO 事件与外部服务进行通信,现在您将通过使用 PostgreSQL 自动化和简化数据事件管理来增强数据处理能力。本文是为那些对 MinIO、PostgreSQL 和 Docker 有基本了解的人量身定制的,提供了一种实践方法来部署一个 MinIO 和 PostgreSQL 协同工作的内聚环境。
让我们深入了解如何使用 Docker Compose 部署这些服务,并探索将事件从 MinIO 发布到 PostreSQL 的实际应用。
先决条件:
Kubernetes 原生 MinIO 与各种云原生技术无缝集成。本指南将利用 MinIO 对 Postgres、Redis、Kafka 等服务的原生支持。这些集成对于跨不同云环境的流畅数据管理至关重要。
我们将使用 Docker Compose 创建一个用户友好的配置驱动设置。 本教程提供了一条简单的途径来集成高级通知功能和微调 MinIO 设置,以满足项目的特定要求。
正如所展示的那样,MinIO 与 PostgreSQL 的集成在各个领域开辟了大量的实际应用:
数据分析和报告:自动捕获 MinIO 存储桶中的数据变化,并使用 PostgreSQL 进行分析和生成见解。
备份和恢复:通过跟踪 MinIO 中存储的数据的每一次更改,实施强大的数据备份解决方案。
事件驱动型应用:开发响应 MinIO 中数据更改的应用,例如在上传新数据时触发进程或发出警报。
合规性和审核:维护数据访问和更改的日志,以符合法规标准。
此设置在实时数据跟踪至关重要的环境中特别有用,例如金融服务、医疗保健和电子商务。
MinIO 中的事件通知通过各种方法进行配置,包括使用用户界面、运行命令行实用程序以及使用各种编程语言和 SDK 编写脚本。让我们来看看每种方法的优缺点:
MinIO 控制台:此方法提供用户友好的图形界面,允许您直观地管理 Webhook 设置。
MinIO 的 mc 命令行工具:对于那些喜欢命令行界面的用户,MinIO 提供了 mc 命令工具,它允许对 webhook 进行详细且可编写脚本的配置。
代码和脚本:借助 Bash 和 Python 脚本,此方法在设置 Webhook 时提供了高度的灵活性和自动化。
我们将首先设置 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 结构概述了两个服务及其各自的配置变量,以及每个服务的持久卷和网络端口转发。
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.
在设置 Flask 应用程序来记录和处理来自 MinIO 存储桶的事件通知之前,我们首先需要在 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 存储桶的交互,以系统地跟踪存储桶中的文件上传、修改或删除等事件。
若要在 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 通过其双重方法满足了这一需求:直观的 MinIO 控制台 (UI) 和强大的 mc
(MinIO 客户端) 命令行界面 (CLI)。本教程包含使用两者的说明,因此您可以选择这个多功能且全面的工具集的任何元素。
MinIO UI: 图形用户界面用户友好,非常适合那些喜欢可视化配置和管理方法的人。它允许您轻松浏览存储桶、设置事件通知和监控存储。UI 对于快速设置和更熟悉点击式环境的用户特别有益。
mc
命令行工具:另一方面, mc
CLI 提供对 MinIO 实例的精细控制。它是用于脚本编写、自动化和详细配置的强大工具。该接口非常适合需要精确控制其存储、网络和数据管理任务的高级用户。CLI 有助于执行复杂的任务,例如批处理操作、自动备份脚本以及跨各种环境直接操作对象。
通过利用 UI 和 CLI,MinIO 用户可以享受两全其美的优势:易用性和高级控制,确保高效灵活的数据管理体验。
让我们看一下管理数据事件的不同方法。
打开浏览器并转到“http://localhost:9001”。使用在安装过程中创建的 MinIO 凭据登录。导航到 MinIO 控制台中的事件通知设置,单击“添加事件目标”,然后选择“PostgreSQL”作为服务。
如下面的屏幕截图所示,为我们希望创建的存储桶事件输入标识符“minio-postgres-demo”,然后继续配置所需的参数。
如前所述,通过分配“连接字符串”,我们可以将 Postgres 容器设置为主机;同样,将“表”名称“事件”添加为目标的表名称。
设置 PostgreSQL 服务终结点的过程涉及使用环境变量或设置运行时配置设置。指定这些设置后,需要重新启动 MinIO 服务器才能生效。这是因为 MinIO 在启动时加载其配置,而在 UI 中所做的更改需要重新启动才能被系统识别和实现。
请务必注意,仅在 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 的以 CLI 为中心的方法提供了一种强大而有效的方法来将 MinIO 与 PostgreSQL 集成,从而增强了云存储操作中的整体数据工作流和管理。对于那些喜欢将自动化/脚本和手动控制相结合来管理云存储和数据流程的人来说,这特别有益。
部署上述 docker-compose.yaml 后,继续使用 MinIO 客户端 mc 命令行实用工具。此设置涉及在 MinIO 中创建别名、配置 PostgreSQL 终端节点以及设置存储桶通知。
我们将在“minio”容器的交互式终端内工作,我们可以通过运行单个命令来生成该容器:
docker exec -it minio /bin/sh
从这个 shell 中运行 mc 命令的原因是 Docker minio/minio 镜像已经安装了 mc 并准备就绪。
进入容器后,我们可以访问 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的团队始终在这里支持您的数据事件管理之旅!