Minio - 多节点多驱动器安装部署

先决条件

网络互通

MinIO集群中的节点的网络需要互相双向互通。

MinIO API默认端口9000

MinIO console默认端口9001

MinIO强烈建议使用负载均衡器来管理与集群的连接。负载均衡器策略使用“最小连接数”逻辑,因为在部署中任何 MinIO 节点都可以接收、路由或处理客户端请求。

顺序主机名

MinIO创建节点池时,需要使用扩展符号{x ... y}表示一连串的MinIO host序列。

MinIO支持使用一连串的hostname或者IP地址来表示部署中的每个minio server进程。

如果没有连续的hostname或者IP地址,也可以使用替代办法:在/etc/hosts中配置连续的简单DNS解析。

# /etc/hosts

198.0.2.10    minio-01.example.net
198.51.100.3  minio-02.example.net
198.0.2.43    minio-03.example.net
198.51.100.12 minio-04.example.net

可以使用扩展表示法指定整个主机名范围

minio-0{1...4}.example.com

顺序挂载本地JBOD存储

MinIO强烈建议使用XFS格式的磁盘直接挂载JBOD,以提供最佳性能。

  • 直连存储(DAS,Direct-Attached Storage)相比于网络存储(NAS、SAN、NFS),具有更显著的性能和一致性优势。
  • 使用非XFS文件系统(ext4、btrfs、zfs),往往具有较低的性能,表现出意外或不希望的行为。
  • 使用分布式MinIO部署时,RAID或相似的架构不会提供额外的弹性或可用性,反而通常会降低系统性能。

确保在部署中的所有节点有相同的磁盘类型和磁盘容量。MinIO不区分驱动器类型,也不会从混合存储类型中获得好处。此外,MinIO将每个驱动器使用的大小限制为部署中最小的驱动器大小。例如,如果部署中有15个10TB磁盘和1个1TB磁盘,MinIO限制每个磁盘容量为1TB。

MinIO创建新部署时,需要使用扩展符号{x ... y}表示一连串的磁盘序列,其中部署中的所有节点都具有一组相同的已挂载的磁盘。

MinIO强烈建议使用/etc/fstab配置磁盘挂载,保证服务器重启后磁盘挂载保持不变。例如:

$ mkfs.xfs /dev/sdb -L DISK1
$ mkfs.xfs /dev/sdc -L DISK2
$ mkfs.xfs /dev/sdd -L DISK3
$ mkfs.xfs /dev/sde -L DISK4

$ nano /etc/fstab

  # <file system>  <mount point>  <type>  <options>         <dump>  <pass>
  LABEL=DISK1      /mnt/disk1     xfs     defaults,noatime  0       2
  LABEL=DISK2      /mnt/disk2     xfs     defaults,noatime  0       2
  LABEL=DISK3      /mnt/disk3     xfs     defaults,noatime  0       2
  LABEL=DISK4      /mnt/disk4     xfs     defaults,noatime  0       2

可以使用扩展表示法指定整个磁盘的挂载序列,或者挂载子目录序列

/mnt/disk{1...4}

/mnt/disk{1...4}/minio

使用相同的时间同步服务器

多节点系统必须维护时间和日期同步,以维持稳定的节点间的操作和交互。

部署分布式MinIO

1.在每个节点安装MinIO

强烈建议使用RPM或DEB进行安装

wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20231111081441.0.0.x86_64.rpm
yum install -y minio-20231111081441.0.0.x86_64.rpm

2.创建systemd Service文件

rpm安装,service文件在这个路径:/usr/lib/systemd/system/minio.service

二进制安装需要在所有节点上手动新建文件。

[Unit]
Description=MinIO
Documentation=https://min.io/docs/minio/linux/index.html
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/usr/local

User=minio-user
Group=minio-user
ProtectProc=invisible

EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# MinIO RELEASE.2023-05-04T21-44-30Z adds support for Type=notify (https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=)
# This may improve systemctl setups where other services use `After=minio.server`
# Uncomment the line to enable the functionality
# Type=notify

# Let systemd restart this service always
Restart=always

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})

minio.service文件默认使用minio-user用户&组运行,需要新建minio-user用户和组

groupadd -r minio-user
useradd -M -r -g minio-user minio-user
chown minio-user:minio-user /mnt/disk1 /mnt/disk2 /mnt/disk3 /mnt/disk4

3.创建服务环境变量文件

新建环境变量文件:/etc/default/minio

MinIO使用此文件作为环境变量的源文件。所有节点都需要包含一样的环境变量文件。

默认配置文件如下,假设:

  • 此部署有一个server pool,包含了4个MinIO Server节点,节点有连续的hostname

minio1.example.com   minio3.example.com
minio2.example.com   minio4.example.com

  • 所有节点有4个本地挂载的磁盘,有连续的挂载点

