搭建自己的分布式云存储--minio

起因

前段时间小站ilib.vip开通后,忙着备案,后来注册了一个新域名rplib.cn,准备用这个来作为正式域名使用。结果那边的备案已经下来了。没办法,只能新开网站备案。后来腾讯客服和我讲了一堆,什么博客系统广东省要居住证、什么内容上有交互的要重新提交审核,,,,,一堆一堆的。
没办法,我不在国内服务器上玩了可以吧?于是开始迁移站点到香港服务器。结果就碰到问题了,代码和本地数据库很容易迁移,但是原来站点上使用的是云存储是腾讯云成都本地的COS,那么我必须要把那些图片全部DOWN下来,然后放在本地的UPLOADS里,然后要把数据库里所有的链接地址全部改一遍。。。。
虽然这并没什么难度,但是很烦。本来想一直使用腾讯的COS,但是想着那台服务器快要到期了,现在COS的免费政策也只能有半年。最关键的是,COS要绑定域名,都要提供在国内已备案的域名。这个事情让我非常恼火。。。现在在国内做开发的,没有备案域名,连个小程序也做不了。。。
那有没有什么办法可以破这个局呢?
我找了一下,发现了一个神器----MINIO,分布式对象存储服务器,关键,它还开源!

初识MINIO

官方是这么介绍它的:
MinIO是一种高性能的分布式对象存储系统。它是软件定义的,可在行业标准硬件上运行,并且在Apache V2许可下是100%开放源代码。

MinIO的不同之处在于,它从一开始就被设计为私有云对象存储的标准。因为MinIO是专门为仅服务对象而构建的,所以单层体系结构可实现所有必需的功能而不会妥协。结果是一个同时具有性能,可伸缩性和轻量级的云原生对象服务器。

尽管MinIO在传统对象存储用例(例如辅助存储,灾难恢复和归档)方面表现出色,但在克服与机器学习,分析和云原生应用程序工作负载相关的私有云挑战方面却独树一帜。

2019-11-01T10:03:04.png

官网: https://min.io/
GITHUB: https://github.com/minio/minio
文档: https://docs.min.io/docs

支持分布式

超大规模革命的核心是这样一个概念,即计算和存储应该分开并且是同类最佳的。这种架构可带来更好的性能,容量利用率和I / O,同时降低空间,冷却和电源需求。MinIO致力于构建全球最佳的私有云,软件定义的对象存储系统。

简单

极简主义是MinIO的指导性设计原则。简单性减少了出错的机会,提高了正常运行时间,提供了可靠性,同时又是性能的基础。只需下载一个二进制文件然后执行,即可在几分钟内安装和配置MinIO。将配置选项和变更的数量保持在最低限度,这将导致几乎为零的系统管理任务和更少的失败途径。降低总拥有成本 - 升级MinIO与单个命令,其是非破坏性的,并会导致零停机完成。

性能

MinIO专注于高性能,使企业可以在同一平台上支持多个用例。例如,MinIO的性能特征意味着您可以运行多个Spark,Presto和Hive查询,或者快速测试,训练和部署AI算法,而不会遇到存储瓶颈。MinIO对象存储用作云本机应用程序的主要存储,与传统对象存储相比,这些应用程序需要更高的吞吐量和更低的延迟。

可扩展性

MinIO利用了Web缩放器的来之不易的知识,为对象存储带来了简单的缩放模型。这伴随着“简单事物扩展”的坚定信念。在MinIO上,扩展从单个群集开始,该群集可以与其他MinIO群集联合以创建全局名称空间,并在需要时跨越多个数据中心。通过添加更多集群,更多机架直到实现目标,可以扩展名称空间。

Amazon S3兼容性

亚马逊的S3 API是对象存储世界中的事实上的标准,代表了市场上最现代的存储API。MinIO早期采用了S3兼容性,并且是第一个对其进行扩展以支持S3 Select的。MinIO对其兼容性的全面性感到自豪,并指出了这样一个事实,即有750多个组织使用MinIO的S3网关-比其他行业的总和还多。

自由

MinIO是Apache V2许可下的100%开放源代码。这意味着,MinIO的客户来自于锁免费,免费检查,免费进行创新,随意修改,并免费再分发。实际上,MinIO支持来自多个《财富》 500强组织的产品。MinIO的许可方法的纯正及其订阅支持产品的质量使该公司成为全球增长最快的私有云对象存储系统。

请忽略以上由GOOGLE翻译友情提供的翻译结果,大概了解这个意思就行了。。。
另外官网上还有很多很好的特征介绍的,有兴趣的可以去看一下。

反正,这家伙经过自己的安装和配置,完全可以当成自己的COS/OSS/S3来使用,并且它还可以兼容S3,就是可以直接连接到S3上进行操作。
2019-11-01T10:09:38.png =700x

试想一下,如果我们自己搭一个多节点的分布式对象存储服务器,一个域名搞定所有的文件、图片、视频的存储,而且不用另外花钱。而且数据也非常安全。随时迁移代码和数据库,不会对文件数据造成任何影响。这有多方便?

安装

DOCKER方式安装服务端

首先你得先有装过DOCKER,然后将你的本地文件夹建好,以映射到DOCKER的应用程序数据。以防DOCKER重启后数据全部丢失。

docker run -p 9000:9000 --name minio1 \
  -e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \
  -e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
  -v /mnt/data:/data \
  minio/minio server /data
