开源minio-AWS-S3存储的部署及go操作详细

news/2024/7/10 22:30:29 标签: 开源, aws, golang

介绍

MinIO是一个开源的分布式对象存储服务,它允许用户在私有云或公有云环境中构建自己的对象存储基础设施。MinIO旨在提供高性能、高可用性的对象存储,并且与Amazon S3兼容,这意味着可以使用S3客户端工具和库直接与MinIO交互,而无需更改现有的应用程序代码。

以下是一些关键的MinIO特性和信息:

  1. 分布式架构: MinIO设计为具有分布式架构,允许用户将多个MinIO实例组合成一个集群,提供高可用性和可扩展性。每个MinIO实例可以运行在独立的硬件节点上,通过负载均衡器或DNS轮询等方式进行负载均衡。

  2. S3兼容性: MinIO与Amazon S3的API兼容,这意味着现有的S3客户端工具和库可以直接用于与MinIO进行交互。这种兼容性使得迁移现有S3应用程序到MinIO变得相对简单。

  3. 开源 MinIO是开源的,它的源代码可以在GitHub上获得。这使得用户能够审查和修改源代码以满足他们特定的需求,并且可以在社区的支持下获得帮助。

  4. 轻量级: MinIO设计为轻量级和高性能。它专注于提供快速的对象存储服务,而不引入过多的复杂性。

  5. 安全性: MinIO支持SSL/TLS加密,以确保在数据传输过程中的安全性。此外,它还提供身份验证和访问控制功能,以保护存储在MinIO中的数据。

  6. 版本控制: MinIO支持对象版本控制,允许用户存储和检索不同版本的对象。这对于处理数据的变更和回滚操作非常有用。

  7. 事件通知: MinIO支持事件通知,可以在对象被创建、删除或更新时触发通知。这为构建自动化工作流和应用程序提供了便利。

  8. 易于部署: MinIO提供了容器化的部署选项,可以轻松地在容器环境中部署,例如使用Docker。

总的来说,MinIO是一个灵活、高性能、可扩展且S3兼容的对象存储解决方案,适用于构建私有云、混合云或公有云环境中的存储基础设施。

部署

yum remove docker docker-common container-selinux docker-selinux docker-engine
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce



docker run -d \
  -p 9000:9000 \
  -p 9001:9001 \
  -e "MINIO_ROOT_USER=LIUYUNSHENG" \
  -e "MINIO_ROOT_PASSWORD=LIUYUNSHENGKEY" \
  minio/minio server /data --console-address "0.0.0.0:9001"

go相关操作代码

package main

import (
	"context"
	"fmt"
	"log"
	"os"
	"path"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/credentials"
	"github.com/aws/aws-sdk-go-v2/service/s3"
)

func main() {
	cfg, err := config.LoadDefaultConfig(context.TODO(),
		config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider("LIUYUNSHENG", "LIUYUNSHENGKEY", "")),
		config.WithEndpointResolverWithOptions(aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
			return aws.Endpoint{
				URL: "http://127.0.0.1:9000",
			}, nil
		})),
		config.WithRegion("cn-north-1"),
	)
	if err != nil {
		return
	}
	client := s3.NewFromConfig(cfg, func(o *s3.Options) {
		o.UsePathStyle = true //https://s3.amazonaws.com/BUCKET/KEY
	})

	// 打印所有的桶
	result, err := client.ListBuckets(context.TODO(), &s3.ListBucketsInput{})
	if err != nil {
		return
	}
	for _, bucket := range result.Buckets {
		fmt.Println(*bucket.Name)
	}
	// 创建桶
	bucketName := "liuysh-bucket"
	client.CreateBucket(context.TODO(), &s3.CreateBucketInput{Bucket: &bucketName})

	// 上传文件
	fileName := "/var/lib/pgsql/pgsql/go/go1.21.5.linux-amd64.tar.gz"
	file, err := os.Open(fileName)
	fileBase := path.Base(fileName)
	if err != nil {
		fmt.Printf("Couldn't open file %v to upload. Here's why: %v\n", fileName, err)
	} else {
		defer file.Close()
		_, err = client.PutObject(context.TODO(), &s3.PutObjectInput{
			Bucket: aws.String(bucketName),
			Key:    aws.String(fileBase),
			Body:   file,
		})
		if err != nil {
			log.Printf("Couldn't upload file %v to %v:%v. Here's why: %v\n",
				fileName, bucketName, file.Name(), err)
		}
	}

}


http://www.niftyadmin.cn/n/5289811.html

相关文章

<JavaEE> TCP 的通信机制(三) -- 滑动窗口

目录 TCP的通信机制的核心特性 四、滑动窗口 1)什么是滑动窗口? 2)滑动窗口的作用是什么? 3)批量传输出现丢包如何处理? 1> 接收端ACK丢包 2> 发送端数据包丢包 4)适用性 TCP的通…

软件测试工程师:面试题与经验分享

测试技术面试题 1、什么是兼容性测试?兼容性测试侧重哪些方面? 参考答案: 兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行,即是通常说的软件的可移植性。 兼容的类型,如果细分的话&#x…

iOS/Mac项目接入字体(壳工程/组件库)

iOS/Mac项目接入字体 一、准备二、接入1,壳工程接入和使用2,组件库接入和使用 为了减少专利字体对项目的影响,项目工程中需要接入公司自己的字体库,对于iOS/Mac项目来说接入非系统的外部字体,或者第三方字体&#xff0…

java设计模式学习之【状态模式】

文章目录 引言状态模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用状态示例代码地址 引言 设想你正在使用一个在线视频播放器观看电影。随着你的互动,播放器可能处于不同的状态:播放、暂停、缓冲或结束。每个状态下,播放…

Linux awk命令教程:如何有效处理文本和数据分析(附案例详解和注意事项)

Linux awk命令介绍 awk是一个强大的文本分析工具,其本质上是一个数据驱动式的脚本语言,用于处理文本,并对文本进行诸如生成报告等各种操作。这是一个强大的Linux命令行程序,用于处理和分析文本文件,特别是那些对文本格…

【Linux】 last 命令使用

last 命令 用于检索和展示系统中用户的登录信息。它从/var/log/wtmp文件中读取记录,并将登录信息按时间顺序列出。 著者 Miquel van Smoorenburg 语法 last [-R] [-num] [ -n num ] [-adiox] [ -f file ] [name...] [tty...]last 命令 -Linux手册页 选项及作用…

惯性动作捕捉技术,驱动数字人助力企业晚会活动主持

惯性动作捕捉现已成为各大数字人应用领域中耳熟能详的技术词汇,通过惯性动作捕捉技术驱动数字人,应用于虚拟主播、虚拟偶像、虚拟主持人、IP短视频等场景,如2023青科会的虚拟主持人“唯思”、成都全国科普日虚拟IP“科科”、广州国际购物节虚…

SQL高级:窗口函数

窗口函数,顾名思义,它的操作对象是窗口,即一个小的数据范围,而不是整个结果集。并且它是一个函数,在SQL中使用,所以一定有返回值。 窗口函数是SQL中非常有趣的部分,这一节我们就来学习一下它。 辅助表 方便我们后边的讲解,这里我们要建一张学生成绩表,建表语句如下…