【Minio】基于AWS S3协议搭建个人云存储服务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【Minio】基于AWS S3协议搭建个人云存储服务相关的知识,希望对你有一定的参考价值。

参考技术A 在2007年,GlusterFS演变为大型分布式存储方案后,任何配备合适硬件的公司,单位都可以利用个做分布式的流媒体,数据分析。在2011年,Red Hat收购了GlusterFS.

Minio是GlusterFS创始人之一Anand Babu Periasamy发布新的开源项目。Minio兼容Amason的S3分布式对象存储项目,采用Golang实现,客户端支持Java,Python,Javacript, Golang语言。

Minio 提供对象存储服务,兼容了 AWS S3 存储协议,用于非结构化的数据存。非结构化对象,比如图像,音、视频,日志文件,备份镜像…等等管理不方便,不定长,大小变化大、类型多,云端的访问复杂,minio就是来解决这种场景的。非结构化的文件从数KB到5TB都能很好的支持。开源并且用 Go 语言开发,有web操作界面,我们可以用它来搭建兼容S3协议的存储云服务。

Minio可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作在Windows,Linux, OS X和FreeBSD上。配置简单,基本是复制可执行程序,单行命令可以运行起来。

官网: https://minio.io

那么,如何自己搭建一个私有的S3存储云服务呢?

官方的话是推荐用Docker来搞,我们先用普通的二进制文件来直接解决了!

######################################################################################

# mkdir /data/aws_s3

# wget   https://dl.minio.io/server/minio/release/linux-amd64/minio

# mv  minio /usr/local/bin/

#  chmod  755  /usr/local/bin/minio 

# minio server  /data/aws_s3

#############################################################

Created minio configuration file successfully at /root/.minio

Endpoint: http://10.5.10.89:9000   http://127.0.0.1:9000   http://172.17.0.1:9000

AccessKey: U3XLU4IMXY3IDKHU268F 

SecretKey: /6NCL6HGacviaCgRqr2qLbVOjhkkJdRpV7wz0JJD 

Region:    us-east-1

SQS ARNs:  

Browser Access:

http://10.5.10.89:9000   http://127.0.0.1:9000   http://172.17.0.1:9000

Command-line Access:  https://docs.minio.io/docs/minio-client-quickstart-guide

################################################################

$ mc config host add myminio  http://10.5.10.89:9000  U3XLU4IMXY3IDKHU268F /6NCL6HGacviaCgRqr2qLbVOjhkkJdRpV7wz0JJD

Object API (Amazon S3 compatible):

Go:  https://docs.minio.io/docs/golang-client-quickstart-guide

Java:  https://docs.minio.io/docs/java-client-quickstart-guide

Python:  https://docs.minio.io/docs/python-client-quickstart-guide

JavaScript:  https://docs.minio.io/docs/javascript-client-quickstart-guide

Drive Capacity: 8.3 GiB Free, 9.1 GiB Total

##############################################################

我们就成功启动了minio的s3服务,默认端口9000,可以通过网页访问:

http://10.5.10.89:9000  

http://127.0.0.1:9000  

http://172.17.0.1:9000

注意 :第一次打开时候需要填写AccessKey和SecretKey才能进入,我们上面启动服务的时候,已经看到屏幕有输出:

AccessKey: U3XLU4IMXY3IDKHU268F 

SecretKey:6NCL6HGacviaCgRqr2qLbVOjhkkJdRpV7wz0JJD

把这两个Key填入,就能顺利进入,进入后展开页面如下:

这就是我们的S3云存储的管理页面了,看着是不是和七牛什么的提供云存储的产品页面挺像的,大家都是基于S3协议开发的!

上传个文件试试:

点击右下角的红色小加号按钮,弹出的菜单选择”create bucket”则会创建一个桶,输入名字”test”

点击刚才那个红色小加号按钮,这次选择”Upload file”上传文件,给这个桶上传了一个叫login.txt的文本文档

此时页面如下:

至此我们可以看到文件已经上传,要访问这个文件,可以点击文件右侧的三个点的按钮,选择分享就可以得到一个外链,在浏览器中访问这个外链就可以直接访问文件。

那么文件到底被存到哪里去了呢,我们启动命令中其实指定了工作路径/data/aws_s3/,所以到服务器这个目录下看看:

# ls /data/aws_s3/ 

test

# ls /data/aws_s3/test/

login.txt 

桶名称test是一个目录,其下就有上传的login.txt文件。

如果想指定ip和端口,可以这样写:

# minio server /data/aws_s3 --address=0.0.0.0:9000

如果想让服务在后台运行:

# nohup minio server /data/aws_s3   --address=0.0.0.0:443 &

[1] 19882

// nohup: 忽略输入并把输出追加到启动命令的当前目录下的 "nohup.out"文件