/mnt/disk1/minio   /mnt/disk3/minio
/mnt/disk2/minio   /mnt/disk4/minio

  • 有一个负载均衡器“https://minio.example.net”,管理了4个MinIO Server节点
# Set the hosts and volumes MinIO uses at startup
# The command uses MinIO expansion notation {x...y} to denote a
# sequential series.
#
# The following example covers four MinIO hosts
# with 4 drives each at the specified hostname and drive locations.
# The command includes the port that each MinIO server listens on
# (default 9000)

MINIO_VOLUMES="https://minio{1...4}.example.net:9000/mnt/disk{1...4}/minio"

# Set all MinIO server options
#
# The following explicitly sets the MinIO Console listen address to
# port 9001 on all network interfaces. The default behavior is dynamic
# port selection.

MINIO_OPTS="--console-address :9001"

# Set the root username. This user has unrestricted permissions to
# perform S3 and administrative API operations on any resource in the
# deployment.
#
# Defer to your organizations requirements for superadmin user name.

MINIO_ROOT_USER=minioadmin

# Set the root password
#
# Use a long, random, unique string that meets your organizations
# requirements for passwords.

MINIO_ROOT_PASSWORD=minio-secret-key-CHANGE-ME

# Set to the URL of the load balancer for the MinIO deployment
# This value *must* match across all MinIO servers. If you do
# not have a load balancer, set this value to to any *one* of the
# MinIO hosts in the deployment as a temporary measure.
MINIO_SERVER_URL="https://minio.example.net:9000"

4.添加TLS/SSL证书(可跳过)

x.509证书文件(.crt)和私钥文件(.key)默认存放目录:${HOME}/.minio/certs

如果非默认的minio-user用户,需要指定证书文件位置,可以修改环境变量MINIO_OPTS的值,--certs-dir指定证书文件目录。

5.启动MinIO Server进程

#启动
systemctl start minio

#开机自启
systemctl enable minio

#查看状态
systemctl status minio

6.登陆控制台

浏览器访问,IP+默认端口9001,也可以通过负载均衡器对应的IP或域名访问。

 账号密码为配置文件中的minio_root_user和minio_root_password

参考

Deploy MinIO: Multi-Node Multi-Drive — MinIO Object Storage for Linux

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

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

相关文章

什么是软件定制开发?|app网站小程序定制

什么是软件定制开发&#xff1f;|app网站小程序定制 软件定制开发是根据客户的特定需求&#xff0c;为其量身定制开发软件解决方案的全过程。与市面上已有的通用软件不同&#xff0c;软件定制开发可以满足客户在业务流程、功能要求、用户界面等方面的个性化需求。 软件定制开发…

Redis链表

前言 链表作为一种常见的数据结构&#xff0c;一般都会内置在很多高级语言中。由于Redis使用的是C语言并没有内置这种数据结构&#xff0c;所以Redis构建了自己的链表实现。 链表在Redis中应用广泛&#xff0c;比如列表建的底层实现之一就是链表。当一个列表键包含了数量比较多…

Python字符串类型

目录 目标 版本 官方文档 书写格式 字符串合并 常用函数 字母转小写&#xff08;首字母转大写&#xff09; 字母转小写&#xff08;适用于在国际化环境中&#xff0c;忽略字母大小写进行比较的场景&#xff09; 字母转小写&#xff08;适用于非国际化环境中&#xff0…

JSON 格式的接口测试流程【Eolink Apikit】

在进行JSON格式的接口测试时&#xff0c;需要使用工具发送HTTP请求并获取响应。测试工具可以是单独的测试框架&#xff0c;如 Eolink Apikit。测试人员需要根据接口文档和测试用例编写测试脚本&#xff0c;然后运行测试并分析结果&#xff0c;以确保接口的质量和稳定性。 当我…

数据库mysql详细教学

1024 byte 构成 1 kb 1024 KB > 1MB 1024 MB > 1GB 1024 GB > 1TB 1024 TB > 1PB 内存的数据&#xff0c;断电后会丢失。外存的数据&#xff0c;断电后数据还在~ “持久化” 这样的次&#xff0c;意思就是把数据写到硬盘上。 mysql的第一组基本操作&#xff1a;数…

02_SHELL编程之流程控制和循环语句

课程目标 熟悉流程控制语句基本语法&#xff0c;如if…else… 掌握for循环语句的基本语法结构 掌握while和until循环语句的基本语法结构 ###一、流程控制语句 ####1. 基本语法结构 F: false 假 T: true 真 if [ condition ];thencommandcommand fi ​ [ 条件 ] &&a…

吴恩达《机器学习》8-7:多元分类

在机器学习领域&#xff0c;经常会遇到不止两个类别的分类问题。这时&#xff0c;需要使用多类分类技术。本文将深入探讨多类分类&#xff0c;并结合学习内容中的示例&#xff0c;了解神经网络在解决这类问题时的应用。 一、理解多类分类 多类分类问题是指当目标有多个类别时…

