首页 > 其他分享 >minio分布式集群部署(三)

minio分布式集群部署(三)

时间:2024-09-13 13:53:38浏览次数:16  
标签:http minio server 集群 proxy 9001 9000 分布式

一、优势

分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不

同的节点上,分布式Minio避免了单点故障。

分布式存储可靠性常用方法

 分布式存储,很关键的点在于数据的可靠性,即保证数据的完整,不丢失,不损坏。只有在可靠性实现

的前提下,才有了追求一致性、高可用、高性能的基础。而对于在存储领域,一般对于保证数据可靠性

的方法主要有两类,一类是冗余法,一类是校验法。

冗余

 冗余法最简单直接,即对存储的数据进行副本备份,当数据出现丢失,损坏,即可使用备份内容进行恢

复,而副本备份的多少,决定了数据可靠性的高低。这其中会有成本的考量,副本数据越多,数据越可

靠,但需要的设备就越多,成本就越高。可靠性是允许丢失其中一份数据。当前已有很多分布式系统是

采用此种方式实现,如Hadoop的文件系统(3个副本),Redis的集群,MySQL的主备模式等。

校验

校验法即通过校验码的数学计算的方式,对出现丢失、损坏的数据进行校验、还原。注意,这里有两个

作用,一个校验,通过对数据进行校验和(checksum)进行计算,可以检查数据是否完整,有无损坏或

更改,在数据传输和保存时经常用到,如TCP协议;二是恢复还原,通过对数据结合校验码,通过数学

计算,还原丢失或损坏的数据,可以在保证数据可靠的前提下,降低冗余,如单机硬盘存储中的RAID

技术,纠删码(ErasureCode)技术等。MinIO采用的就是纠删码技术。

二、前期准备

服务器:175.178.41.99 、8.129.86.98

端口:9000、9001(都同)

软件目录:

(都同)

授权变可执行文件:

chmod +x minio

export MINIO_ROOT_USER=wyy

export MINIO_ROOT_PASSWORD=wuyueyang00237

nohup /root/minio/soft/minio server --address ":9000" --console-address ":9001" MinIO Console  http://8.129.86.98:9001/data1 >/root/minio/soft/minio-cluster.log 2>&1 &

 

 

错了:提示要大于等于4个节点

 

通过脚本运行伪集群:

minio-cluster.sh:

export MINIO_ROOT_USER=wyy

export MINIO_ROOT_PASSWORD=wuyueyang00237

MINIO_HOME=/root/minio/soft

MINIO_HOST=175.178.41.99

for i in {01..04};

do

nohup /root/minio/soft/minio server --address ":90${i}" --console-address ":100${i}" http://${MINIO_HOST}:9001/data1  http://${MINIO_HOST}:9002/data2 http://${MINIO_HOST}:9003/data3 http://${MINIO_HOST}:9004/data4 >${MINIO_HOME}/log/minio-cluster-90${i}.log 2>&1 &

done

又tm错了,全部干掉:

ps -ef |grep minio |grep -v grep | awk '{print $2}'| xargs kill -9

 

 

sudo chmod 777 minio

sudo chmod 777  data01 - data05 

都不行。。。有点绝望

大概问题就是目录要挂载,每个大小要大于1g,但是验证可行性期间没那么多的机器设备。。

改用docker-compose实现伪集群

①编写配置文件

docker-compose.yaml

version: '3.7'

# 所有容器的通用设置和配置  

x-minio-common: &minio-common

  image: minio/minio

  command: server --console-address ":9001" http://minio{1...4}/data{1...2}

  expose:

    - "9000"

    - "9001"

  environment:

    MINIO_ROOT_USER: wyy

    MINIO_ROOT_PASSWORD: wuyueyang00237

  healthcheck:

    test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]

    interval: 30s #间隔

    timeout: 20s #超时

    retries: 3 #重试次数

# 启动4个docker容器,运行minio服务器实例。  

# 使用nginx反向代理,负载均衡,就可以访问了  

