从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(九)文件服务篇(1):minio 单机与集群搭建

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(九)文件服务篇(1):minio 单机与集群搭建

image.png

为什么需分布式文件服务


单机时代

初创时期由于时间紧迫,在各种资源有限的情况下,通常就直接在项目目录下建立静态文件夹,用于用户存放项目中的文件资源。如果按不同类型再细分,可以在项目目录下再建立不同的子目录来区分。例如:resources\static\file、resources\static\image等。


优点:这样做比较便利,项目直接引用就行,实现起来也简单,无需任何复杂技术,保存数据库记录和访问起来也很方便。

缺点:如果只是后台系统的使用一般也不会有什么问题,但是作为一个前端网站使用的话就会存在弊端。一方面,文件和代码耦合在一起,文件越多存放越混乱;另一方面,如果流量比较大,静态文件访问会占据一定的资源,影响正常业务进行,不利于网站快速发展。

1.1.2 独立文件服务器

随着公司业务不断发展,将代码和文件放在同一服务器的弊端就会越来越明显。为了解决上面的问题引入独立图片服务器,工作流程如下:项目上传文件时,首先通过ftp或者ssh将文件上传到图片服务器的某个目录下,再通过ngnix或者apache来访问此目录下的文件,返回一个独立域名的图片URL地址,前端使用文件时就通过这个URL地址读取。

优点:图片访问是很消耗服务器资源的(因为会涉及到操作系统的上下文切换和磁盘I/O操作),分离出来后,Web/App服务器可以更专注发挥动态处理的能力;独立存储,更方便做扩容、容灾和数据迁移;方便做图片访问请求的负载均衡,方便应用各种缓存策略(HTTP Header、Proxy Cache等),也更加方便迁移到CDN。

缺点:单机存在性能瓶颈,容灾、垂直扩展性稍差


分布式文件系统

通过独立文件服务器可以解决一些问题,如果某天存储文件的那台服务突然down了怎么办?可能你会说,定时将文件系统备份,这台down机的时候,迅速切换到另一台就OK了,但是这样处理需要人工来干预。另外,当存储的文件超过100T的时候怎么办?单台服务器的性能问题?这个时候我们就应该考虑分布式文件系统了。

业务继续发展,单台服务器存储和响应也很快到达了瓶颈,新的业务需要文件访问具有高响应性、高可用性来支持系统。分布式文件系统,一般分为三块内容来配合,服务的存储、访问的仲裁系统,文件存储系统,文件的容灾系统来构成,仲裁系统相当于文件服务器的大脑,根据一定的算法来决定文件存储的位置,文件存储系统负责保存文件,容灾系统负责文件系统和自己的相互备份。

优点:扩展能力: 毫无疑问,扩展能力是一个分布式文件系统最重要的特点;高可用性: 在分布式文件系统中,高可用性包含两层,一是整个文件系统的可用性,二是数据的完整和一致性;弹性存储: 可以根据业务需要灵活地增加或缩减数据存储以及增删存储池中的资源,而不需要中断系统运行

缺点:系统复杂度稍高,需要更多服务器


常用的分布式文件服务有哪些


常见的分布式文件系统有GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS、FastDFS等。各自适用于不同的领域。它们都不是系统级的分布式文件系统,而是应用级的分布式文件存 储服务


为什么选择minio,minio优点


Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。 即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据。


Minio的特性:

Amazon S3兼容


Minio使用Amazon S3 v2 / v4 API。可以使用Minio SDK,Minio Client,AWS SDK和AWS CLI访问Minio服务器。


数据保护


Minio使用Minio Erasure Code来防止硬件故障。也许会损坏一半以上的driver,但是仍然可以从中恢复。


高度可用


Minio服务器可以容忍分布式设置中高达(N / 2)-1节点故障。而且,您可以配置Minio服务器在Minio与任意Amazon S3兼容服务器之间存储数据。


Lambda计算


Minio服务器通过其兼容AWS SNS / SQS的事件通知服务触发Lambda功能。支持的目标是消息队列,如Kafka,NATS,AMQP,MQTT,Webhooks以及Elasticsearch,Redis,Postgres和MySQL等数据库。


加密和防篡改


Minio为加密数据提供了机密性,完整性和真实性保证,而且性能开销微乎其微。使用AES-256-GCM,ChaCha20-Poly1305和AES-CBC支持服务器端和客户端加密。加密的对象使用AEAD服务器端加密进行防篡改。


可对接后端存储


除了Minio自己的文件系统,还支持DAS、 JBODs、NAS、Google云存储和Azure Blob存储。


sdk支持


基于Minio轻量的特点,它得到类似Java、Python或Go等语言的sdk支持


总结起来就是轻量,便于维护,便于扩展,安全性高,性能强大


