【分布式知识】分布式对象存储组件-Minio

文章目录

    • 什么是minio
      • 核心特点:
      • 使用场景:
      • 开发者工具:
      • 社区和支持:
    • 核心概念
      • 什么是对象存储?
      • MinIO 如何确定对对象的访问权限?
      • 我可以在存储桶内按文件夹结构组织对象吗?
      • 如何备份和恢复 MinIO 上的对象?
      • MinIO 提供哪些工具来根据访问速度和频率管理对象?
      • MinIO 如何保护对象免遭意外覆盖或删除?
        • 锁定
        • 版本控制
    • 架构解析
      • 分布式架构
      • 存储机制
      • 高可用性和扩展性
      • 兼容性
      • 安全性
      • 管理和监控
    • minio扩容
      • 扩容前的准备
      • 添加新节点
      • 扩展存储
      • 数据迁移
      • 测试和验证
      • 示例命令
        • 在新节点上安装并启动MinIO服务:
        • 更新集群配置(如果有需要):
        • 使用`mc`工具测试数据迁移:
      • 注意事项
    • 命令行
      • 基本配置
        • 设置环境变量:
      • 基本命令
        • 连接到MinIO服务器:
        • 列出所有存储桶:
        • 创建新的存储桶:
        • 删除存储桶:
        • 切换当前工作目录到指定存储桶:
      • 文件操作
        • 上传文件到存储桶:
        • 下载文件到本地:
        • 复制存储桶内的文件:
        • 删除存储桶内的文件:
      • 目录操作
        • 上传整个目录到存储桶:
        • 下载整个目录到本地:
        • 删除存储桶内的目录:
      • 更多命令
        • 列出存储桶中的所有对象:
        • 查看特定对象的信息:
        • 设置对象的元数据:
        • 获取对象的元数据:
        • 生成共享链接:
        • 启动MinIO服务器(如果安装了MinIO服务端):
    • 相关文献

什么是minio

MinIO是一个开源的对象存储服务器,它旨在提供高性能、高可扩展性的存储解决方案。以下是关于MinIO的一些详细介绍:

核心特点:

  1. 高性能:MinIO设计用于提供高速的数据访问速度,在标准硬件上也能达到非常高的吞吐量。
  2. 云原生:MinIO支持Kubernetes,并且适合在云环境中运行,特别是对于微服务架构的应用。
  3. 可扩展性:MinIO支持水平扩展,可以通过增加更多的节点来扩展存储容量和性能。
  4. API兼容性:MinIO与Amazon S3 API兼容,这使得现有的S3应用程序可以轻松迁移或与MinIO集成。
  5. 跨平台:MinIO可以在Linux、Windows和macOS等多个操作系统上运行。
  6. 安全性:MinIO支持加密、身份验证和授权等功能,确保数据的安全性。

使用场景:

  • 大数据存储:适合存储海量的数据,如日志文件、分析数据等。
  • 备份与归档:可以用来备份重要的数据,同时也支持长期的数据归档。
  • Web应用:可以作为Web应用的静态资源存储库,如图片、视频等。
  • 容器化应用:非常适合云原生应用的数据持久化需求。
  • IoT应用:可以存储从物联网设备收集的数据。

开发者工具:

  • MinIO支持多种编程语言的SDK,包括Java、Python、Go等,方便开发者快速集成MinIO到自己的应用中。
  • 它还提供了命令行界面(CLI),使得终端用户可以方便地管理和操作存储在MinIO中的对象。

社区和支持:

  • MinIO有一个活跃的开源社区,提供了丰富的文档和技术支持,帮助用户更好地理解和使用这个工具。
    由于MinIO的这些特点,它成为了许多组织和个人在构建需要高性能、可扩展存储解决方案的应用和服务时的选择。

核心概念

什么是对象存储?

对象是二进制数据,有时也称为二进制大对象 (BLOB)。Blob 可以是图像、音频文件、电子表格,甚至是二进制可执行代码。MinIO 等对象存储平台提供专用工具和功能来存储、检索和搜索 Blob 。

MinIO 对象存储使用存储桶来组织对象。存储桶类似于文件系统中的文件夹或目录,每个存储桶可以容纳任意数量的对象。MinIO 存储桶提供与 AWS S3 存储桶相同的功能。

