minio 分布式

embedded/2024/11/13 15:11:41/

方案设计

需要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/sdelvcreate -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/datamkfs.ext4 /dev/vg/data
mkdir /minioblkid /dev/vg/dataecho '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.shRestart=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 specificvalueclient_max_body_size 0;# Disable bufferingproxy_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.1proxy_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;}}


http://www.ppmy.cn/embedded/137281.html

相关文章

音视频入门基础:MPEG2-TS专题(4)——使用工具分析MPEG2-TS传输流

一、引言 有很多工具可以分析MPEG2-TS文件/流,比如Elecard Stream Analyzer、PROMAX TS Analyser、easyice等。下面一一对它们进行简介(个人感觉easyice功能更强大一点)。 二、Elecard Stream Analyzer 使用Elecard Stream Analyzer工具可以…

【专题】2024年全球生物医药交易报告汇总PDF洞察(附原数据表)

原文链接:https://tecdat.cn/?p38191 在当今复杂多变的全球经济环境下,医药行业正面临着诸多挑战与机遇。2024 年,医药行业的发展态势备受关注。 一方面,全球生物医药交易活跃,2021 - 2023 年的交易中,已…

简单的TCP程序

文章目录 3. TCP程序3.1 接口3.1.1 inet_aton()3.1.2 listen()3.1.3 现在的服务器代码3.1.4 accept()3.1.5 inet_ntop()3.1.6 tcpClient.cc 3.2 并发的 tcpServer3.2.1 多进程版本3.2.2 多线程版本3.2.3 线程池版本 3.3 继续完善3.3.1 增加客户端重连功能3.3.2 守护进程 3. TCP…

ReactOS 4.2 OBJECT_TYPE_INITIALIZERj结构体的实现

Windows内核为新对象类型的定义提供了一个全局的OBJECT_TYPE_INITIALIZER 数据结构,作为需要填写和递交的“申请单”: OBJECT_TYPE_INITIALIZER // // Object Type Initialize for ObCreateObjectType // typedef struct _OBJECT_TYPE_INITIALIZER {USHORT Length;BOOLEAN Us…

测绘程序设计|C#运算符与Math类|注意事项

由于微信公众号改变了推送规则,为了每次新的推送可以在第一时间出现在您的订阅列表中,记得将本公众号设为星标或置顶喔~ 简单介绍了C#运算符与Math类,强调了易错点~ 🌿前言 运算符+Math类,便可以完成绝大部…

九、HttpMessageConverter

文章目录 1. RequestBody2. RequestEntity3. ResponseBody4. SpringMVC处理json5. SpringMVC处理ajax6. RestController注解7. ResponseEntity 1. RequestBody 2. RequestEntity 3. ResponseBody 4. SpringMVC处理json 5. SpringMVC处理ajax 6. RestController注解 7. Response…

WebRTC视频 01 - 视频采集整体架构

一、前言: 我们从1对1通信说起,假如有一天,你和你情敌使用X信进行1v1通信,想象一下画面是不是一个大画面中有一个小画面?这在布局中就叫做PIP(picture in picture);这个随手一点&am…

优化Mac的鼠标使用体验超简单方法

Mac在连接蓝牙鼠标后,鼠标滚轮方向与触控板方向相反,如果打开系统偏好设置中的方向反转的话,触控板的方向也会反转,无法鼠标与触控板配合使用 如何解决这个问题,iScroll替你解决这个烦恼,让Mac的触控板与鼠…