minio 分布式

方案设计

需要5台服务器,一台nginx用作分发请求,4台minio服务器,每个minio服务器上至少2个盘。在这个方法中,我使用了lvm的缓存,在同种固态盘的情况下,可以使读性能提高数倍到十倍,使写性能提高2到5倍

1.1 数据保护
  • 分布式 Minio 采用纠删码来防范多个节点宕机和位衰减。

  • 分布式 Minio 至少需要 4 个节点(4台服务器),使用分布式 Minio 就 自动引入了纠删码功能。

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

  • 纠删码的工作原理和 RAID 或者复制不同,像 RAID6 可以在损失两块盘的情况下不丢数据,而 Minio 纠删码可以在丢失一半的盘的情况下,仍可以保证数据安全。 而且 Minio 纠删码是作用在对象级别,可以一次恢复一个对象,而RAID 是作用在卷级别,数据恢复时间很长。 Minio 对每个对象单独编码,存储服务一经部署,通常情况下是不需要更换硬盘或者修复。Minio 纠删码的设计目标是为了性能和尽可能的使用硬件加速。

  • 位衰减又被称为数据腐化 Data Rot、无声数据损坏 Silent Data Corruption ,是目前硬盘数据的一种严重数据丢失问题。硬盘上的数据可能会神不知鬼不觉就损坏了,也没有什么错误日志。正所谓明枪易躲,暗箭难防,这种背地里犯的错比硬盘直接故障还危险。 所以 Minio 纠删码采用了高速 HighwayHash 基于哈希的校验和来防范位衰减。

1.2 高可用
  • 单机 Minio 服务存在单点故障,相反,如果是一个 N 节点的分布式 Minio ,只要有 N/2 节点在线,你的数据就是安全的。不过你需要至少有 N/2+1 个节点来创建新的对象。

  • 例如,一个 8 节点的 Minio 集群,每个节点一块盘,就算 4 个节点宕机,这个集群仍然是可读的,不过需要 5 个节点才能写数据。

1.3 限制
  • 分布式 Minio 单租户存在最少 4 个盘最多 16 个盘的限制(受限于纠删码)。这种限制确保了 Minio 的简洁,同时仍拥有伸缩性。如果你需要搭建一个多租户环境,你可以轻松的使用编排工具(Kubernetes)来管理多个Minio实例。

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

1.4 一致性
  • Minio 在分布式和单机模式下,所有读写操作都严格遵守 read-after-write 一致性模型。

服务器规划

192.168.50.21minio1Centos7.9
192.168.50.22minio2Centos7.9
192.168.50.23minio3Centos7.9
192.168.50.24minio4Centos7.9
192.168.50.25nginxCentos7.9

磁盘规划

sdassd2T
sdbssd2T
sdchdd9T
sddhdd9T
sdehdd9T

ssd 做缓存,hdd做主存,配置cache加速

每台存储服务器都要执行

pvcreate /dev/sda  /dev/sdb /dev/sdc /dev/sdd /dev/sde
vgcreate vg /dev/sda  /dev/sdb /dev/sdc /dev/sdd /dev/sde

lvcreate -n data -L 27T vg /dev/sdc  /dev/sdd /dev/sde
lvcreate -n cache -L 3480G vg  /dev/sda /dev/sdb
lvcreate -n meta -L 6G vg /dev/sde
lvconvert --type cache-pool --poolmetadata vg/meta vg/cache
lvconvert --type cache --cachepool vg/cache --cachemode writeback vg/data

mkfs.ext4 /dev/vg/data
mkdir /minio

blkid /dev/vg/data

echo 'UUID="9d8e2fdc-cea6-445f-b8fe-00acab0bc0a5" /minio ext4 defaults 0 1' >> /etc/fstab

配置minio

 每台存储服务器都要执行

minio二进制执行文件下载地址 https://dl.min.io/server/minio/release/linux-amd64/minio

$mkdir /minio && cd /minio
$wget https://dl.min.io/server/minio/release/linux-amd64/minio
$vim /minio/run.sh
#!/bin/bash
export MINIO_ACCESS_KEY=Minio
export MINIO_SECRET_KEY=minio123.