例如,假设有一个托管网络博客的应用程序。该应用程序需要存储各种 blob,包括视频和图像等丰富的多媒体。

MinIO 通过功能支持多级嵌套目录,prefixing 以支持最动态的对象存储工作负载。

MinIO 如何确定对对象的访问权限?

MinIO 要求客户端对每个新操作执行身份验证和授权。 因此,身份和访问管理 (IAM)是 MinIO 配置的关键组件。

身份验证可验证连接客户端的身份。MinIO 要求客户端使用AWS 签名版本 4 协议进行身份验证,并支持已弃用的签名版本 2 协议。具体来说,客户端必须提供有效的访问密钥和密钥才能访问任何 S3 或 MinIO 管理 API,例如PUT、GET和DELETE操作。

然后,MinIO 检查经过身份验证的用户或客户端是否有权在部署上执行操作或使用资源。MinIO 使用基于策略的访问控制 (PBAC),其中每个策略描述一个或多个规则,这些规则概述了用户或用户组的权限。MinIO在创建策略时支持特定于 S3 的操作和条件。

默认情况下,MinIO拒绝访问用户分配或继承的策略中未明确引用的操作或资源。

MinIO 提供了访问管理功能作为软件的一部分。或者,您可以将 MinIO 配置为使用Active Directory/LDAP或OpenID/OIDC与多个外部 IAM 提供程序之一进行身份验证。

MinIO 如何保护数据安全?
MinIO 支持在驱动器上对对象进行编码(静态加密)以及在从一个位置转换到另一个位置时进行编码(传输中加密或“动态加密”)的方法。启用后,MinIO 会利用服务器端加密以加密状态写入对象。要检索和读取加密对象,用户必须具有适当的访问权限并提供对象的解密密钥。

MinIO 支持传输层安全性(TLS) 版本 1.2 和 1.3 加密对象。TLS 取代了以前使用的安全套接字层 (SSL) 方法,该方法现已弃用。由互联网工程任务组 (IETF) 维护的 TLS 标准提供了互联网通信用于支持加密、身份验证和数据完整性的标准。

验证用户和验证对象访问权限的过程称为TLS 握手。验证完成后,TLS 提供密码来加密和解密从服务器到请求客户端的信息传输。

MinIO 支持多种服务器端加密方法。

我可以在存储桶内按文件夹结构组织对象吗?

MinIO 为每个对象使用前缀方法,模仿传统文件系统的文件夹结构。前缀涉及在对象名称前面添加固定字符串。

使用前缀,您无需手动创建文件夹和子文件夹。相反,MinIO 会查找/对象名称前缀中的字符。每个字符都/表示一个新文件夹或子文件夹。

MinIO 使用对象的名称和前缀自动生成一系列用于存储对象的文件夹和子文件夹。当你在多个对象上使用相同的前缀字符串时,MinIO 会将它们识别为相似或分组的对象。

例如,名为 的对象/articles/john.doe/2022-01-02-MinIO-Object-Storage.md最终会存放在articles存储桶中标有 的文件夹中john.doe。

MinIO 对象存储可能类似于以下结构,具有三个存储桶。MinIO 会articles根据这些对象的前缀自动在存储桶中生成两个文件夹。

/ #root
/images/2022-01-02-MinIO-Diagram.png2022-01-03-MinIO-Advanced-Deployment.pngMinIO-Logo.png
/videos/2022-01-04-MinIO-Interview.mp4
/articles//john.doe/2022-01-02-MinIO-Object-Storage.md2022-01-02-MinIO-Object-Storage-comments.json/jane.doe/2022-01-03-MinIO-Advanced-Deployment.png2022-01-02-MinIO-Advanced-Deployment-comments.json2022-01-04-MinIO-Interview.md

MinIO 本身不限制任何特定前缀可以包含的对象数量。但是,硬件和网络条件可能会因前缀较大而对性能产生影响。

使用中等或预算有限的硬件进行部署时,应将其工作负载设计为以每个前缀 10,000 个对象为基准。根据基准测试和对实际工作负载的监控将此目标提高到硬件可以有效处理的水平。

使用高性能或企业级硬件的部署通常可以处理具有数百万个或更多对象的前缀。

