MinIO部署简单使用

news2024/11/23 21:26:43

前言

前面我们做了分布式文件存储系统FastDFS的部署应用,其安装还是比较繁琐的,而且实际生产的应用限制较大,下面,介绍一款开源的文件系统——MinIO,它是一种对象存储解决方案,提供与 Amazon Web Services S3 兼容的 API 并支持所有核心 S3 功能,同时有完善的官网几文档,在实际生产中也有较多应用。

单机部署

首先,我们从官网下载MinIO的二进制文件,下载地址,然后上传到我们的服务器上,修改权限chmod +x minio,然后设置用户名和密码,注意,用户名长度至少3位,密码长度至少8位,export MINIO_ACCESS_KEY=minioexport MINIO_SECRET_KEY=minioadmin,然后可以通过nohup ./minio server --address :9000 --console-address :9001 /tools/MinIO/minio_server/data > /tools/MinIO/minio_server/data/minio.log &命令进行后台启动,这里address对应的是服务端口,而console-address对应的是控制台端口,这样,我们就完成了单机的部署,访问下控制台服务器ip:9001
在这里插入图片描述
根据提示创建bucket,注意命名需要符合规则
在这里插入图片描述
确认当前bucket的权限是读写权限
在这里插入图片描述
通过控制台测试上传文件
在这里插入图片描述
由于这里账号密码是通过export声明的,因此每次重启服务都需要重新执行,所以我们将其设为开机自启服务,创建启动脚本miniostart.sh,添加如下内容

export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=minioadmin
/tools/MinIO/minio_server/minio server  --address :9000 --console-address :9001 /tools/MinIO/minio_server/data > /tools/MinIO/minio_server/data/minio.log &

修改权限chmod 777 miniostart.sh,编辑文件vi /etc/rc.d/rc.local,将本启动脚本的完整路劲添加进去即可。

集群部署

minio集群部署,官方建议至少4个节点,因为只有n/2个节点存活才能保证读业务,n/2+1个节点存货才能保证写业务,因此我们这里配置了四台机器,同时需要保证每个节点间的时间保持一致,因此先开启时间同步,我们这里采用ntp的方式,安装yum -y install ntp,设置开机启动systemctl enable ntpd,systemctl start ntpd,设置时间同步timedatectl set-ntp yes,然后更新时间ntpdate -u cn.pool.ntp.org,设置国内的时区ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime,操作完成后我们可以通过data命令查看时间是否一致。接下来我们开始部署集群,请注意,暂停操作,先看本文档。创建相关的目录mkdir /home/ysgs/tools/minio/{config,data,logs} -p,然后上传二进制文件或者执行下载命令wget https://dl.min.io/server/minio/release/linux-amd64/minio 执行安装chmod +x minio,接着我们创建启动脚本,如下所示

#用户名
export MINIO_ACCESS_KEY=minio
#密码
export MINIO_SECRET_KEY=minioadmin
#minio启动路径,设置配置路径,服务端口9000,控制台端口9001,数据存储路径对应四个节点
/home/ysgs/tools/minio/minio server  --config-dir /home/ysgs/tools/minio/config --address ":9000"  --console-address ':9001' \
http://192.168.136.128/home/ysgs/tools/minio/data \
http://192.168.136.131/home/ysgs/tools/minio/data \
http://192.168.136.132/home/ysgs/tools/minio/data \
http://192.168.136.133/home/ysgs/tools/minio/data > /home/ysgs/tools/minio/logs/minio.log &