/minio/minio server server --address :9000 --console-address :9001
http://192.168.50.21/minio/data \
http://192.168.50.22/minio/data \
http://192.168.50.23/minio/data \
http://192.168.50.24/minio/data 


$vim /usr/lib/systemd/system/minio.service
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/

[Service]
WorkingDirectory=/minio/run/
ExecStart=/minio/run.sh

Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

配置nginx

    # 负载均衡
    upstream minio-api {
        server 192.168.50.21:9000 weight=1;
        server 192.168.50.22:9000 weight=1;
        server 192.168.50.23:9000 weight=1;
        server 192.168.50.24:9000 weight=1;
    }

    # 负载均衡
    upstream minio-console {
        server 192.168.50.21:9001 weight=1;
        server 192.168.50.22:9001 weight=1;
        server 192.168.50.23:9001 weight=1;
        server 192.168.50.24:9001 weight=1;
    }
    
#配置api负载均衡
    server {
        # 监听端口
        listen       9000;
        
        # 服务器域名(主机头)
        server_name  localhost;
        ignore_invalid_headers off;
        # Allow any size file to be uploaded.
        # Set to a value such as 1000m; to restrict file size to a specificvalue
        client_max_body_size 0;
        # Disable buffering
        proxy_buffering off;
        proxy_request_buffering off;
        # 代理 Web 服务的 Url 前缀,一般是 Web 服务的虚拟目录(可以是正则表达式)。
        location / {
            proxy_pass http://minio-api;
            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;
          }
    }