MinIO SUBNET企业账户可以利用年度架构审查作为部署和维护策略的一部分,以确保依赖 MinIO 的项目的长期性能和成功。

有关限制前缀内容的好处的更深入讨论,请参阅有关优化 S3 性能的文章。

如何备份和恢复 MinIO 上的对象?

MinIO 提供两种类型的复制,用于将对象、其版本及其元数据从一个位置复制到另一个位置。您可以在存储桶级别或站点级别配置复制。

存储桶级别复制既可以作为单向、主动-被动复制(例如用于存档目的),也可以作为双向、主动-主动复制,以使两个存储桶彼此保持同步。

站点级复制功能作为双向、主动-主动复制,以使多个数据位置(例如不同的地理数据中心)彼此同步。

除了复制之外,MinIO 还提供镜像服务。 仅将实际对象复制到任何其他 S3 兼容数据存储,包括其他 MinIO 存储。但是,版本和元数据不会使用该命令备份。mc mirrormc mirror

独家访问驱动器
MinIO需要 对用于对象存储的驱动器或卷具有独占访问权限。任何其他流程、软件、脚本或人员都不得直接对提供给 MinIO 的驱动器或卷或 MinIO 放置在其上的对象或文件执行任何操作。
除非得到 MinIO 工程部门的指示,否则请勿使用脚本或工具直接修改、删除或移动所提供驱动器上的任何数据分片、奇偶校验分片或元数据文件,包括从一个驱动器或节点移动到另一个驱动器或节点。此类操作很可能会导致大面积损坏和数据丢失,超出 MinIO 的修复能力。

MinIO 提供哪些工具来根据访问速度和频率管理对象?

分层规则允许将经常访问的对象存储在热存储或温存储中,这通常更昂贵但提供更好的性能。

访问频率较低的对象可以移至冷存储。冷存储通常会以较低的性能换取较低的价格。

MinIO 如何保护对象免遭意外覆盖或删除?

锁定

锁定是一种一次写入多次读取 (WORM) 机制,可防止删除或修改对象。锁定后,MinIO 会无限期地保留对象,直到有人移除锁定或锁定过期。

MinIO 提供:

  • 法律保留锁,供所有用户无限期保留

  • 对所有用户实施基于时间的限制

  • 为非特权用户制定基于时间的锁规则

版本控制

默认情况下,使用相同名称(包括前缀)写入的对象会覆盖现有的同名对象。MinIO 提供了一个配置选项来创建启用了版本控制的存储桶。 版本控制可让您访问随时间变化的唯一命名对象的各个迭代。启用后,MinIO 会将变异对象写入与原始对象不同的版本,从而允许访问原始对象和更新的已更改对象。

MinIO 存储桶上的附加配置决定了存储桶中每个对象的旧版本保留多长时间。

架构解析

MinIO的架构设计是为了实现高性能、可扩展性以及简单易用性。以下是对MinIO架构的一些关键特性的解析:

分布式架构

deploy-arc

  • 无中心化设计:MinIO采用了一种去中心化的架构,其中对象数据被分散存储在集群的不同节点上。这种设计避免了单点故障,并提高了系统的可靠性。
  • 负载均衡:MinIO可以使用Web负载均衡器或DNS轮询(DNS round-robin)来平衡请求负载,从而提高系统的整体性能。

存储机制

minio-bucket

  • Bucket和Object:在MinIO中,数据被组织成Buckets(桶),每个Bucket类似于传统文件系统中的目录。Bucket中的数据则被进一步划分为Objects(对象),每个对象都有一个唯一的键来标识。
  • 本地文件系统:每个Bucket在本地文件系统中表示为一个目录,而对象则是该目录下的文件。这种设计简化了数据的管理和存储。

高可用性和扩展性

  • 水平扩展:MinIO支持水平扩展,即通过增加更多的节点来增加存储容量和性能。这种扩展性使得MinIO能够处理大量数据和高并发请求。
  • 多租户支持:MinIO支持多租户架构,允许多个用户或服务共享相同的存储基础设施,同时保持数据隔离。

兼容性

  • S3兼容API:MinIO完全兼容Amazon S3 API,这使得现有的S3应用程序可以直接与MinIO交互,无需修改代码。