以上的注释:
  • 运行一个容器名为minio1,宿主机端口在前面为9000,映射到容器端口为9000,有需要的自己改;
  • 设置ACCESS_KEY和SECERT_KEY,这两个相当于访问时的用户名和密码;
  • 映射本地文件夹/mnt/data作为容器的/data文件夹使用。这里会将所有的配置文件和存储桶及里面的文件全部存放在/mnt/data里。
  • 取回的容器名为minio/minio 。

然后你就可以使用DOCKER命令来玩了:

  • docker start <container_id> #启动容器
  • docker stop <container_id> #停止容器
  • docker logs <container_id> #容器日志
  • docker stats <container_id> #容器状态
当然你还可以在WINDOWS上使用DOCKER来安装MINIO,命令有所不同,自己去文档里查看去。你还有很多可以使用的命令,配置各种参数,有兴趣可以去研究一下文档。

打开http://127.0.0.1:9000,你就能看到登录的界面了,输入你设定的ACCESS_KEY和SECERT_KEY,就可以登录了。
2019-11-01T10:47:14.png

分布式的安装,就需要修改配置文件,这里不讲了,有兴趣去看文档,网上也有很多教程。

通过源码安装

官方的安装办法

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

网友的安装办法(可以加入到服务里,好管理)(以下摘自BRUCE'S BLOG)

安装服务端

wget https://dl.min.io/server/minio/release/linux-amd64/minio -O /usr/local/bin/minio && chmod +x /usr/local/bin/minio
就是将minio可执行文件下载到/usr/local/bin/目录下并添加可执行权限。

设置服务

下载systemd文件,用于使用systemctl来控制启动/停止/开机自启等

wget https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service -O /usr/lib/systemd/system/minio.service

编辑'minio.service'文件

vim /usr/lib/systemd/system/minio.service

注释掉'user'和'group':

#User=minio-user
#Group=minio-user

重载minio.service文件:

systemctl daemon-reload

填写minio配置文件

由于我们使用'systemctl'来管理'minio'的启动,所以配置要被'minio.service'调用。
编辑minio的配置文件(这个文件是在minio.service中的这句EnvironmentFile=/etc/default/minio中被调用的):

vim /etc/default/minio

把以下内容放进去:

# 指定数据存储目录(注意这个目录要存在)
MINIO_VOLUMES="/data/minio"

# 指定监听端口(也可以不监听具体ip,只写 :9199即可)
MINIO_OPTS="--address 127.0.0.1:9199"

# Access key,相当于账号
MINIO_ACCESS_KEY="CHAW*******I1EWP2"

# Secret key,相当于密码
MINIO_SECRET_KEY="diEvRU6eQez**********Dkkpo4srSh+p"

# 区域值,这是完全自己写的,比如你愿意的话写“abcd”也行,但标准格式是“国家-区域-编号”,
# 如“中国-华北-1号”就可写成“cn-north-1”,又比如“美国-西部-2号”可写成“us-west-1”
MINIO_REGION="cn-south-1"

# 域名
MINIO_DOMAIN=minio.your_domain.com

其中的参数自己看着修改,比如数据存储的目录,域名要与nginx的反代的域名一致等。

操作命令

  • systemctl start minio
  • systemctl status minio
  • systemctl restart minio
  • systemctl stop minio

使用

MINIO可以安装客户端来进行命令行操作,也提供各种环境的SDK和API。
我尝试着安装了一下LINUX的客户端,(客户端和服务器可以是同一台主机,但是不能都用DOCKER来跑,,,不知道为什么。)

下载客户端

客户端就是一个小的可执行程序,你可以直接下载就能用:

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
./mc --help

配置客户端

配置客户端参数以连接服务器端

mc config host add minio http://192.168.1.51 BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
  • 主要就是服务器名、地址、ACCESS_KEY、SECRET_KEY
  • 你可以填写其它的一些参数,具体可查询文档
  • 你可以修改/root/.mc/config.json文档来直接修改里面的参数

操作

MinIO Client(mc)为ls,cat,cp,mirror,diff,find等UNIX命令提供了现代的替代方案。它支持文件系统和与Amazon S3兼容的云存储服务(AWS Signature v2和v4)。

ls       list buckets and objects
mb       make a bucket
rb       remove a bucket
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
cp       copy objects
mirror   synchronize objects to a remote site
find     search for objects
sql      run sql queries on objects
stat     stat contents of objects
diff     list differences in object name, size, and date between buckets
rm       remove objects
event    manage object notifications
watch    watch for object events
policy   manage anonymous access to objects
admin    manage MinIO servers
session  manage saved sessions for cp command
config   manage mc configuration file
update   check for a new software update
version  print version info

附言

  • 你可以用NGINX反代,将这个服务器用域名武装起来。然后再在你的项目里将需要的文件上传到这里,然后只保存链接到数据库,需要的时候直接从这里取就行了。
  • 我和菜菜子(没错就是写那个腾讯COS V5附件上传插件的大神)沟通了一下,他今天已经实现了文件上传。看看他什么时候完成这个TYPECHO的新插件,如果完成就放出来给大家。
  • 有空还是多研究,可以省不少精力和金钱,还多一门知识。

2019-11-01T10:53:42.png

本文链接:

https://rplib.cn/archives/da-jian-zi-ji-de-fen-bu-shi-yun-cun-chu-minio.html
1 + 4 =
快来做第一个评论的人吧~