minio 快速入门+单机部署+集群+调优

news2024/11/17 11:33:27

目录

原理

概念

名词解释

Set /Drive 的关系

MinIO部署

单机

单机单盘

 单机多盘

集群

多机单盘

多机多盘 

 配置负载均衡

 调优


原理

MinIO是一个S3兼容的高性能对象存储,其主要特点如下:

  • 适合存储大容量非结构化的数据,如图片,视频,日志文件;

  • 一个对象文件可以任意大小,从几 KB 到最大的 5T 不等;

  • 轻量,高效;MinIO 默认不计算 MD5 ,除非传输给客户端的时候,所以很快;

  • 支持 windows;

  • 有 web 页进行管理,命令行和控制台双重管理;

  • 分布式集群支持动态升级;

  • 使用纠删码实现数据冗余:Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。 这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复

MinIO的两大组件:

  • MinIO Server:服务端,提供对象存储服务

  • MinIO Client:命令行客户端,命令关键字为mc,可通过ls,cat,find等类unix指令操作Server端存储的对象

概念

名词解释

MINIO 有几个概念比较重要:

  • Object:存储到 Minio 的基本对象,如文件、图片、视频.……

  • Bucket:用来存储 Object 的逻辑空间。每个 Bucket 之间的数据是相互隔离的。对于客户端而言,就相当于一个存放文件的顶层文件夹。

  • Drive:即存储数据的磁盘,在 MinIO 启动时,以参数的方式传入。Minio 中所有的对象数据都会存储在 Drive 里。

  • Set

    即一组 Drive 的集合,分布式的minio根据集群规模自动划分一个或多个 Set ,每个 Set 中的 Drive 分布在不同位置:

    • 一个对象存储在一个Set上

    • 一个集群划分为多个Set

    • 一个Set包含的Drive数量是固定的,默认由系统根据集群规模自动计算得出

    • 一个SET中的Drive尽可能分布在不同的节点上

Set /Drive 的关系

Set /Drive 这两个概念是 MINIO 里面最重要的两个概念,一个对象最终是存储在 Set 上面的。

下图为 MINIO 集群存储示意图,每一行是一个节点机器,有 32 个节点,每个节点里有一个小方块我们称之 Drive,Drive 可以简单地理解为一个硬盘。一个节点有 32 个 Drive,相当于 32 块硬盘。

Set 是另外一个概念,Set 是一组 Drive 的集合,图中,所有蓝色、橙色背景的Drive(硬盘)的就组成了一个 Set.

MinIO部署

MinIO的两种部署模式:

  • standalone:单节点minio

  • distributed:分布式的minio集群,需要说明的是,一个分布式的minio至少需要四块磁盘

单机Minio服务存在单点故障,如果是一个有N块硬盘的分布式Minio,只要有N/2硬盘在线,数据就不会丢失。但是要想实现数据的写入,至少需要N/2+1个硬盘。比如一个16节点的Minio集群,每个节点16块硬盘,就算8台服务器宕机,这个集群仍然是可读的,不过需要9台服务器才能写数据。

只要遵守分布式Minio的限制,可以组合不同的节点和每个节点几块硬盘。比如,可以使用2个节点,每个节点4块硬盘,也可以使用4个节点,每个节点两块硬盘,诸如此类

单机

单机单盘

挂载磁盘

root@master:~# lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0                       7:0    0 63.9M  1 loop /snap/core20/2105
loop1                       7:1    0   64M  1 loop /snap/core20/2379
loop2                       7:2    0   87M  1 loop /snap/lxd/27037
loop3                       7:3    0   87M  1 loop /snap/lxd/29351
loop4                       7:4    0 40.4M  1 loop /snap/snapd/20671
loop5                       7:5    0 38.8M  1 loop /snap/snapd/21759
sda                         8:0    0   50G  0 disk
├─sda1                      8:1    0    1M  0 part
├─sda2                      8:2    0    2G  0 part /boot
└─sda3                      8:3    0   48G  0 part
  └─ubuntu--vg-ubuntu--lv 253:0    0   24G  0 lvm  /
sdb                         8:16   0   20G  0 disk
sr0                        11:0    1    2G  0 rom

root@master:~# mkfs.ext4 /dev/sdb
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 5242880 4k blocks and 1310720 inodes
Filesystem UUID: e8bb820f-2bf9-456c-8871-c50fbc73fbd3
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

root@master:~# mkdir /minio1

root@master:~# vim /etc/fstab
/dev/sdb /minio1 ext4 defaults 0 0

mount -aa