安全性

  • 认证和授权:MinIO支持多种认证机制,如IAM(Identity and Access Management)用户认证,以及通过证书或其他方式对数据进行加密传输。
  • 数据加密:支持在传输过程中和静止状态下的数据加密,以保证数据的安全性。

管理和监控

  • 命令行工具(CLI):提供了强大的命令行工具,使得用户可以方便地管理存储在MinIO中的对象。
  • API和SDKs:除了S3兼容的API之外,MinIO还提供了多种编程语言的SDK,以便开发者能够更容易地集成MinIO到他们的应用中。
  • 可视化界面:虽然MinIO本身主要是一个命令行和API驱动的服务,但它也支持通过第三方工具或插件提供图形化的管理界面。

minio扩容

MinIO的设计允许通过水平扩展来增加存储容量和提升性能。扩容通常意味着添加更多的节点到现有的MinIO集群中。以下是进行MinIO扩容的一般步骤:

扩容前的准备

  1. 评估需求:确定需要增加多少存储容量或者提高多少性能。
  2. 规划布局:根据需求确定需要添加的新节点数量以及它们将如何分配存储空间。
  3. 备份数据:在进行任何可能影响数据的操作之前,最好先备份数据。

添加新节点

  1. 安装MinIO:在新的服务器上安装MinIO。确保新服务器上的MinIO版本与现有集群版本相匹配。
  2. 配置新节点:设置新节点上的MinIO服务,包括配置端点、访问密钥和秘密密钥等信息。

扩展存储

  1. 调整存储路径:将新节点上的存储路径加入到MinIO集群中。如果是单机模式,只需确保有足够的磁盘空间;如果是分布式模式,则需要将新的磁盘或服务器加入集群。
  2. 更新集群配置:如果使用的是MinIO的分布式模式,那么需要更新集群配置来反映新的节点信息。

数据迁移

  1. 手动迁移数据:如果是在同一个数据中心内,可以通过直接复制文件的方式将数据迁移到新的存储位置。
  2. 使用工具迁移数据:可以使用mc命令行工具或者通过API调用来迁移数据。

测试和验证

  1. 测试新配置:确保所有节点都能正常工作,并且数据可以正确读写。
  2. 监控性能:检查扩容后的集群是否达到了预期的性能指标,如IOPS、吞吐量等。

示例命令

假设你要在一个已经存在的MinIO集群中添加一个新的节点,可以通过如下步骤:

在新节点上安装并启动MinIO服务:
minio server /path/to/new/data/folder --address :9000 --config-dir /etc/minio

这里--address :9000指定了监听端口,--config-dir /etc/minio指定了配置目录。

更新集群配置(如果有需要):

如果使用的是分布式模式,可能需要编辑集群配置文件,将新节点的信息添加进去。

使用mc工具测试数据迁移:
mc cp -r /path/to/local/folder miniocloud/bucket/newpath

这里miniocloud是一个预设的别名,指向你的MinIO集群。

注意事项

  • 一致性检查:扩容后,建议进行一致性检查,确保所有副本都同步并且数据完整。
  • 监控工具:使用监控工具来持续监控集群的健康状况和性能。
  • 安全性:确保新加入的节点遵循相同的安全策略,如身份验证、数据加密等。

扩容MinIO集群是一项技术要求较高的操作,尤其是在生产环境中。务必谨慎行事,并确保有详细的计划和应急措施。如果不确定如何操作,可以参考MinIO官方文档或寻求专业的技术支持。

命令行

MinIO提供了命令行界面(CLI),使得用户可以方便地执行各种对象存储相关的任务,如创建和删除存储桶(buckets)、上传和下载对象等。下面是MinIO CLI的一些常用命令及其简要说明。

基本配置

首先,你需要配置MinIO客户端以连接到你的MinIO服务器。你可以设置环境变量或者直接在命令行中指定端点、访问密钥和秘密密钥。

设置环境变量:
export MINIO_ACCESS_KEY=your_access_key
export MINIO_SECRET_KEY=your_secret_key
export MINIO_ENDPOINT=minio_server_endpoint:port

基本命令

连接到MinIO服务器:
mc alias set myminio http://minio_server_endpoint:port your_access_key your_secret_key
列出所有存储桶:
mc ls myminio
创建新的存储桶:
mc mb myminio/mybucket
删除存储桶:
mc rb myminio/mybucket
切换当前工作目录到指定存储桶:
mc cd myminio/mybucket