然后我们尝试启动,结果发现日志有报错Drive /mnt/data1is part of root drive, will not be used (*errors.errorString),这是因为minio集群需要单独的磁盘挂载,不能使用文件夹代替,因此,需要先挂载磁盘,先关掉虚拟机,进入设置,添加硬盘(从这里开始操作
在这里插入图片描述
启动虚拟机,切换root用户,查看分区信息lsblk
在这里插入图片描述
sdb是未挂在的磁盘,新建目录data2,mkdir /data2,挂载磁盘mount /dev/sdb /data2,如果出现错误,执行mkfs.ext4 /dev/sdb格式化磁盘,再重新挂载,然后通过df -h查看
在这里插入图片描述
这只是临时挂载,我们需要设置自动挂载,编辑挂载配置vim /etc/fstab,在文件末尾追加如下内容/dev/sdb /data2 ext4 defaults 0 0,重启虚拟机查看挂载,正常,然后我们更改启动脚本,将其数据目录换成我们的单独挂载磁盘,如下

export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=minioadmin
/home/ysgs/tools/minio/minio server  --config-dir /home/ysgs/tools/minio/config --address ":9000"  --console-address ':9001' \
http://192.168.136.128/data2/minio/data \
http://192.168.136.131/data2/minio/data \
http://192.168.136.132/data2/minio/data \
http://192.168.136.133/data2/minio/data > /home/ysgs/tools/minio/logs/minio.log &

然后我们逐个启动,启动成功,我们可以尝试访问任意ip:9001,可以发现都能访问成功,我们在任意一台机器上创建bucket之后,其他控制台都能访问到
在这里插入图片描述
在这里插入图片描述
然后我们测试控制台上传文件,看其他节点能否查看到
在这里插入图片描述
至此,集群搭建成功,然后我们可以通过一台nginx代理我们的集群,修改nginx配置文件,在http块中添加如下内容

#服务端节点
upstream minio{
        server 192.168.136.128:9000;
        #server 192.168.136.131:9000;
        server 192.168.136.132:9000;
        server 192.168.136.133:9000;
    }
#控制台节点,采取ip_hash策略
    upstream minio_client{
        ip_hash;
        server 192.168.136.128:9001;
        #server 192.168.136.131:9001;
        server 192.168.136.132:9001;
        server 192.168.136.133:9001;
    }
#监听服务端请求,主要是springboot项目应用
    server{
        listen 9000;
        server_name localhost;
        ignore_invalid_headers off;
        client_max_body_size 0;
        proxy_buffering off;
        location / {
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_connect_timeout 300;
                proxy_http_version 1.1;
                proxy_set_header Connection "";
                chunked_transfer_encoding off;
                proxy_pass http://minio;
        }
    }
#监听控制台请求
    server{
        listen 9001;
        server_name localhost;
        ignore_invalid_headers off;
        client_max_body_size 0;
        proxy_buffering off;
        location / {
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-NginX-Proxy true;
                proxy_connect_timeout 300;
                proxy_http_version 1.1;
                proxy_set_header Connection "";
                chunked_transfer_encoding off;
                proxy_pass http://minio_client;
        }
    }

配置好之后,重启nginx,访问nginx的ip:9001,访问成功,可以看到节点信息
在这里插入图片描述
至此,minio的集群搭建完成。

SpringBoot集成

首先,添加对应的依赖

<!--minio-->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.5.4</version>
        </dependency>

然后,创建minio的相关配置类,我这里并没有做SpringBoot项目启动,因此写的默认值,且没有交给Spring管理,作为参考即可

import io.minio.MinioClient;

public class MinioConfig {
    private String ip ="192.168.136.135";
    private int port = 9000;
    private String accessKey = "minio";
    private String secretKey = "minioadmin";

    public MinioClient minioClient(){
        return MinioClient.builder()
                .endpoint(ip,port,false)
                .credentials(accessKey,secretKey)
                .build();
    }
}

可以看到,我们的ip信息是nginx的ip,这样,我们可以操控集群操作。接下来,进行API的相关测试,这里先给一个官方的QuickStart文档和API地址,我这里只采用创建bucket进行测试,其他的我们参考文档即可

package com.example.test.minio;

import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;

public class test {
    public static MinioClient getMinioClient () {
        MinioConfig minioConfig = new MinioConfig();
        return minioConfig.minioClient();
    }

    /**
     * 创建bucket
     * @param bucketName
     * @throws Exception
     */
    public static void createBucket(String bucketName) throws Exception{
        BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucketName).build();
        if(!getMinioClient().bucketExists(bucketExistsArgs)){
            MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().bucket(bucketName).build();
            getMinioClient().makeBucket(makeBucketArgs);
        }
    }


    public static void main(String[] args) throws Exception {
        createBucket("cluster");
    }

}

