使用 MinIO 和 PostgreSQL 简化数据事件

news2024/9/24 18:09:13

本教程将教您如何使用 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: 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.

在 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.coloradmin.cn/o/1397320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器人导纳控制实现框架

Safe, Stable and Intuitive Control for Physical Human-Robot Interaction - 知乎关于文章《Safe, Stable and Intuitive Control for Physical Human-Robot Interactio》的简记。 Safe, Stable and Intuitive Control for Physical Human-Robot Interaction目的根据力导数作…

设计一个网页爬虫

定义 User Case 和 约束 注意:没有一个面试官会阐述清楚问题,我们需要定义Use case和约束 Use cases 我们的作用域只是处理以下Use Case: Service 爬取一批 url 生成包含搜索词的单词到页面的反向索引给页面生成标题和片段– 标题和片段是…

ptrade 通过mysql的链接开发一个量化管理平台。

这里只写一下界面及想法。不进行代码的实现。因为对流程不是很熟 ###界面 数据库的链接: ptrade USER 可转债量化分析 PASSWORD 123456 MYSQL_HOST mysql.sqlpub.com MYSQL_PORT 3306 MYSQL_DB ptradedef get_mysql_conn():import pymysqltry:conn pym…

maven编译时依赖报错 Caused by: java.util.zip.ZipException: zip file is empty 错误。

出现这种报错时,可能是maven仓库下对应的依赖出现了问题,需要讲报错依赖位置的依赖进行删除,在编译的时候就会重新下载,就不会出现错误了。 rm -rf /Applications/software/env/repository/org/apache/orc/orc-core/1.9.1/

Yield Guild Games 宣布与区块链游戏中心 Iskra 建立战略合作伙伴关系

Yield Guild Games (YGG) 宣布将向 Iskra 引入其任务系统,Iskra 是一个 Web3 游戏中心和发布平台,拥有超过 400 万注册钱包和 10 万月度活跃用户 (MAU)。在 LINE、Kakao、Wemade 和 Netmarble 等公司的支持下,Iskra 将游戏玩家和游戏工作室聚…

验收测试的重要性:确保交付高质量产品

在软件开发生命周期中,验收测试扮演着至关重要的角色,它不仅是项目的最后一道关卡,更是确保交付高质量产品的关键步骤。本文将介绍验收测试的重要性,以及它在软件开发过程中的作用。 1. 确认功能符合需求 验收测试的首要任务是验证…

逆向思维,去重Cube计算优化新技巧

场景描述 在做数据汇总计算和统计分析时,最头疼的就是去重类指标计算(比如用户数、商家数等),尤其还要带多种维度的下钻分析,由于其不可累加的特性,几乎每换一种统计维度组合,都得重新计算。数…

匿名发送短信

匿名发送短信 匿名发送短信啦!不用程序猿,也能定制专属推送消息!每日小惊喜! 还可以领取课程资料!软考中级软件设计师,高级信息系统项目管理师! 先说在哪里 微信搜公众号:暮看云 微…

人工智能 | 自然语言处理的发展历程

github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 自然语言处理的发展 方向一:技术进步1. 基于规则的语法(1950-1990)2. 统计语言处理(1990-2010)3. 基于深度学…

ChatGPT正确打开方式与GPT-4.5的key最新获取方式

前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言4.5key价格泄漏ChatGPT4.0使用地址ChatGPT正确打开方式最新功能语音助手存档…

计算机网络-标准化工作及相关组织与性能指标(标准分类 标准化工作 RFC 速率 带宽 吞吐量 时延 时延带宽积 RTT 利用率)

文章目录 标准化工作及相关组织标准化工作标准分类RFC流程标准化的相关组织小结 性能指标速率带宽吞吐量时延发送时延传播时延排队时延与处理时延补充 高速链路 时延带宽积往返时间RTT利用率小结 标准化工作及相关组织 标准化工作 即需要统一标准,这样才能兼容 …

Linux 时间同步 - Chrony服务

Linux 时间同步 - Chrony服务 引言一、简单使用二、详解2.1 chrony.conf2.2 chronyd2.3 chronyc 引言 为什么需要时间同步? 其意义可参考秦朝统一度量衡,车同轨,书同文。核心就是方便协同工作。 Chrony能更精确、更快的同步时钟,传统ntp需要…

014集:python访问互联网:网络爬虫实例—python基础入门实例

以pycharm环境为例: 首先需要安装各种库(urllib:requests:Openssl-python等) python爬虫中需要用到的库,大致可分为:1、实现 HTTP 请求操作的请求库;2、从网页中提取信息的解析库;3、Python与…

代码随想录算法训练营day13|239.滑动窗口最大值、347.前K个高频元素

239. 滑动窗口最大值 347.前 K 个高频元素 239. 滑动窗口最大值 (一刷至少需要理解思路) 之前讲的都是栈的应用,这次该是队列的应用了。 本题算比较有难度的,需要自己去构造单调队列,建议先看视频来理解。 题目链接/文…

css3轮播图案例

轮播图案例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>…

HTML111111111

在线编辑器 在线 HTML 空元素 没有内容的 HTML 元素被称为空元素。空元素是在开始标签中关闭的。 即使 在所有浏览器中都是有效的&#xff0c;但使用 其实是更长远的保障。 HTML 水平线 标签在 HTML 页面中创建水平线。 hr 元素可用于分隔内容。 HTML 折行 如果您希望…

mysql原理--事务的隔离级别与 MVCC

1.事前准备 为了故事的顺利发展&#xff0c;我们需要创建一个表&#xff1a; CREATE TABLE hero (number INT,name VARCHAR(100),country varchar(100),PRIMARY KEY (number) ) EngineInnoDB CHARSETutf8;然后向这个表里插入一条数据&#xff1a;INSERT INTO hero VALUES(1, 刘…

高效火情监测,科技助力森林防火【数字地球开放平台】

数字地球开放平台-以卫星遥感为核心的空天信息服务开放平台 (geovisearth.com) 2019年3月30日&#xff0c;四川省凉山州木里县爆发了一场森林火灾&#xff0c;火点位于海拔3800米左右&#xff0c;地形险峻、坡度陡峭、谷深难以抵挡火势。在扑救的过程中&#xff0c;27名森林消防…

扩散模型参数量降低87%,且提升生成质量;通过蒸馏实现一步采样扩散模型;VideoCrafter2视频生成;深度感知图像合成

本文首发于公众号&#xff1a;机器感知 扩散模型参数量降低87%&#xff0c;且提升生成质量&#xff1b;通过蒸馏实现一步采样扩散模型&#xff1b;VideoCrafter2视频生成&#xff1b;深度感知图像合成 One-Step Diffusion Distillation via Deep Equilibrium Models Diffusio…

恭贺丰果管道入围2024中国管道十大品牌

恭贺丰果管道入围2024中国管道十大品牌 丰果&#xff08;中国&#xff09;有限公司 丰果管道品牌创立于1999年&#xff0c;是国内最早从事PPR家装管道生产的品牌之一&#xff0c;在业内有着良好的口碑和市场美誉度&#xff0c;在全国的头部装企更是有相当高的市场占有率。2023…