文件操作

上传文件到存储桶:
mc cp /path/to/local/file myminio/mybucket/remote/path
下载文件到本地:
mc cp myminio/mybucket/remote/path /path/to/local/directory
复制存储桶内的文件:
mc cp myminio/mybucket/oldpath myminio/mybucket/newpath
删除存储桶内的文件:
mc rm myminio/mybucket/path/to/object

目录操作

上传整个目录到存储桶:
mc cp -r /path/to/local/directory myminio/mybucket/remote/path
下载整个目录到本地:
mc cp -r myminio/mybucket/remote/path /path/to/local/directory
删除存储桶内的目录:
mc rm -r myminio/mybucket/path/to/directory

更多命令

列出存储桶中的所有对象:
mc ls myminio/mybucket
查看特定对象的信息:
mc stat myminio/mybucket/path/to/object
设置对象的元数据:
mc setmeta myminio/mybucket/path/to/object --header "X-Amz-Meta-Custom-Header: custom value"
获取对象的元数据:
mc getmeta myminio/mybucket/path/to/object
生成共享链接:
mc presign myminio/mybucket/path/to/object
启动MinIO服务器(如果安装了MinIO服务端):
minio server /path/to/data/folder --address :9000

以上是一些基本的MinIO CLI命令示例。通过这些命令,你可以执行大部分日常的对象存储操作。如果你需要更详细的功能介绍或者有特定的需求,建议查阅官方文档获取最新的命令列表和参数选项。

相关文献

Mino对象存储系统官网

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

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

相关文章

iQOO手机怎样将屏幕投射到MacBook?可以同步音频吗?

众所周知,苹果品牌的设备自己有AirPlay的投屏功能,iPhone要投屏到MacBook只要连接同一网络,然后开启AirPlay就可以投屏。但其他品牌的手机没有AirPlay,怎么将手机屏幕投射到MacBook呢? 安卓系统的手机可以使用无线投屏…

2. 从服务器的主接口入手

Webserver 的主函数 main.cpp,完成了哪些功能? #include "config.h"int main(int argc, char *argv[]) {string user "";string passwd "";string databasename "";Config config;config.parse_arg(argc, a…

四、Prompt工程——简单应用

Prompt工程——简单应用 一、提示工程(Prompt Engineering)二、Prompt基本法则三、Prompt 调优四、简单的例子文本总结文本判断文本提取文本转化——翻译文本转化——语气 更多结语 一、提示工程(Prompt Engineering) 提示工程也…

5G RedCap工业路由器赋能电力物联网应用

随着5G轻量化技术应用的推进,5G RedCap旨在提供低功耗、低成本、广覆盖等功能特点赋能电力智能化升级。特别适用于工业物联网、低空经济、车联网、消费电子和轻量级5G的需求。 5G RedCap工业路由器的特点 低功耗:5G RedCap工业路由器通过节能技术&#…

Flume采集Kafka数据到Hive

版本: Kafka:2.4.1 Flume:1.9.0 Hive:3.1.0 Kafka主题准备: Hive表准备:确保hive表为:分区分桶、orc存储、开启事务 Flume准备: 配置flume文件: /opt/datasophon/flume-1…

react18中react-thunk实现公共数据仓库的异步操作

redux及react-redux都只能实现数据的同步修改更新,有点类似于vue中的mutation,只能做同步操作,异步的话不用actions来实现。由于在项目始终不可避免要实现的异步数据的更新,这明显不够用了。是时候引入我们的异步中间件redux-thun…

开源一款前后端分离的企业级网站内容管理系统,支持站群管理、多平台静态化,多语言、全文检索的源码

大家好,我是一颗甜苞谷,今天分享一款前后端分离的企业级网站内容管理系统,支持站群管理、多平台静态化,多语言、全文检索的源码。 前言 在当今的数字化时代,企业网站和个人博客已成为信息传播和品牌建设的重要渠道。…

Docker-常用命令大全(附命令详解)