# 通过9000端口

services:

  minio1:

    <<: *minio-common

    hostname: minio1

    volumes:

      - ./data1-1:/data1

      - ./data1-2:/data2

  minio2:

    <<: *minio-common

    hostname: minio2

    volumes:

      - ./data2-1:/data1

      - ./data2-2:/data2

  minio3:

    <<: *minio-common

    hostname: minio3

    volumes:

      - ./data3-1:/data1

      - ./data3-2:/data2

  minio4:

    <<: *minio-common

    hostname: minio4

    volumes:

      - ./data4-1:/data1

      - ./data4-2:/data2

  nginx:

    image: nginx

    hostname: nginx

    volumes:

      - ./nginx.conf:/etc/nginx/nginx.conf:ro

    ports:

      - "9000:9000"

      - "9001:9001"

    depends_on:

      - minio1

      - minio2

      - minio3

      - minio4

## 默认情况下,该配置使用默认的本地驱动  

## 对于自定义卷,请使用卷驱动程序配置替换。  

volumes:

  data1-1:

  data1-2:

  data2-1:

  data2-2:

  data3-1:

  data3-2:

  data4-1:

  data4-2:

 

nginx.conf

user  nginx;

worker_processes  auto;

error_log  /var/log/nginx/error.log warn;

pid        /var/run/nginx.pid;

events {

    worker_connections  4096;

}

http {

    include       /etc/nginx/mime.types;

    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    keepalive_timeout  65;

    # include /etc/nginx/conf.d/*.conf;

    upstream minio {

        server minio1:9000;

        server minio2:9000;

        server minio3:9000;

        server minio4:9000;

    }

    upstream console {

        ip_hash;

        server minio1:9001;

        server minio2:9001;

        server minio3:9001;

        server minio4:9001;

    }

    server {

        listen       9000;

        listen  [::]:9000;

        server_name  localhost;

        # 允许在头文件中使用特殊字符

        ignore_invalid_headers off;

        # 允许任何大小的文件被上传。

        # 设置一个值,如1000m; 将文件大小限制为特定值

        client_max_body_size 0;

        # 禁用缓冲

        proxy_buffering off;

        proxy_request_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;

            # Default is HTTP/1, keepalive is only enabled in HTTP/1.1

            proxy_http_version 1.1;

            proxy_set_header Connection "";

            chunked_transfer_encoding off;

            proxy_pass http://minio;

        }

    }

    server {

        listen       9001;

        listen  [::]:9001;

        server_name  localhost;

        # To allow special characters in headers

        ignore_invalid_headers off;

        # Allow any size file to be uploaded.

        # Set to a value such as 1000m; to restrict file size to a specific value

        client_max_body_size 0;

        # To disable buffering

        proxy_buffering off;

        proxy_request_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;

            # This is necessary to pass the correct IP to be hashed

            real_ip_header X-Real-IP;

            proxy_connect_timeout 300;

           

            # To support websocket

            proxy_http_version 1.1;

            proxy_set_header Upgrade $http_upgrade;

            proxy_set_header Connection "upgrade";

           

            chunked_transfer_encoding off;

            proxy_pass http://console;         }

    }

}

 

②创建挂载目录、上传配置文件,开放端口9000,10001

③运行docker-compose

要在yaml文件的当前目录下运行

# 第一次启动前拉取镜像(可略)

docker-compose pull

# 后台启动

docker-compose up -d

# 集群停止

docker-compose stop

# 集群开始

docker-compose start

# 集群停止并删除

docker-compose down

④创建桶cluster上传文件

tree -d

du -Th

du -a

⑤完事,成功了,最后一步就是给客户安排免费大保健了

标签:http,minio,server,集群,proxy,9001,9000,分布式
From: https://blog.csdn.net/super_vegetable_bird/article/details/142151483

