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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 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 即可

相关文章
|
7天前
|
存储 监控 数据可视化
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
|
2月前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
131 17
|
1月前
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
|
2月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
113 7
|
4月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
239 6
|
4月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
103 1
|
3月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
359 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
6月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
6月前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
3月前
|
运维 监控 持续交付
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。
751 36
微服务架构解析:跨越传统架构的技术革命