minio可以用来搭建分布式存储系统 GlusterFS,这样就成了真正的云存储了,有时间再研究下把它从现在的单机测试,变成一朵存储云!

minio官网: https://minio.io

minio官方文档: https://docs.minio.io/docs/minio-docker-quickstart-guide

minio github主页: https://github.com/minio/minio

对象存储MinIO的简介与部署

MinIO简介

MinIO 是一款高性能的对象存储,与 Amazon S3 云存储服务兼容。
自成立以来,MinIO的软件定义套件在公共云、私有云和边缘云中无缝运行,使其成为混合云和多云对象存储领域的领导者。
MinIO号称是世界上最快的对象存储服务器。在标准硬件上,对象存储的读写速度分别为183gib/s和171gib/s。对象存储可以作为主存储层,用来处理Spark、Presto、TensorFlow、H2O.ai等各种复杂工作负载以及成为Hadoop HDFS的替代品。

MinIO的特点:

1、适合存储大容量非结构化的数据,如图片,视频,日志文件;
2、一个对象文件可以任意大小,从几 KB 到最大的 5T 不等;
3、非常轻量,可以很简单的和其它的应用结合,类似于 NodeJS, Redis 或者 MySQL
4、MinIO 默认不计算 MD5 ,除非传输给客户端的时候,所以很快;
5、支持 windows;
6、有 web 页进行管理,命令行和控制台双重管理;
7、分布式集群支持动态升级;
8、如数据不调接口写入,而是直接写数据目录,集群数据可能不同步(如果rancher部署,则可考虑结合Longhorn解决)

MinIO的官网:

MinIO官方文档非常详细,但一定要看它的英文版文档(https://docs.min.io/docs/),中文版文档(http://docs.minio.org.cn/docs)比较陈旧,新版本MinIO的信息没有完全更新
比如用mc命令删除存储桶,中文版文档写的用rm,而新版本的MinIO要用rb才能删除存储桶。

MinIO架构:

MinIO除了Server,还有Clinet。MinIO Client (mc)为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)。
mc常用命令:

alias       set, remove and list aliases in configuration file
ls          list buckets and objects
mb          make a bucket
rb          remove a bucket
cp          copy objects
mirror      synchronize object(s) to a remote site
cat         display object contents
head        display first n lines of an object
pipe        stream STDIN to an object
share       generate URL for temporary access to an object
find        search for objects
sql         run sql queries on objects
stat        show object metadata
mv          move objects
tree        list buckets and objects in a tree format
du          summarize disk usage recursively
retention   set retention for object(s) and bucket(s)
legalhold   set legal hold for object(s)
diff        list differences in object name, size, and date between two buckets
rm          remove objects
version     manage bucket versioning
ilm         manage bucket lifecycle
encrypt     manage bucket encryption config
event       manage object notifications
watch       listen for object notification events
undo        undo PUT/DELETE operations
policy      manage anonymous access to buckets and objects
tag         manage tags for bucket(s) and object(s)
replicate   configure server side bucket replication
admin       manage MinIO servers
update      update mc to latest release

MinIO Admin
MinIO Client(mc)提供了“ admin”子命令来对MinIO部署执行管理任务。
常用命令:

service     restart and stop all MinIO servers
update      update all MinIO servers
info        display MinIO server information
user        manage users
group       manage groups
policy      manage policies defined in the MinIO server
config      manage MinIO server configuration
heal        heal disks, buckets and objects on MinIO server
profile     generate profile data for debugging purposes
top         provide top like statistics for MinIO
trace       show http trace for MinIO server
console     show console logs for MinIO server
prometheus  manages prometheus config
kms         perform KMS management operations
bucket      manage buckets defined in the MinIO server

MinIO部署(二进制部署)

1、二进制单节点部署(生产不建议单节点):

MinIO-Server部署:

1)创建minIO的安装目录和数据目录:

mkdir /home/minio/app,data -p

2)下载minIO并赋予执行权限:

cd /home/minio/app
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio

3)启动应用

MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=mypassword /home/minio/app/minio server /home/minio/data --console-address ":9001" &

启动参数说明:
MINIO_ROOT_USER:设置管理员用户,如未指定,默认为minioadmin
MINIO_ROOT_PASSWORD:设置管理员密码,如未指定,默认为minioadmin
MINIO_ROOT_USER和MINIO_ROOT_PASSWORD两个参数值就是在web控制台登录minIO时使用的账号密码。
--console-address ":9001":指定控制台静态端口
minio有两个端口,固定端口9000是API端口;前端访问的console端口默认随机启动的一个动态端口,如果希望使用固定端口,就需要在启动时加上--console-address参数指定端口。
如果没有指定--console-address,执行启动命令后在控制台输出的日志中会有如下提示:

WARNING: Console endpoint is listening on a dynamic port (34513), please use --console-address ":PORT" to choose a static port.

查看版本号