单机版搭建


进入服务器然后直接执行以下命令

mkdir /minio/{data,logs}  -p #创建文件夹

cd /minio  ##进入文件夹

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

./minio server --address ":9009" --console-address 0.0.0.0:9001 /root/minio/data/ > /minio/data/minio.log 2>&1 & ##启动  --address 指定api端口 --console-address 指定web控制台端口

启动后 记得防火墙开启 9001 和9009端口

firewall-cmd --zone=public --add-port=9009/tcp --permanent

firewall-cmd --zone=public --add-port=9001/tcp --permanent

firewall-cmd --reload  

然后通过浏览器访问 http://ip:9001

默认账号密码 : minioadmin minioadmin ,登陆后如下图

1.png

集群版搭建


集群版至少需要4个硬盘分区,不然会报磁盘数量不足错误,最好是找4台服务器,或者添加多个硬盘做到至少4个磁盘可用

比如目前我得集群构成如下(举例)


minio 服务器集群


ip
描述
页面控制台端口 
后台通讯端口
192.168.1.1
mino slave
9001
9009
192.168.1.2
mino slave
9001
9009
192.168.1.3
mino slave
9001
9009
192.168.1.4
mino slave
9001
9009
192.168.1.5
nginx 负载(主要用来对后台请求负载均衡的) 
9090


分别进入前四台机器执行如下命令:
mkdir /minio/{app,config,data,logs} -p #创建文件夹
然后将下载好的 minio文件手动活scp放到 /minio目录
vi run.sh #编写启动脚本
#!/bin/bash
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=admin@minio
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=admin@minio
/minio/minio server --config-dir /minio/config  --address ":9009" --console-address ":9001" \
http://192.168.1.182:9009/minio/data \
http://192.168.1.106:9009/minio/data \
http://192.168.1.82:9009/minio/data \
http://192.168.1.97:9009/minio/data >/minio/logs/start.txt 2>&1 &
四台机器分别执行sh run.sh ,启动完毕
启动后进入单个独立的控制台和单机版一样,不同的是,四台机器所有数据都是一样的,某个控制台上传的文件都会同步到其他机器
nginx 搭建
详细搭建不过多说,之说明一下nginx.conf的配置
upstream minio-server {
    server 192.168.1.1:9009 weight=25 max_fails=2 fail_timeout=30s;
    server 192.168.1.2:9009 weight=25 max_fails=2 fail_timeout=30s;
    server 192.168.1.3:9009 weight=25 max_fails=2 fail_timeout=30s;
    server 192.168.1.4:9009 weight=25 max_fails=2 fail_timeout=30s;
}
server {
    listen 9090;
    listen 443;
    server_name minio-aaa.com ;
    ssl on;
   ssl_certificate   /usr/local/nginx/conf/cert/k8s/3877901__aaa.com.pem;
   ssl_certificate_key  /usr/local/nginx/conf/cert/k8s/3877901__aaa.com.key;
    charset utf-8;
    default_type text/html;
    location /{
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $remote_addr;
        client_body_buffer_size 10M;
        client_max_body_size 10G;
        proxy_buffers 1024 4k;
        proxy_read_timeout 300;
        proxy_next_upstream error timeout http_404;
        proxy_pass http://minio-server;
    }
    error_log   /data1/logs/minio/error.log;
    access_log  /data1/logs/minio/access.log  access;
}

启动完毕后,后台java程序只需要连接nginx所在服务器ip端口9090 即可

相关文章
|
27天前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
51 2
|
1月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
100 3
|
2月前
|
Java 对象存储 开发者
解析Spring Cloud与Netflix OSS:微服务架构中的左右手如何协同作战
Spring Cloud与Netflix OSS不仅是现代微服务架构中不可或缺的一部分,它们还通过不断的技术创新和社区贡献推动了整个行业的发展。无论是对于初创企业还是大型组织来说,掌握并合理运用这两套工具,都能极大地提升软件系统的灵活性、可扩展性以及整体性能。随着云计算和容器化技术的进一步普及,Spring Cloud与Netflix OSS将继续引领微服务技术的发展潮流。
54 0
|
30天前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
30天前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
1月前
|
Java 数据库 数据安全/隐私保护
Spring 微服务提示:使用环境变量抽象数据库主机名
Spring 微服务提示:使用环境变量抽象数据库主机名
40 1
|
1月前
|
监控 Java 对象存储
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
42 1
|
1月前
|
安全 Java 对象存储
安全性考量:Spring Security与Netflix OSS在微服务安全中的作用
安全性考量:Spring Security与Netflix OSS在微服务安全中的作用
43 1
|
2月前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
102 5
|
2月前
|
Java 对象存储 开发者
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
53 3