我们创建名为cluster的bucket,然后,我们去nginx代理的控制台查看,如下在这里插入图片描述
创建成功,因此,基本的创建bucket操作完成,接下来,我们可以尝试上传、下载文件等IO操作,未完待续…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/725550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【回溯算法Part04】| 93.复原IP地址、78.子集、90.子集||

目录 &#x1f388;LeetCode93.复原IP地址 &#x1f388;LeetCode78.子集 &#x1f388; LeetCode90.子集|| &#x1f388;LeetCode93.复原IP地址 链接&#xff1a;93.复原IP地址 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能…

MKS SERVO4257D 闭环步进电机_系列12 STM32_CAN例程

第1部分 产品介绍 具备脉冲接口和RS485/CAN串行接口&#xff0c;支持MODBUS-RTU通讯协议&#xff0c;内置高效FOC矢量算法。 硬件开源&#xff01; 第2部分 相关资料下载 2.1 源代码下载 网盘&#xff1a; 08_例程-STM32系列(CAN) 第3部分 参数配置和注意事项 3.1 电机参…

iPhone 15系规格全面出炉,配置大换血看齐安卓旗舰

网上经常有声音说 iPhone 又不行了&#xff0c;产品竞争力不如安卓云云&#xff0c;事实上是这样的吗&#xff1f; 就拿最近 618 智能手机销售情况来看&#xff0c;苹果一家就以 562.8 万部成绩拿下了近一半市场&#xff0c;营收占比更是高达 67%。 来源&#xff1a;Techlnsig…

OpenCV读取一张8位无符号四通道图像并显示

#include <iostream> #include <opencv2/imgcodecs.hpp> #include <opencv2/opencv.hpp> #include

聊聊Compose跨平台与KMM

作者&#xff1a;黄林晴 有许多开发者可能还没有了解过Compose Multiplatform和KMM&#xff0c;那么本次分享将通过以下几点来介绍Compose Multiplatform 与KMM&#xff0c;让我们一起体验Kotlin跨平台的魅力。 Compose Multiplatform 与 KMM的关系Compose Multiplatform 与 K…

RK3588平台开发系列讲解(Camera篇)V4L2 主要特性

文章目录 一、V4L2 介绍1.1、模块化的架构1.2、统一的设备节点1.3、统一的视频数据格式1.4、支持多种视频设备1.5、支持流式 I/O1.6、支持控制参数1.7、支持事件通知二、V4L2使用场景沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要讲解V4L2 主要特性。 一、…

赛宁数字孪生靶场:构建验证评估业务的新势能

​​2023年5月1日实施的《关键信息基础设施安全保护要求》中对于关基企业的现有网络安全保障体系提出了更加具体全面的要求&#xff0c;人员、系统、体系是检测评估主要关注的方向。 赛宁数字孪生靶场从验证评估业务的角度出发&#xff0c;借助多云融合能力、多样化仿真能力、…

链式编程艺术:探索 Promise 链的美妙之处

文章目录 1. 什么是 Promise&#xff1f;它解决了什么问题&#xff1f;2. Promise 有哪些状态&#xff0c;并且解释每个状态的含义。3. 如何创建一个 Promise&#xff0c;并描述其基本结构和用法。4. 解释 Promise 的链式调用&#xff08;chaining&#xff09;和方法的执行顺序…

RabbitMQ系列(13)--Direct交换机的简介与实现

1、Direct交换机的介绍 Direct交换机能让消息只发送往绑定了指定routingkey的队列中去&#xff0c;值得注意的是当绑定多个队列的routingkey都相同&#xff0c;则这种情况下的表现与Fanout交换机的类似 2、Direct交换机的实现 (1)新建一个名为fanout的包&#xff0c;用于装发…