[root@test-67 home]# ./minio -version
minio version RELEASE.2021-12-10T23-03-39Z
[root@test-67 home]#

MinIO-Client部署:

wget https://dl.min.io/client/mc/release/linux-amd64/mc 
chmod +x mc 
mv mc /usr/bin
mc alias set myminio http://10.88.99.67:9000 admin mypassowrd  #admin和password是在部署server时设置的

用mc查看目录:

2、docker方式部署单节点MinIO

MinIO-Server部署:

mkdir -p /home/minio/data   #创建本地数据目录

docker run \\
  -p 9000:9000 \\
  -p 9001:9001 \\
  --name minio1 \\
  -v /home/minio/data:/data \\
  -e "MINIO_ROOT_USER=admin" \\
  -e "MINIO_ROOT_PASSWORD=mypassword" \\
  quay.io/minio/minio server /data --console-address ":9001"

如果离线部署,就将命令中quay.io/minio/minio换成私有镜像,如:

docker run -d --privileged --restart=unless-stopped \\
  -p 9000:9000 \\
  -p 9001:9001 \\
  --name minio \\
  -v /home/minio/data:/data \\
  -e "MINIO_ROOT_USER=admin" \\
  -e "MINIO_ROOT_PASSWORD=mypassword" \\
  www.harbor.com/library/minio:RELEASE.2021-12-10T23-03-39Z server /data --console-address ":9001"

www.harbor.com: 私有harbor域名
library:项目名称
minio:RELEASE.2021-12-10T23-03-39Z:我自己重新打了tag的镜像

MinIO-Client部署:

docker run -it --entrypoint=/bin/sh minio/mc  #私有仓库部署也注意换镜像

部署验证

在浏览器输入http://10.88.99.67:9001 即可访问,登录用户和密码即启动命令中MINIO_ROOT_USER和MINIO_ROOT_PASSWORD的value值。

登录后,能看到当前节点数量:

这里显示的是当前资源使用状况:

MinIO的简单使用

1、创建Bucket

方法一:浏览器控制台创建:

方法二:用mc命令行创建:

mc mb /home/minio/data/test

2 文件上传

方法一:浏览器控制台上传
创建好Bucket之后,点击“Browse”按钮可以进入文件上传界面:

点击下图上传按钮即可上传文件:

方法二:客户端mc命令行上传文件:
1)将要上传的文件放到服务器,如SRE.jpg
2)执行命令上传:

mc cp SRE.jpg myminio/test

注释:因为部署mc时有设置alias:mc alias set myminio http://10.88.99.67:9000 admin mypassowrd,所以这里可以直接用myminio/test

操作截图:

对单节点,还可以直接上传文件到数据目录(不建议):

mc cp SRE.jpg /home/minio/data/test/

操作截图:

到浏览器控制台检查文件(如果是上传到的数据目录,时间可能有一定的延迟,上传完之后,需要等一下才会看到):

点击上图文件右边的“分享”按钮,可以形成该文件的分享链接(注意:这里链接中的端口是9000,不是9001了哦),并自定义链接的有效期,最长是7天:

拿到URL在浏览器就可以看到刚刚的文件:

3 文件删除

方法一:浏览器控制台删除

方法二:mc命令删除

mc rm myminio/test/SRE.jpg     #删除一个文件
mc rb myminio/test --force   #删除一个Bucket要用rb,rm删不掉Bucket,
# 注意:删除一个存储桶并递归删除里面所有的内容。由于这个操作太危险了,你必须加--force参数指定强制

4 创建和删除用户

方法一:控制台界面创建新用户

方法二:命令行用admin创建
和centos创建用户一样,可以一键创建,也可以交互式创建

[root@test-67 minio]# mc admin user add myminio/ minio67 pwd-minio67 #一键创建
Added user `minio67` successfully.
[root@test-67 minio]# 
[root@test-67 minio]# mc admin user add myminio/ 
Enter Access Key: minio67-1   #输入username
Enter Secret Key:             #输入密码
Added user `minio67-1` successfully.
[root@test-67 minio]#

创建好用户后,在控制台可以看到,并可以执行删除、编辑修改等操作:

上面两条命令只单纯创建了一个用户,没有添加任何的权限策略,加上权限策略:

mc admin policy set myminio/ writeonly user=minio67  #权限为writeonly

命令行删除用户

mc admin user remove myminio/ minio67

这就是单节点MinIO的部署和简单操作。

官网文档:https://docs.min.io/

以上是关于【Minio】基于AWS S3协议搭建个人云存储服务的主要内容,如果未能解决你的问题,请参考以下文章

基于AWS S3协议搭建个人云存储服务

MinIO 分布式集群搭建

MinIO 搭建

基于Docker部署Spark和MinIO Server

通过S3协议实现通用的文件存储服务中间件

极光笔记丨搭建UMS私有云文件服务器