使用 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: 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的团队始终在这里支持您的数据事件管理之旅!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

怎么处理vue项目中的错误详解

文章目录 一、错误类型二、如何处理后端接口错误代码逻辑问题全局设置错误处理生命周期钩子 三、源码分析小结参考文献 一、错误类型 任何一个框架,对于错误的处理都是一种必备的能力 在 Vue 中,则是定义了一套对应的错误处理规则给到使用者&#xff0…

一万六千字大章:Chrome 浏览器插件 V3 版本 Manifest.json 文件全字段解析

Chrome 浏览器插件 V3 版本 Manifest.json 文件全字段解析 Manifest.json 文件格式 每个扩展程序的根目录中都必须有一个 manifest.json 文件,其中列出了有关该扩展程序的结构和行为的重要信息。 1、Demo 展示 1. 最小文件 {"manifest_version": 3,&quo…

Git入门详细教程

一、Git概述🎇 Git官网 Git是一个开源的分布式版本控制系统,用于跟踪文件的变化和协作开发。它允许多个开发者在同一项目中共同工作,并能够有效地管理代码的版本和历史记录。Git可以帮助开发团队更好地协作,追踪代码变更&#xf…

云轴科技ZStack 助力广西某地级市建设市级警务云视频系统

某市属于广西壮族自治区辖地级市,省域副中心城市,选择云轴科技ZStack 超融合解决方案支撑警务云视频监控联网管理系统(警务云视频系统),实现了该市对各辖区视频资源统一管理;同时也满足了该市警务云视频系统…

技术分享 | App常见bug解析

在 app 产品测试过程中,可能会遇到很多不同类型的 Bug。知道了可能 Bug 的类型,有利于在测试过程中更好的预防这些问题的发生。 功能Bug 内容显示错误 前端页面展示的内容有误。 这种错误的产生有两种可能 前端代码写的文案错误接口返回值错误 功能…

windows安装mysql5.7

看了如何学习mysql后,就开始本地安装mysql,开始学习了。 1.官网下载 官网地址: https://dev.mysql.com/downloads/mysql/ 选择5.7版本 点击 “No thanks, just start my download”开始下载 下载64位的压缩包版 解压下载好的.zip文件&#xf…

游戏开发中的噪声算法

一、噪声 噪声是游戏编程的常见技术,广泛应用于地形生成,图形学等多方面。 那么为什么要引入噪声这个概念呢?在程序中,我们经常使用直接使用最简单的rand()生成随机值,但它的问题在于生成的随机值太“随机”了&#xf…

X-Bogus加密参数分析与jsvmp算法(仅供学习)

文章目录 1. 抓包分析2. X-Bogus参数分析 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫…

【算法Hot100系列】跳跃游戏

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

【题解 Trie树 字符串】 C - New but Nostalgic Problem

题目描述: 分析: 题目中涉及到了若干字符串的公共前缀,显然可以用trie树去完成 建立trie树的同时,我们为了做题方便,用以下两个数组去记录一下trie树的信息: t o t i tot_i toti​表示以i为根的子树中有几…

ICBE 2024第十二届深圳国际跨境电商交易博览会

ICBE 2024第十二届深圳国际跨境电商交易博览会 暨中国跨境电商综试区发展高峰论坛 展会时间:2024年9月2日-4日 展会地点:深圳会展中心(福田) 指导单位:广东省商务厅 主办单位:广东省电子商务协会/扩展集团 承办单…

基于局部信息提取的人脸标志检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 人脸检测 4.2 局部区域选择 4.3 特征提取 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .........................................…

【LeetCode每日一题】2171. 拿出最少数目的魔法豆

2024-1-18 文章目录 [2171. 拿出最少数目的魔法豆](https://leetcode.cn/problems/removing-minimum-number-of-magic-beans/)思路: 2171. 拿出最少数目的魔法豆 思路: 对输入的数组进行排序,使得数组中的元素按照升序排列。初始化一个变量s…

python如何包含其他路径的模块

python 包含其他路径的模块: 例如目录结构: dir1 |__ init.py |__ module1.py dir2 |__ main.py main.py from dir1 import module1首先需要在 dir1 添加 init.py 文件,该文件可以是空文件。 其次需要将dir1 的父目录添加到python 解释器的&#xf…

小红书投放策略有哪些?品牌运营思路

想要在小红书进行合理的达人投放,离不开一份完备且具备可实施性的达人投放策略。今天我们和大家分享下小红书投放策略有哪些?品牌运营思路! 制定小红书达人投放策略,按照以下四个步骤进行即可。 1、投放目的 这里的确定投放目的包…

跟着pink老师前端入门教程-day06

十一、CSS 的背景 通过CSS背景属性,可以给页面元素添加背景样式 背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。 11.1 背景颜色 background-color 属性定义了元素的背景颜色 一般情况下元素背景颜色默认值是transparent&…

KubeSphere平台使用

KubeSphere官网地址:https://kubesphere.io/zh/ KubeKey一键部署K8S集群:https://kubesphere.io/zh/docs/v3.4/installing-on-linux/introduction/multioverview/ 一台master node(初始化主节点)、两台 work node( joi…

2024-01-15(SpringMVCMybatis)

1.拦截器:如果我们想在多个handler方法(controller中的方法)执行之前或者之后都进行一些处理,甚至某些情况下需要拦截掉,不让handler方法执行,那么就可以使用SpringMVC为我们提供的拦截器。 拦截器和过滤器的区别:过滤…

浏览器插件:Web Scraper 基本用法和抓取页面内容(无需写代码,即可爬取数据)

Web Scraper 是一个浏览器扩展,用于从页面中提取数据(网页爬虫)。对于简单或偶然的需求非常有用,例如正在写代码缺少一些示例数据,使用此插件可以很快从类似的网站提取内容作为模拟数据。从 Chrome 的插件市场安装后,页面 F12 打开…

Python项目——搞怪小程序

1、介绍 使用python编写一个小程序,回答你是猪吗。 点击“是”提交,弹窗并退出。 点击“不是”提交,等待5秒,重新选择。 并且隐藏了关闭按钮。 2、实现 新建一个项目。 2.1、设计UI 使用Qt designer设计一个UI界面&#xff0c…