QT6在线下载安装慢的问题

由于某“墙”的原因&#xff0c;在国内安装QT是会要了老命的&#xff0c;下载只有几十K&#xff0c;安装QT6保守估计得按天计算了。 经过多次尝试&#xff0c;终于找到了可以“几十MB”速度下载安装的办法。 方法一&#xff1a; qt-unified-windows-x64-4.5.2-online.exe --…

leetcode:移动零

移动零 easy 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums […

回归预测 | MATLAB实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多输入单输出

回归预测 | MATLAB实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多输入单输出 目录 回归预测 | MATLAB实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多输入单输出预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多输入…

如何用深度强化学习自动炒股

初衷 最近一段时间&#xff0c;受到新冠疫情的影响&#xff0c;股市接连下跌&#xff0c;作为一棵小白菜兼小韭菜&#xff0c;竟然产生了抄底的大胆想法&#xff0c;拿出仅存的一点私房钱梭哈了一把。 第二天&#xff0c;暴跌&#xff0c;俺加仓 第三天&#xff0c;又跌&…

【PCL】(二)CMake编译

&#xff08;二&#xff09;CMake编译 将以下代码写到pcd_write.cpp中&#xff0c;并放到项目/PATH/TO/MY/GRAND/PROJECT/project中。 #include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>intmain (){pcl::PointCloud<pcl::Poin…

黑马头条 作业+解答 day03-自媒体文章发布 自媒体接口

感觉是非常适合新手的练手接口&#xff1b;花了不到半小时吧&#xff0c;主要是因为接口描述很清晰&#xff01; 建议大家仔细自己做了一遍再对照&#xff0c;有更好的写法欢迎留言&#xff01; 1)素材管理 1.1)图片删除 接口描述 说明接口路径/api/v1/material/del_picture/{i…

分布式事务 微服务事务方案和实现 Java分布式事务架构知识点

文章目录 什么是分布式事务分布式的理论的角度看分布式事务的体系刚性事务&#xff1a;柔性事务&#xff1a;两段提交&#xff08;2PC&#xff09;两段提交&#xff08;2PC - Prepare & Commit&#xff09;是指两个阶段的提交&#xff1a;两段提交&#xff08;2PC&#xff…

这些ai自动生成图片软件你值得拥有

小明是一名设计师&#xff0c;最近他接到了一份海报设计的任务。但是&#xff0c;他却发现自己的设计能力有些瓶颈&#xff0c;无法满足客户的需求。就在他苦恼之时&#xff0c;他的朋友小王向他建议了了几款趁手的ai绘画工具&#xff0c;可以帮助它快速绘制出美轮美奂的图片。…

什么是 AOP?对于 Spring IoC 和 AOP 的理解?

什么是 AOP&#xff1f; AOP(Aspect-Oriented Programming)&#xff0c;即 面向切面编程&#xff0c; 它与OOP( ObjectOriented Programming, 面向对象编程) 相辅相成&#xff0c;提供了与OOP 不同的抽象软件结构的视角 在 OOP 中, 我们以类(class)作为我们的基本单元 而 A…

微服务网关SpringCloudGateway实战

目录 微服务网关SpringCloudGateway 1.概述 2.核心概念 快速入门 1.微服务开发 2.网关配置创建一个Gateway服务&#xff0c;引入以下依赖&#xff1a; 微服务网关SpringCloudGateway 1.概述 Spring cloud gateway是spring官方基于Spring 5.0、Spring Boot2.0和Project R…

K8S集群安全升级(CIS CNI Calico)

集群安全升级 1 集群安全升级1.1 环境安全1.1.1 CIS基础1.1.2 测试工具1.1.3 组件测试1.1.4 定制测试1.1.5 测试镜像 1.2 网络安全1.2.1 CNI方案1.2.2 Calico环境1.2.3 Calico部署1.2.4 简单实践1.2.5 BGP实践1.2.6 策略实践1.2.7 流量管控1.2.8 基准测试 1 集群安全升级 1.1 …