相关文章

  • CDH Hive集群的create/drop慢问题,在200s 多一点处理分析
    现象:CREATETABLEtest911(SNString,PN_CODEString);Totaltimespentinthismetastorefunctionwasgreaterthan1000ms:createTable_(Table,)=200091Hive集群的create/drop操作时间基本都稳定在200s多一点。分析:HMS会实时向Sentry同步Notifications请......
  • Minio安装及使用
    前言在现在项目的开发中,文件存储方面的需求变得越来越多了。现在市面上几大云厂商都有提供一些相关存储的产品,开发者可以很方便的去使用。那我们如果有本地化的需求,那怎么办呢?Minio就是一款开源免费的产品,我们可以使用它进行本地化的部署来满足我们的需求。配置要求一台......
  • 对象存储方案大比拼——本地存储、OSS、MinIO、Ceph、Apache Ozone 与 OpenIO
    在当今数据驱动的时代,选择合适的对象存储方案对于企业和开发者来说至关重要。本文将对本地存储、阿里云OSS、MinIO、Ceph、ApacheOzone和OpenIO这几种常见的对象存储方案进行详细的介绍和比较,帮助你做出明智的选择。 一、本地存储 (一)特点 1. 直接存储在本地设备......
  • minio的下载和springboot整合minio使用
    下载minio基于docker拉取minio镜像dockerpullminio/minio 创建minio容器先创建/root/minio/data和/root/minio/confdockerrun-d-p9000:9000-p9001:9001--nameminio\-e"MINIO_ROOT_USER=htsdg"\-e"MINIO_ROOT_PASSWORD=12345678"\-v/root/......
  • 本地内存和分布式缓存(面试)
    本地缓存和分布式缓存本地缓存:缓存组件和应用在同一进程中。但各应用都需要维护单独的缓存,无法共享缓存。分布式缓存:缓存组件和应用分离,不在同一进程,多个应用可直接共享缓存。本地缓存的实现缓存一般是一种key-value的键值对数据结构与此同时,本地缓存由于需要被并发读写......
  • Hadoop(五)生产集群搭建(二)
    完全分布式运行模式一、SSH无密登录配置1、基本语法ssh另一台电脑的IP地址[user@hadoop102~]$sshhadoop103退回hadoop102[user@hadoop103~]$exit2、配置(1)生成公钥和私钥[[email protected]]$pwd/home/atguigu/.ssh[[email protected]]$ssh-keygen-tr......
  • 006.MinIO基础使用
    图形界面基础使用bucketbucket创建图形界面创建bucket。特性:Versioning开启版本控制,开启版本控制则允许在同一键下保持同一对象的多个版本。ObjectLocking对象锁定防止对象被删除,需要支持保留和合法持有,只能在创建桶时启用。Quita配额限制bucket中的数据量。......
  • 不使用Redis分布式锁,如何避免用户重复点击提交?
    前端,在用户点击后,对按钮做置灰操作。但有些情况,用户会绕过置灰,实现重复点击。后端,对客户端携带的token,验证是否使用过;验证逻辑,存储在数据库中,验证逻辑使用悲观锁或者乐观锁实现。前端按钮置灰前端按钮置灰:在用户点击按钮后,将按钮禁用一段时间或直到请求响应。优点:简......
  • 【项目实战】Redis使用场景之基于Redis实现分布式队列
    一、什么是分布式队列分布式队列,指在分布式系统中用于协调不同服务或组件之间的消息传递和任务调度的队列。分布式队列,允许多个生产者将任务放入队列,而多个消费者可以从队列中取出任务进行处理。分布式队列,在微服务架构、任务调度、消息传递等场景中非常有用。二、为什......
  • 使用Graylog分布式日志收集
    Graylog是一个开源的日志管理和分析平台,允许你集中收集、存储和分析日志数据。为了实现分布式日志收集,你需要将Graylog部署在多个节点上,并设置适当的配置以处理来自不同来源的日志数据。下面是如何实现Graylog的分布式日志收集的步骤:1.环境准备必备软件Graylog:日志管理和分析......