获取微信小程序二维码

可直接通过微信扫描小程序二维码直接进入小程序&#xff0c;可用在分享推广业务。 目录 Curl请求方法 获取小程序token 获取小程序二维码 参数说明 注意 请求结果 Curl请求方法 需要请求微信小程序的API接口&#xff0c;封装好curl请求方法。 代码如下&#xff1a; /*…

LSB隐写+十六进制转字符串

这张图片同样使用的是LSB隐写&#xff08;即最不显著位隐写&#xff09; 但是这道题目使用一个小技巧&#xff0c;将flag用十六进制的形式加了一层伪装 LSB隐写 通过StegSolve打开该图片&#xff0c;之后选择Analyse-》data extract来分析图片的LSB隐写 首先先点击选择LSB …

MIB 6.1810实验Xv6 and Unix utilities(3)pingpong

Mit6.S081-实验1-Xv6 and Unix utilities-pingpong问题_Isana_Yashiro的博客-CSDN博客 Write a user-level program that uses xv6 system calls to ping-pong a byte between two processes over a pair of pipes, one for each direction. The parent should send a byte to…

【精选】JavaScript语法大合集【附代码和超详细介绍以及使用】

JavaScript语法大合集 JavaScript引入到文件 嵌入到HTML文件中 <body><script>var num10;console.log(num);</script> </body>引入本地独立JS文件 <body><script src"./hello.js"></script> </body>引入网络来源…

nodejs spawn

Node.js 的子进程 (child_process) 模块下有一 spawn 函数&#xff0c;可以用于调用系统上的命令&#xff0c;如在 Linux, macOS 等系统上&#xff0c;我们可以执行如下代码来调用通用的 npm 命令。 const spawn require(child_process).spawn; spawn(npm, {stdio: inherit …

利用JavaScript实现ISO周日历[]

基础知识 阳历&#xff1a; 就是以太阳来计算日期的一类历法&#xff1b;阴历&#xff1a; 就是以月亮来计算日期的一类历法&#xff1b;公历&#xff1a; 属阳历的一种&#xff0c;我国现在使用的就是公历&#xff1b;农历&#xff1a; 我国的农历是一种阴阳合历&#xff0c;…

eclipse启动无法找到类(自定义监听器)

一.报错 二.排查 1.首先检查代码是否有问题 本人报错是找不到监听器&#xff0c;故检查监听器的代码和web.xml文件是否有问题 public class DoorListener implements ServletContextListener 监听器是否继承并实现ServletContextListener中的方法。 web.xml中&#xff1a; &…

linux 服务器进程、端口查找,nginx 配置日志查找,lsof 命令详解

一 、根据端口号 查看文件的部署位置 1.1 使用查看端口号对应的进程信息 方式一 &#xff1a; 使用netstat命令 netstat -tuln | grep 端口号-t&#xff1a;显示TCP连接 -u&#xff1a;显示UDP连接 -l&#xff1a;仅显示监听状态的连接 -n&#xff1a;以数字形式显示端口…

【EI会议征稿】第四届机械设计与仿真国际学术会议(MDS 2024)

【高录用快检索】第四届机械设计与仿真国际学术会议&#xff08;MDS 2024) 2024 4th International Conference on Mechanical Design and Simulation 2024年第四届机械设计与仿真国际学术会议&#xff08;MDS 2024) 将于2024年03月01-03日在中国西安召开。MDS 2024将围绕“…

面试必考精华版Leetcode2542. 最大子序列的分数

题目&#xff1a; 代码&#xff08;首刷看解析 2023年11月17日&#xff09;&#xff1a; class Solution { public:long long maxScore(vector<int>& nums1, vector<int>& nums2, int k) {int n nums1.size();typedef pair<int,int> pii;// int有序…

GitHub访问不了,教你一招,不用开代理就可以访问

1.浏览器上输入网址&#xff1a;ipaddress.com 2.把GitHub地址复制到搜索框 3.搜索 4.一直往下拉直到找到GitHub的IP 5.将ip配置到本地host中&#xff0c;就可以了

表单演示设计,支持自定义页面背景!丨三叠云

表单演示 路径 表单设置 >> 表单演示 功能简介 1.「表单演示」内「数据演示设计」内增加页面背景设置模块。用户可配置页面的背景&#xff0c;目前支持单色和图片设置&#xff0c;满足用户在表单演示时多风格需求。 功能示例&#xff1a; 2.「表单演示」增加「演示设…

echarts 实现tooltip提示框样式自定义

实现echarts图提示框自定义样式&#xff0c;最重要的是给tooltip加一个自定义class&#xff0c;下面是我写的例子&#xff1a; tooltip: {trigger: "axis",axisPointer: {type: "line",},className: "custom-tooltip-box",formatter: function …