root@master:~# df -Th
Filesystem                        Type   Size  Used Avail Use% Mounted on
tmpfs                             tmpfs  388M  1.7M  386M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4    24G  9.7G   13G  44% /
tmpfs                             tmpfs  1.9G     0  1.9G   0% /dev/shm
tmpfs                             tmpfs  5.0M     0  5.0M   0% /run/lock
/dev/sda2                         ext4   2.0G  253M  1.6G  14% /boot
tmpfs                             tmpfs  388M  4.0K  388M   1% /run/user/1000
/dev/sdb                          ext4    20G   24K   19G   1% /minio1

在每台主机上写一篇 docker-compose.yml 文件

services:
  minio:
    hostname: minio
    container_name: minio
    image: quay.io/minio/minio:RELEASE.2024-09-13T20-26-02Z
    ports:
    - "9000:9000"
    - "9001:9001"
    volumes:
    - "/etc/localtime:/etc/localtime"
    - "/ytx-data/minio/data:/data"
    environment:
      MINIO_ACCESS_KEY: admin
      MINIO_SECRET_KEY: ytxcc123
    command: 
    - server 
    - /minio1
    - --console-address 
    - ":9001"
    - --address 
    - ":9000"

最后通过 9001 端口访问

 单机多盘

多加几块盘,有序命名

command: 
    - server 
    - /minio1
    - --console-address 
    - ":9001"
    - --address 
    - ":9000"

修改为

command: 
    - server 
    - /minio{1...4}
    - --console-address 
    - ":9001"
    - --address 
    - ":9000"

集群

多机单盘

四台主机上

services:
  minio:
    container_name: minio
    image: quay.io/minio/minio:RELEASE.2024-09-13T20-26-02Z
    network_mode: host
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /data/minio1/data:/data
    environment:
      MINIO_ACCESS_KEY: admin
      MINIO_SECRET_KEY: ytxcc123
    command:
      - server
      - http://192.168.142.155/data/minio1/data
      - http://192.168.142.156/data/minio1/data
      - http://192.168.142.157/data/minio1/data
      - http://192.168.142.158/data/minio1/data

运行

docker compose up -d

集群全部启动之后,使用 9000 端口访问

多机多盘 

接上面修改一下即可

volumes:
  - /data/minio1/data:/data

修改为

 volumes:
      - /minio/data1:/data1
      - /minio/data2:/data2
      - /minio/data3:/data3
      - /minio/data4:/data4

command:
      - server
      - http://192.168.142.155/data/minio1/data
      - http://192.168.142.156/data/minio1/data
      - http://192.168.142.157/data/minio1/data
      - http://192.168.142.158/data/minio1/data

修改为

command:
      - server
      - http://192.168.142.155/data/minio{1...4}/data{1...4}

 新增

extra_hosts:
    - minio1:192.168.142.155
    - minio2:192.168.142.156
    - minio3:192.168.142.157
    - minio4:192.168.142.158
    
environment:
    MINIO_UPDATE: off
    
command:
    - --console-address "0.0.0.0:9001" 
    - --address "0.0.0.0:9000"
    
privileged: true

运行

docker compose up -d

 配置负载均衡

upstream minio {
    server 192.168.142.155:9000;
    server 192.168.142.156:9000; 
    server 192.168.142.157:9000;
    server 192.168.142.158:9000; 
}

upstream console {
    ip_hash;
    server 192.168.142.155:9001;
    server 192.168.142.156:9002; 
    server 192.168.142.157:9003;
    server 192.168.142.158:9004; 

}