文章目录 Docker 基础命令查看docker 运行状态关闭docker启动docker重启dockerdocker设置随服务启动而自启动查看docker 版本号信息docker 帮助命令 docker 镜像命令查看自己服务器中docker 镜像列表搜索镜像拉取镜像运行镜像保存镜像删除镜像加载镜像镜像标签 Docker 容器命令…

【ComfyUI】手动安装部署ComfyUI的运行环境

如果不喜欢已有的一键启动包,我们可以手动的安装和部署ComfyUI的运行环境,相比一键安装包,自己部署ComfyUI 环境具有相当大的灵活性,其实部署ComfyUI 环境非常简单,不像网上说的那么复杂。下面我们就按照顺序给大家分享…

Golang | Leetcode Golang题解之第520题检测大写字母

题目: 题解: func detectCapitalUse(word string) bool {// 若第 1 个字母为小写,则需额外判断第 2 个字母是否为小写if len(word) > 2 && unicode.IsLower(rune(word[0])) && unicode.IsUpper(rune(word[1])) {return f…

【Cri-Dockerd】安装cri-dockerd

cri-dockerd的作用: 在k8s1.24之前。k8s会通过dockershim来调用docker进行容器运行时containerd,并且会自动安装dockershim,但是从1.24版本之前k8s为了降低容器运行时的调用的复杂度和效率,直接调用containerd了,并且…

git下载和配置

git是什么? Git是一种分布式版本控制系统,用于跟踪文件的变化,尤其是源代码。它允许多个开发者在同一项目上进行协作,同时保持代码的历史记录。Git的主要特点包括: 分布式:每个开发者都有项目的完整副本&a…

GPT避坑指南:如何辨别逆向、AZ、OpenAI官转

市面上有些说自己是官转,一刀只需要1块甚至几毛钱,并声称官方倍率的,很大可能就是使用的是 逆向或Azure。 如何鉴别逆向 逆向的种类很多,主要分为3类 逆向不知名A| 镜像站或偷的 key。成本约等于0,调用聊天数据可能在…

postgresql增量备份系列一

简介 在一些大容量得数据库应用中,采用全量备份得方式,会带来大量时间浪费和开销,此时定期的增量备份可以使得数据存储周期变长。本文讲解几个增量备份工具 pg_basebackup pg_receivewal(异地归档模式) 使用pg_bas…

arcgis pro 3.3.1安装教程

一、获取方式: http://dt4.8tupian.net/2/29913a61b1500.pg3二、软件目录: 三、安装步骤: (1)安装软件运行环境windowsdesktop-runtime 8.0.4; (2)选中安装文件arcgispro_33zh_cn_190127.exe&…

LabVIEW汽车状态监测系统

LabVIEW汽车状态监测系统通过模拟车辆运行状态,有效地辅助工程师进行故障预测和维护计划优化,从而提高汽车的可靠性和安全性。 项目背景: 现代汽车工业面临着日益增长的安全要求和客户对于车辆性能的高期望。汽车状态监测系统旨在实时监控汽…

GiantPandaCVARM Neon Intrinsics 学习指北:从入门、进阶到学个通透

【GiantPandaCV导语】Neon是手机普遍支持的计算加速指令集,是AI落地的工程利器。Neon Intrinsics 的出现,缓解了汇编语言难学难写的难题,值得工程师们开发利用。 前言 Neon是ARM平台的向量化计算指令集,通过一条指令完成多个数据…

python爬虫抓取豆瓣数据教程

环境准备 在开始之前,你需要确保你的Python环境已经安装了以下库: requests:用于发送HTTP请求。BeautifulSoup:用于解析HTML文档。 如果你还没有安装这些库,可以通过以下命令安装: pip install requests…

SD-WAN分布式组网:构建高效、灵活的企业网络架构

随着企业数字化转型的深入,分布式组网逐渐成为企业网络架构中的核心需求。无论是跨区域的分支机构互联,还是企业与云服务的连接,如何在不同区域实现高效、低延迟的网络传输,已成为业务成功的关键。SD-WAN(软件定义广域…

使用Python和OpenCV实现火焰检测

使用Python和OpenCV实现火焰检测 项目解释: 此 Python 代码是使用 OpenCV、线程、声音和电子邮件功能的火灾探测系统的简单示例。 以下是它的功能的简单描述: 导入库:代码首先导入必要的库: cv2:用于图像和视频处理…