赞
踩
MinIO 是一款流行的开源对象存储系统,设计上兼容 Amazon S3 API,主要用于私有云和边缘计算场景。它提供了高性能、高可用性以及易于管理的对象存储服务。以下是 MinIO 的详细介绍及优缺点:
架构与特性:
优势:
前端使用场景下的优缺点:
整体优缺点:
MinIO是一个强大的、面向云原生应用的理想存储解决方案,尤其适合那些寻求低成本、高可用和灵活扩展的私有云存储需求的组织。不过,在实际使用中需注意权衡其优缺点,并根据具体业务场景采取合适的策略和技术手段来克服潜在挑战。
官网:MinIO | High Performance, Kubernetes Native Object Storage
MinIO在不同系统和环境上的部署方式有一些差异,但基本理念是类似的,即通过容器化或直接安装的方式运行一个兼容S3 API的对象存储服务。下面将简要介绍如何在Kubernetes、Docker、CentOS、Windows及macOS等系统上部署MinIO的Server端,并提供一些关于Client端连接的基本指导。
创建MinIO StatefulSet或Deployment:
Yaml- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: minio-deployment
- spec:
- replicas: 4 # 根据需求设置副本数量以实现高可用性
- selector:
- matchLabels:
- app: minio
- template:
- metadata:
- labels:
- app: minio
- spec:
- containers:
- - name: minio
- image: minio/minio:latest
- args: ["server", "/data"]
- ports:
- - containerPort: 9000
- env:
- - name: MINIO_ACCESS_KEY
- value: "your-access-key"
- - name: MINIO_SECRET_KEY
- value: "your-secret-key"
- volumeMounts:
- - mountPath: /data
- name: minio-data
- volumes:
- - name: minio-data
- persistentVolumeClaim:
- claimName: minio-pvc # 需要预先创建并绑定到实际PV
kubectl apply
命令应用YAML配置文件来创建StatefulSet或Deployment资源,该配置文件通常会指定镜像、持久卷(PV)和持久卷声明(PVC)、端口映射以及所需环境变量。配置Service资源: 创建一个Service资源以暴露MinIO服务,并可以通过ClusterIP、NodePort或者LoadBalancer方式对外提供访问。
初始化MinIO集群(如果需要): 如果你打算部署分布式MinIO,需要确保正确配置了启动参数和环境变量,以便各个Pod能够相互发现并组成集群。
拉取镜像:
docker pull minio/minio
运行容器: 单节点实例:
- docker run -p 9000:9000 -p 9001:9001 --name minio \
- -e "MINIO_ACCESS_KEY=youraccesskey" \
- -e "MINIO_SECRET_KEY=yoursecretkey" \
- -v /path/to/data:/data \ #新版目录已经更改为/mnt/data
- minio/minio server /data
分布式模式下,需要额外的环境变量来定义集群模式和其他集群成员。
docker-compose.yaml
- version: '3.9' # 使用最新的Docker Compose版本以利用新特性
-
- services:
- minio:
- image: minio/minio:RELEASE.2024-01-05T22-17-24Z.fips # 使用最新稳定版镜像(或指定特定版本)
- container_name: minio
- ports:
- - "19000:9000" # 根据实际需求决定是否暴露9001端口,用于HTTPS访问时需要
- - "19001:9001" # 根据实际需求决定是否暴露9001端口,用于HTTPS访问时需要
- environment:
- MINIO_ROOT_USER: youradminaccount
- MINIO_ROOT_PASSWORD: youradminpassword
- #MINIO_BROWSER: off # (可选)关闭Web浏览器界面,如果只通过API访问
- #MINIO_OPTS: server --address ":9000" # (可选)自定义启动参数,比如启用多节点集群模式等
- volumes:
- - /your pathto/minio_data:/data # 确保宿主机目录存在并有合适的权限
- command: server /data --console-address ":9001" --address ":9000" # 指定控制台监听的静态端口为9001
podman
- podman run -p 9000:9000 -p 9001:9001 minio/minio server /data --console-address ":9001"
-
- podman run --name my-mc --hostname my-mc -it --entrypoint /bin/bash --rm minio/mc
- [root@my-mc /]# mc alias set myminio/ https://my-minio-service MY-USER MY-PASSWORD
- [root@my-mc /]# mc ls myminio/mybucket
-
安装依赖:
- sudo yum install -y epel-release
- sudo yum install -y mc httpd-tools
下载并解压MinIO二进制包: 下载最新版本的MinIO二进制包,解压并移动至 /usr/local/bin
目录或自己指定目录,自定义目录时建议将目录加入系统环境的PATH。
运行MinIO: 类似于Docker中的数据卷挂载,你需要提供一个本地目录作为存储路径:
- mkdir -p /mnt/minio/data
- nohup minio server /mnt/minio/data &
访问MinIO官方下载页面获取适用于Windows操作系统的可执行文件:下载地址:MinIO | Code and downloads to create high performance object storage
下载完成后,解压缩文件到你希望存放MinIO服务程序的位置,例如 C:\develop\minio
。
为了持久化存储数据,需要在本地硬盘上创建一个目录用于保存上传的文件。比如,在 D:\minio-data
创建存储目录。
打开命令提示符(CMD)窗口,以管理员身份运行,并切换到MinIO可执行文件所在的目录:
cd C:\develop\minio
然后使用以下命令启动MinIO Server,将 <MINIO_ACCESS_KEY>
、<MINIO_SECRET_KEY>
替换为自定义的访问密钥和私有密钥,并指定存储数据的目录:
.\minio.exe server D:\minio-data --address ":9000" --access-key <MINIO_ACCESS_KEY> --secret-key <MINIO_SECRET_KEY>
如果需要设置域名或其他高级选项,可以使用环境变量进行配置。例如,设置MINIO_DOMAIN环境变量:
set MINIO_DOMAIN=my-minio-server.local
然后用包含环境变量的方式启动MinIO服务。
http://localhost:9000
进入Web管理界面。minioadmin
和 minioadmin
)。powershell方式:
- ## 安装minio,先直接拉取exe
- Invoke-WebRequest -Uri "https://dl.min.io/server/minio/release/windows-amd64/minio.exe" -OutFile "C:\minio.exe"
- setx MINIO_ROOT_USER admin
- setx MINIO_ROOT_PASSWORD password
- C:\minio.exe server F:\Data --console-address ":9001"
-
-
- ## client
- Invoke-WebRequest -Uri "https://dl.minio.io/client/mc/release/windows-amd64/mc.exe" -OutFile "C:\mc.exe"
- C:\mc.exe alias set myminio/ http://MINIO-SERVER MYUSER MYPASSWORD
安装Homebrew(如果尚未安装):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
使用Homebrew安装MinIO:
brew install minio/stable/minio
运行MinIO: 在终端中运行MinIO服务器指向一个本地目录:
- mkdir -p ~/minio-storage
- minio server ~/minio-storage
对于客户端连接,无论在哪种环境下部署的MinIO服务器,都可以使用以下步骤进行连接:
设置环境变量(可选,用于简化命令行操作):
- export MINIO_ENDPOINT=http://localhost:9000
- export MINIO_ACCESS_KEY=youraccesskey
- export MINIO_SECRET_KEY=yoursecretkey
使用MinIO客户端工具mc: 安装mc(minio/mc
),然后使用以下命令连接到MinIO服务器:
mc alias set myminio $MINIO_ENDPOINT $MINIO_ACCESS_KEY $MINIO_SECRET_KEY
验证连接: 运行 mc ls myminio
来查看桶列表,如果一切正常,您应该能看到服务器上的存储桶信息。
请注意,在生产环境中,请务必替换上述示例中的“youraccesskey”和“yoursecretkey”为您的实际访问密钥和私有密钥,并且根据实际情况调整网络配置和持久化存储设置。同时,务必确保遵循最佳安全实践,如限制公网访问、启用SSL加密等。
浏览器访问:
启动MinIO服务器后,可以通过浏览器或通过S3 API来访问和管理MinIO服务器。
以下是一个使用Python编写的示例代码,展示了如何使用MinIO的Python SDK与MinIO服务器进行交互。
- import boto3
-
- # 创建MinIO客户端
- s3 = boto3.client('s3',
- endpoint_url='http://localhost:9000',
- aws_access_key_id='YOUR_ACCESS_KEY',
- aws_secret_access_key='YOUR_SECRET_KEY')
-
- # 列出所有桶
- response = s3.list_buckets()
- for bucket in response['Buckets']:
- print(bucket['Name'])
-
- # 创建一个桶
- s3.create_bucket(Bucket='mybucket')
-
- # 上传文件
- s3.upload_file('myfile.txt', 'mybucket', 'myfile.txt')
-
- # 下载文件
- s3.download_file('mybucket', 'myfile.txt', 'downloaded_file.txt')
-
- # 删除文件
- s3.delete_object(Bucket='mybucket', Key='myfile.txt')
-
- # 删除桶
- s3.delete_bucket(Bucket='mybucket')
以上代码使用了boto3库来与MinIO服务器进行交互。需要注意的是,endpoint_url
参数应该指向正确的MinIO服务器地址,aws_access_key_id
和aws_secret_access_key
参数应该设置为正确的访问密钥。
首先,在你的Node.js项目中安装MinIO SDK:
npm install minio
- const Minio = require('minio');
-
- // 创建一个MinIO客户端实例
- var minioClient = new Minio.Client({
- endPoint: 'your-minio-server-endpoint',
- port: 9000, // 默认端口为9000,如果自定义了端口,请修改
- useSSL: false, // 如果是https连接,则设置为true
- accessKey: 'your-access-key',
- secretKey: 'your-secret-key'
- });
-
- // 检查连接
- minioClient.ping((err) => {
- if (err) throw err;
- console.log('Connected to MinIO server successfully.');
- });
- minioClient.makeBucket('my-bucket', 'us-west-1', function(err) {
- if (err) return console.log(err);
- console.log('Bucket created successfully');
- });
- // 读取本地文件
- const fs = require('fs');
- fs.readFile('local-file.txt', (err, data) => {
- if (err) throw err;
-
- // 上传文件到MinIO
- minioClient.putObject('my-bucket', 'remote-file.txt', data, data.length, 'application/text', function(err, etag) {
- if (err) return console.log(err);
- console.log("File uploaded successfully.");
- });
- });
- minioClient.listObjectsV2('my-bucket', '', true, function(err, objects) {
- if (err) return console.log(err);
-
- for (let obj of objects) {
- console.log(obj.name);
- }
- });
请确保替换上述代码中的your-minio-server-endpoint
、your-access-key
和your-secret-key
为你实际的MinIO服务器地址、访问密钥和私有密钥。同时,根据需要调整存储桶名称、本地文件路径以及远程对象名。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。