server {
      listen       9000;
      listen  [::]:9000;
      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;

      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;

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

 调优

cat > sysctl.conf <<EOF
# maximum number of open files/file descriptors
fs.file-max = 4194303

# use as little swap space as possible
vm.swappiness = 1

# prioritize application RAM against disk/swap cache
vm.vfs_cache_pressure = 50

# minimum free memory
vm.min_free_kbytes = 1000000

# follow mellanox best practices https://community.mellanox.com/s/article/linux-sysctl-tuning
# the following changes are recommended for improving IPv4 traffic performance by Mellanox

# disable the TCP timestamps option for better CPU utilization
net.ipv4.tcp_timestamps = 0

# enable the TCP selective acks option for better throughput
net.ipv4.tcp_sack = 1

# increase the maximum length of processor input queues
net.core.netdev_max_backlog = 250000

# increase the TCP maximum and default buffer sizes using setsockopt()
net.core.rmem_max = 4194304
net.core.wmem_max = 4194304
net.core.rmem_default = 4194304
net.core.wmem_default = 4194304
net.core.optmem_max = 4194304

# increase memory thresholds to prevent packet dropping:
net.ipv4.tcp_rmem = "4096 87380 4194304"
net.ipv4.tcp_wmem = "4096 65536 4194304"

# enable low latency mode for TCP:
net.ipv4.tcp_low_latency = 1

# the following variable is used to tell the kernel how much of the socket buffer
# space should be used for TCP window size, and how much to save for an application
# buffer. A value of 1 means the socket buffer will be divided evenly between.
# TCP windows size and application.
net.ipv4.tcp_adv_win_scale = 1

# maximum number of incoming connections
net.core.somaxconn = 65535

# maximum number of packets queued
net.core.netdev_max_backlog = 10000

# queue length of completely established sockets waiting for accept
net.ipv4.tcp_max_syn_backlog = 4096

# time to wait (seconds) for FIN packet
net.ipv4.tcp_fin_timeout = 15

# disable icmp send redirects
net.ipv4.conf.all.send_redirects = 0

# disable icmp accept redirect
net.ipv4.conf.all.accept_redirects = 0

# drop packets with LSR or SSR
net.ipv4.conf.all.accept_source_route = 0

# MTU discovery, only enable when ICMP blackhole detected
net.ipv4.tcp_mtu_probing = 1

EOF

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

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

相关文章

华为OD机试 - 静态扫描(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

jenkins 构建报错ERROR: Error fetching remote repo ‘origin‘

问题描述 修改项目的仓库地址后&#xff0c;使用jenkins构建报错 Running as SYSTEM Building in workspace /var/jenkins_home/workspace/【测试】客户端/client-fonchain-main The recommended git tool is: NONE using credential 680a5841-cfa5-4d8a-bb38-977f796c26dd&g…

深圳数字孪生工业互联网可视化技术,赋能新型工业化智能制造工厂

深圳正以前所未有的速度和力度&#xff0c;推进着数字经济与实体经济深度融合的新篇章。数字孪生工业互联网可视化技术作为关键驱动力&#xff0c;赋能新型工业化智能制造工厂&#xff0c;引领着深圳乃至全国制造业的转型升级。从精密制造到重型装备&#xff0c;从汽车电池到医…

喜讯!宝兰德荣获第三届“鼎新杯”数字化转型应用大赛二等奖

9月24日-25日&#xff0c;“2024数字化转型发展大会”在北京成功举办。来自政产学研用的专家学者、知名企业代表同台论道&#xff0c;共话数字化转型的新趋势。大会期间&#xff0c;备受瞩目的第三届“鼎新杯”数字化应用转型大赛结果正式揭晓&#xff0c;「宝兰德中间件统一管…

[240929] 12 款最佳免费开源隐写工具 | Llama 3.2: 开源、可定制模型,革新边缘人工智能和视觉体验

目录 12 款最佳免费开源隐写工具Llama 3.2: 开源、可定制模型&#xff0c;革新边缘人工智能和视觉体验 12 款最佳免费开源隐写工具 什么是隐写术&#xff1f; 隐写术是一种将信息隐藏在其他信息中的艺术和科学&#xff0c;除了发送者和预期的接收者之外&#xff0c;没有人会怀…

Agilent安捷伦N1914A双通道数字功率计操作说明

Agilent安捷伦N1914A双通道数字功率计操作说明 Keysight / Agilent N1914A EPM 系列双通道平均功率计 N1914A EPM 系列功率计为工作台/机架和现场应用提供可重复且可靠的结果。N1914A 提供高达 400 个读数/秒的测量速度&#xff0c;可实现快速、准确的平均功率测量&#xff0…

帮儿女带孩子的老人,都有以下几种共性

在现代社会中&#xff0c;随着生活节奏的加快&#xff0c;许多年轻父母需要在繁忙的工作中平衡家庭和事业&#xff0c;老人们自然成为了带孙辈的重要力量。 放眼望去&#xff0c;不少家庭的老人主动承担起了带孙子的责任&#xff0c;为子女分担了育儿的重担。 随着时代的变化…

低功耗4G模组Air780E的串口通信指南

今天我们来讲解低功耗4G模组Air780E的串口通信的基本用法&#xff0c;合宙的小伙伴们&#xff0c;学起来吧&#xff01; 一、硬件准备 780E开发板一套&#xff0c;包括天线、USB数据线。 USB转TTL工具或线&#xff08;例如ch340、ft232&#xff09; PC电脑&#xff0c;串口…

计算机考证汇总-第一期-CCF认证类

一、前言 我发现在博客文章中对于&#xff0c;计算机专业相关从业人员、学生等群体&#xff0c;并没有很详细的记录考证的信息&#xff0c;我在此便将部分证书按照个人理解简单归纳整理一下&#xff0c;有不足之处还望友好交流&#xff0c;大多数资料取自官网、相关博客及个人…

示波器带宽和测量的关系

示波器的带宽指的是-3db带宽&#xff0c;比如100MHZ带宽的示波器&#xff0c;用它测量幅度是1V&#xff0c;频率是100Mhz的正弦波&#xff0c;示波器测量值会下降到0.707V&#xff0c; 高于示波器带宽的信号会变小&#xff0c;下图是示例。一些波形也会失真。 100M带宽示波器的…

二次记录服务器被(logrotate)木马入侵事件

现象&#xff1a;SSH失败、CPU满转 服务器ssh登录不上&#xff0c;一直处于登录中状态。 于是进入云服务器控制台&#xff0c;CPU打满状态&#xff0c;知道服务器被攻击了 腾讯云入侵检测&#xff0c;高危命令报警 排查过程 尝试 VNC 登录 由于SSH登录不上&#xff0c;进入云…

WPS使用越来越卡顿

UOS统信wps频繁的使用后出现卡顿问题&#xff0c;通过删除或重命名kingsoft文件缓存目录。 文章目录 一、问题描述二、问题原因三、解决方案步骤一步骤二步骤三 一、问题描述 用户在频繁的使用wps处理工作&#xff0c;在使用一段时间后&#xff0c;用户反馈wps打开速度慢&…

繁体字能申请注册商标吗?

有些主体为了表现企业历史和文化&#xff0c;喜欢用繁体字申请注册商标&#xff0c;那繁体字可以能申请注册商标吗&#xff0c;当然是可以的&#xff0c;普推知产老杨检索在1990年《国家工商行政管理局商标局关于商标可否使用繁体字问题的答复》&#xff0c;可以使用繁体字&…

【经验技巧】如何做好S参数的仿测一致性

根据个人经验,想要做好电路板S参数的仿测一致性,如下的相关信息必须被认真对待: 1. PCB叠构(Stack up),仿真模型需要保证设计参数与板厂供应商的生产参数完全一样,这些参数包括: 叠层结构数据;介电常数;损耗因子;蚀刻因子;表面粗糙度。 2. 仿真中,需要保证信号测试…

基于TRIZ理论的创新设计流程是怎样的?

TRIZ&#xff08;TheoryofInventiveProblemSolving&#xff09;&#xff0c;即发明问题解决理论&#xff0c;是一套基于知识的、面向设计者的系统化创新方法学。Altshuller通过对数百万份专利文献的研究&#xff0c;发现了技术问题解决过程中的普遍模式和规律&#xff0c;从而建…

World of Warcraft [CLASSIC][80][Alonsus][Dark Iron Legacy]

World of Warcraft [CLASSIC][80][Alonsus][Dark Iron Legacy] [任务][黑铁的遗产] [黑石深渊][路线图][手把手][小白教程] Dark Iron Legacy - Quest - 魔兽世界怀旧服CTM4.34《大地的裂变》数据库_大灾变85级魔兽数据库_ctm数据库 副本门口进来 直走 直走 直走 第一个路口左…

tee命令:轻松同步输出到屏幕与文件

一、命令简介 ​tee​ 命令在 Linux 和 Unix 系统中用于读取标准输入的数据&#xff0c;并将其同时输出到标准输出和文件中。简单来说&#xff0c;tee​ 命令可以用来分割数据流&#xff0c;使其既能够被输出到屏幕&#xff0c;也能够被写入到文件中。 ​​ ‍ 二、命令参数…

基于Java的停车场管理微信小程序 停车场预约系统【源码+文档+讲解】

精彩专栏推荐订阅&#xff1a;在下方主页&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、停车场管理微…

电子相册|智能化电子相册|基于java的电子相册管理系统设计与实现(源码+数据库+文档)

电子相册管理系统 目录 基于java的电子相册管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&…

.NetCore 8 SwaggerGen 显示接口注析

先看一下效果 从图上看到了没 Swagger 那里显示出了 代码里的注析。 要在Swagger 外面显示出代码里的注析也不难 1.先在项目里 属性-》生成-》输出-》然后 把“生成包含API文档的文件” 打上勾。如图最后 在Program.cs 里把 addSwagger 那一块改成 builder.Services.AddSw…