#配置console负载均衡
    server {
        # 监听端口
        listen       9001;
        
        # 服务器域名(主机头)
        server_name  localhost;

        # 代理 Web 服务的 Url 前缀,一般是 Web 服务的虚拟目录(可以是正则表达式)。
        location / {
            proxy_pass http://minio-console;
        }
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kettle开发-Day43-数据对比

前言: 随着数字化的深入,各种系统及烟囱的建立,各系统之间的架构和数据存储方式不同,导致做数据仓库或数据湖时发现,因自建的系统或者非标准化的系统经常存在物理删除而不是软删除。这就延伸出一个问题,经常…

vscode中执行git合并操作需要输入合并commit信息,打开的nano小型文本编辑器说明-

1.前提: VScode中的git组件执行任何合并动作的时候需要提交远程合并的commit信息,然后编辑器自动打开的是nano文本编辑器 2.nano编辑器说明: 1.保存文件:按 Ctrl O,然后按 Enter 来保存文件。 2.退出编辑器&#xf…

Android音视频直播低延迟探究之:WLAN低延迟模式

Android WLAN低延迟模式 Android WLAN低延迟模式是 Android 10 引入的一种功能,允许对延迟敏感的应用将 Wi-Fi 配置为低延迟模式,以减少网络延迟,启动条件如下: Wi-Fi 已启用且设备可以访问互联网。应用已创建并获得 Wi-Fi 锁&a…

如何详细查询全球药品研发的进度信息?

药品的研发进展对于医药研发人员来说,不仅是知识和技能的积累,更是职业精神和价值观的塑造。通过了解药品的研发进展,研发人员可以更好地提高自己的专业知识和技能,激发创新思维,保持专业竞争力,提高研发效…

摄像机视频分析软件下载LiteAIServer视频智能分析软件抖动检测的技术实现

在现代社会中,视频监控系统扮演着至关重要的角色,其可靠性和有效性在很大程度上取决于视频质量。然而,由于多种因素,如摄像机安装不当、外部环境振动或视频信号传输的不稳定,视频画面常常出现抖动问题,这不…

Jmeter中的监听器(一)

监听器 1--查看结果树 用途 调试测试计划:查看每个请求的详细信息,帮助调试和修正测试计划。分析响应数据:查看服务器返回的响应数据,验证请求是否成功。检查错误:识别和分析请求失败的原因。 配置步骤 添加查看结果…

PaaS云原生:分布式集群中如何构建自动化压测工具

场景 测试环境中,压测常常依赖环境中的各种工具获取基础信息,而这些工具可能集中在某个中控机上,此时想打造的自动化工具的运行模式是: 通过中控机工具获取压测所需的基本信息在中控机部署压测工具,实际压测任务分发…

数据结构-递归函数的调用栈过程

这道题考察的是递归函数的调用栈过程。 逐步分析程序的执行过程: main() 函数首先被调用,此时栈底是 main() 的信息。main() 函数调用 S(1),此时 S(1) 的信息被压入栈中,位于 main() 之上。S(1) 函数内部调用 S(0),因…

华为OD机试 - 芯片资源限制(Python/JS/C/C++ 2024 C卷 100分)

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

基于 Python 的 Django 框架开发的电影推荐系统

项目简介:本项目是基于 Python 的 Django 框架开发的电影推荐系统,主要功能包括: 电影信息爬取:获取并更新电影数据。数据展示:提供电影数据的列表展示。推荐系统:基于协同过滤算法实现个性化推荐。用户系…

使用 Web Search 插件扩展 GitHub Copilot 问答

GitHub Copilot 是一个由 GitHub 和 OpenAI 合作开发的人工智能代码提示工具。它可以根据上下文提示代码,还可以回答各种技术相关的问题。但是 Copilot 本身不能回答非技术类型的问题。为了扩展 Copilot 的功能,微软发布了一个名为 Web Search 的插件&am…

Sorting 排序

Goto Data Grid 数据网格 Sorting 排序 Sort Data 对数据进行排序 默认情况下,最终用户可以按任何列对数据进行排序,但具有 MemoExEdit、ImageEdit 和 PictureEdit 就地编辑器的列除外。在运行时,单击列标题一次可对数据进行升序排序。后续…

【笔记】Springboo项目启动失败

application run failed org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name adviceMapper defined in file 原因是mybatisplus和springboot的版本不匹配 修改后: springboot mybatisplus 成功

力扣 LeetCode 242. 有效的字母异位词(Day3:哈希表)

解题思路: 哈希表三种数据结构的选择 1. 数组:适用于数据量小的情况 2. set:适用于数据量大的情况 3. map:适用于key-value 什么时候用哈希表? 给你一个元素,判断该元素在这个集合里是否出现过 本题使…

项目财务管理软件有哪些优势?8款工具解析

本文分享的8款项目财务管理工具包括:1.PingCode;2.Worktile;3.用友U8;4.金蝶K3;5.泛微e-cology;6.明源云;7.Microsoft Project;8.QuickBooks。 在众多项目财务管理工具中挑选合适的一款&#xf…

sqoop import将Oracle数据加载至hive,数据量变少,只能导入一个mapper的数据量

sqoop脚本如下: sqoop import -D mapred.job.queue.namehighway \ -D mapreduce.map.memory.mb4096 \ -D mapreduce.map.java.opts-Xmx3072m \ --connect "jdbc:oracle:thin://1.2.3.4.5:61521/LZY2" \ --username root \ --password 123456 \ --query &…

k8clone二进制工具迁移k8s中的无状态应用

1 概述 k8clone是一个简便的Kubernetes元数据克隆工具,它可以将Kubernetes元数据(对象)保存为本地压缩包,在恢复时可将这些元数据恢复到目标集群中(已存在的资源不会被覆盖)。它不依赖远程存储&#xff0c…

100+SCI科研绘图系列教程(R和python)

科研绘图系列:箱线图加百分比点图展示组间差异-CSDN博客科研绘图系列:箱线图加蜜蜂图展示组间数据分布-CSDN博客科研绘图系列:小提琴图和双侧小提琴图展示组间差异-CSDN博客科研绘图系列:组间差异的STAMP图的ggplot2实现-CSDN博客…

小程序如何完成订阅

小程序如何完成订阅 参考相关文档实践问题处理授权弹窗不再触发引导用户重新授权 参考相关文档 微信小程序实现订阅消息推送的实现步骤 发送订阅消息 小程序订阅消息(用户通过弹窗订阅)开发指南 实践 我们需要先选这一个模板,具体流程参考…

如何提高自动驾驶中惯性和卫星组合导航pbox的精度?

Mems纯惯导里程推算精度做到千分之一,两分钟航向精度保持0.001弧度,是如何做到的? 【飞迪sigma车规高精度组合导航系统在3.6km长隧道下穿测试,135s纯惯导航向保持精度小于0.06度,隧道内转弯轨迹和直线航位推算重合#智能…