ubuntu部署minio集群

minio集群介绍

官方文档:https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html

本方案采用在多节点多驱动器 (MNMD) 或“分布式”配置部署 MinIO。 MNMD 部署提供企业级性能、可用​​性和可扩展性,是所有生产工作负载的推荐拓扑。

MNMD 部署支持纠删码配置,该配置可以容忍部署中最多一半的节点或驱动器丢失,同时继续提供读取操作服务。
在这里插入图片描述

集群部署要求

  • 官方推荐的最小配置是4台服务器,每台服务器4个盘,这样可以做到minio高可用。
  • 建议使用单独的分区作为minio的数据存储目录,不能使用根分区的目录作为minio的数据存储目录,但可以每个节点仅一块独立磁盘创建4个常规目录。
  • MinIO 不支持分布式部署的非连续主机名或 IP 地址。可以在每个节点上使用 /etc/hosts 来设置支持扩展表示法的简单 DNS 方案。
  • 多节点系统必须保持时间和日期同步,以维持稳定的节点间操作和交互。

ubuntu部署minio集群

节点规划及磁盘规划如下,每个节点准备四块磁盘:

节点名称节点IPminio磁盘挂载点操作系统
minio1.example.com192.168.72.51/dev/sdb /dev/sdc /dev/sdd /dev/sde/var/lib/minio/data1 /var/lib/minio/data2 /var/lib/minio/data3 /var/lib/minio/data4Ubuntu22.04
minio2.example.com192.168.72.52/dev/sdb /dev/sdc /dev/sdd /dev/sde/var/lib/minio/data1 /var/lib/minio/data2 /var/lib/minio/data3 /var/lib/minio/data4Ubuntu22.04
minio3.example.com192.168.72.53/dev/sdb /dev/sdc /dev/sdd /dev/sde/var/lib/minio/data1 /var/lib/minio/data2 /var/lib/minio/data3 /var/lib/minio/data4Ubuntu22.04
minio4.example.com192.168.72.54/dev/sdb /dev/sdc /dev/sdd /dev/sde/var/lib/minio/data1 /var/lib/minio/data2 /var/lib/minio/data3 /var/lib/minio/data4Ubuntu22.04
lb1.example.com192.168.72.55--Ubuntu22.04
lb2.example.com192.168.72.56--Ubuntu22.04
VIP192.168.72.100---

说明:VIP地址解析到minio.example.com域名,作为统一入口。

  • minio API访问地址为:http://minio.example.com
  • minio console访问地址为:http://minio.example.com/minio/ui

集群架构如下:
在这里插入图片描述

准备节点

所有minio节点分别配置主机名

hostnamectl set-hostname minio1.example.com
hostnamectl set-hostname minio2.example.com
hostnamectl set-hostname minio3.example.com
hostnamectl set-hostname minio4.example.com

所有minio节点分别配置hosts解析

cat >/etc/hosts<<EOF
192.168.72.51 minio1.example.com
192.168.72.52 minio2.example.com
192.168.72.53 minio3.example.com
192.168.72.54 minio4.example.com
EOF

所有minio节点配置时间同步。
Minio 多节点系统必须保持时间和日期同步,以维持稳定的节点间操作和交互。

apt install -y chrony
systemctl enable --now chrony
timedatectl set-timezone Asia/Shanghai

准备磁盘

每个节点挂载4块磁盘,其中sda为系统盘:

root@minio1:~# lsblk -d -n -o NAME | grep '^sd'
sda
sdb
sdc
sdd
sde

在每个节点上,分别创建四个目录来挂载四个驱动器:

sudo mkdir -p /var/lib/minio/data1
sudo mkdir -p /var/lib/minio/data2
sudo mkdir -p /var/lib/minio/data3
sudo mkdir -p /var/lib/minio/data4

分别在每个节点上,将磁盘格式化为 XFS 文件系统:

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

配置自动挂载

cat >>/etc/fstab<<EOF
LABEL=DISK1      /var/lib/minio/data1     xfs     defaults,noatime  0       2
LABEL=DISK2      /var/lib/minio/data2     xfs     defaults,noatime  0       2
LABEL=DISK3      /var/lib/minio/data3     xfs     defaults,noatime  0       2
LABEL=DISK4      /var/lib/minio/data4     xfs     defaults,noatime  0       2
EOF

挂载所有在 /etc/fstab 文件中已定义但尚未挂载的文件系统

sudo mount -av

确认文件系统挂载正常

root@minio1:~# df -hT
......
/dev/sdb                     xfs    100G  746M  100G   1% /var/lib/minio/data1
/dev/sdc                     xfs    100G  746M  100G   1% /var/lib/minio/data2
/dev/sdd                     xfs    100G  746M  100G   1% /var/lib/minio/data3
/dev/sde                     xfs    100G  746M  100G   1% /var/lib/minio/data4

安装minio

分别在每个节点上使用deb包安装 MinIO

wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20240704142545.0.0_amd64.deb -O minio.deb
sudo dpkg -i minio.deb

使用 groupadduseradd 命令创建用户和组

groupadd -r minio-user
useradd -M -r -g minio-user minio-user
chown -R minio-user:minio-user /var/lib/minio

创建服务环境文件

/etc/default/minio 创建环境文件。 MinIO 服务使用此文件作为 MinIO 和 minio.service 文件使用的所有环境变量的源。

cat >/etc/default/minio<<EOF
MINIO_VOLUMES="http://minio{1...4}.example.com:9000/var/lib/minio/data{1...4}/minio"
MINIO_OPTS="--console-address :9001"
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=Minio@123456
MINIO_BROWSER_REDIRECT_URL="http://minio.example.com/minio/ui"
EOF

在部署中的每个节点上发出以下命令以启动 MinIO 服务,需要多个节点依次同时执行

sudo systemctl restart minio.service

使用以下命令确认服务在线且正常运行:

sudo systemctl status minio.service
journalctl -f -u minio.service

打开MinIO控制台

打开浏览器并访问端口 :9001 处的任何 MinIO 主机名以打开 MinIO 控制台登录页面。例如

http://minio1.example.com:9001

使用上一步中的 minio_root_userminio_root_password 登录。

可以使用 MinIO 控制台执行一般管理任务,例如身份和访问管理、指标和日志监控或服务器配置。每个 MinIO 服务器都包含其自己的嵌入式 MinIO 控制台。

配置负载均衡

官方文档:https://min.io/docs/minio/linux/integrations/setup-nginx-proxy-with-minio.html

使用nginxkeepalived实现负载均衡,准备2台服务器作为负载均衡节点。

分别在lb节点配置主机名

hostnamectl set-hostname lb1.example.com
hostnamectl set-hostname lb2.example.com

分别在lb节点配置hosts解析

cat >/etc/hosts<<EOF
192.168.72.55 lb1.example.com
192.168.72.56 lb2.example.com
192.168.72.51 minio1.example.com
192.168.72.52 minio2.example.com
192.168.72.53 minio3.example.com
192.168.72.54 minio4.example.com
EOF

在2个节点安装nginx和keepalived:

apt install -y nginx keepalived

创建nginx配置文件,修改server地址并自定义listen端口,注意修改server_name参数:

cat > /etc/nginx/conf.d/minio-lb.conf <<'EOF'
upstream minio_s3 {least_conn;server minio1.example.com:9000;server minio2.example.com:9000;server minio3.example.com:9000;server minio4.example.com:9000;
}upstream minio_console {least_conn;server minio1.example.com:9001;server minio2.example.com:9001;server minio3.example.com:9001;server minio4.example.com:9001;
}server {listen       80;listen  [::]:80;server_name  minio.example.com;# Allow special characters in headersignore_invalid_headers off;# Allow any size file to be uploaded.# Set to a value such as 1000m; to restrict file size to a specific valueclient_max_body_size 0;# Disable bufferingproxy_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.1proxy_http_version 1.1;proxy_set_header Connection "";chunked_transfer_encoding off;proxy_pass https://minio_s3; # This uses the upstream directive definition to load balance}location /minio/ui/ {rewrite ^/minio/ui/(.*) /$1 break;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 hashedreal_ip_header X-Real-IP;proxy_connect_timeout 300;# To support websockets in MinIO versions released after January 2023proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";# Some environments may encounter CORS errors (Kubernetes + Nginx Ingress)# Uncomment the following line to set the Origin request to an empty string# proxy_set_header Origin '';chunked_transfer_encoding off;proxy_pass https://minio_console; # This uses the upstream directive definition to load balance}
}
EOF

启动nginx服务

systemctl restart nginx

创建keepalived配置文件,根据实际环境修改interfacevirtual_ipaddress参数,2个节点配置相同:

cat > /etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalivedglobal_defs {router_id miniovrrp_version 2vrrp_garp_master_delay 1script_user rootenable_script_security 
}vrrp_script chk_nginx {script       "/usr/bin/killall -0 nginx"timeout 3interval 3   # check every 1 secondfall 2       # require 2 failures for KOrise 2       # require 2 successes for OK
}vrrp_instance lb-minio {state BACKUPinterface ens33virtual_router_id 51priority 100advert_int 1nopreemptauthentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.72.100}track_script {chk_nginx}
}
EOF

启动keepalvied服务

systemctl restart keepalived

查看生成的VIP地址

root@lb1:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:50:56:9a:92:75 brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.72.55/24 brd 192.168.72.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.72.100/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::250:56ff:fe9a:9275/64 scope link valid_lft forever preferred_lft forever

测试连接

在需要访问minio的机器上,配置hosts解析

echo "192.168.72.100 minio.example.com" >>/etc/hosts

浏览器访问minio console

http://minio.example.com/minio/ui/

查看Metrics信息:
在这里插入图片描述

任意机器安装minio客户端

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
mv mc /usr/local/bin/

配置minio客户端

mc alias set myminio http://minio.example.com minioadmin Minio@123456

通过API接口,查看集群状态

root@ubuntu:~# mc admin info myminio
●  minio1.example.com:9000Uptime: 25 minutes Version: 2024-07-04T14:25:45ZNetwork: 4/4 OK Drives: 4/4 OK Pool: 1●  minio2.example.com:9000Uptime: 25 minutes Version: 2024-07-04T14:25:45ZNetwork: 4/4 OK Drives: 4/4 OK Pool: 1●  minio3.example.com:9000Uptime: 25 minutes Version: 2024-07-04T14:25:45ZNetwork: 4/4 OK Drives: 4/4 OK Pool: 1●  minio4.example.com:9000Uptime: 25 minutes Version: 2024-07-04T14:25:45ZNetwork: 4/4 OK Drives: 4/4 OK Pool: 1Pools:1st, Erasure sets: 1, Drives per erasure set: 1616 drives online, 0 drives offline
root@ubuntu:~#  

参考:https://elma365.com/en/help/minio-cluster.html

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

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

相关文章

jmeter-beanshell学习4-beanshell截取字符串

再写个简单点的东西&#xff0c;截取字符串&#xff0c;参数化文件统一用csv&#xff0c;然后还要用excel打开&#xff0c;如果是数字很容易格式就乱了。有同事是用双引号把数字引起来&#xff0c;报文里就不用加引号了&#xff0c;但是这样beanshell处理起来&#xff0c;好像容…

Facebook社交平台的未来发展趋势分析

随着科技和社交需求的不断演变&#xff0c;Facebook作为全球最大的社交平台之一&#xff0c;其未来发展的趋势备受关注。从技术创新到社会影响&#xff0c;Facebook正在经历着前所未有的变化和挑战。本文将探讨Facebook未来发展的几个关键趋势&#xff0c;并分析其可能的影响和…

MySQL MVCC

总结自小林coding&#xff0c;bojiangzhou 脏读、不可重复读、幻读 说的都是并发读取的问题&#xff0c;最简单的方式就是给记录加一把锁&#xff0c;不管是更新、读取记录都需要竞争到这把锁之后才能操作。但这种方式的并发性能可想而知会有多么低。 于是 InnoDB 就设计了MVC…

LeetCode HOT100(二)双指针

移动0 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 解法1&#xff1a;双指针交换 指针L&…

“论基于构件的软件开发方法及其应用”写作框架,软考高级论文,系统架构设计师论文

论文真题 基于构作的软件开发 (Component-Based Software Development&#xff0c;CBSD) 是一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径。基于构件的软件系统中的构件可以是COTS &#xff08;Commercial-Off-the-Shelf&#xff09;构件&#x…

Spring Boot轻松整合Minio实现文件上传下载功能

一、Linux 安装Minio 安装 在/root/xxkfz/soft目录下面创建文件minio文件夹&#xff0c;进入minio文件夹&#xff0c;并创建data目录&#xff1b; [rootxxkfz soft]# mkdir minio [rootxxkfz soft]# cd minio [rootxxkfz minio]# mkdir data 执行如下命令进行下载 [rootxx…

Java内存划分详解:从基础到进阶

Java内存划分详解&#xff1a;从基础到进阶 1. 程序计数器&#xff08;Program Counter Register&#xff09;2. Java虚拟机栈&#xff08;Java Virtual Machine Stack&#xff09;3. 堆&#xff08;Heap&#xff09;4. 方法区&#xff08;Method Area&#xff09;5. 运行时常量…

[计网初识1] TCP/UDP

学习内容 1.TCP建立链接的3次握手&#xff0c;断开连接的4次挥手 2.TCP报文段组成 内容 1.TCP 建立连接的3次握手? 假设主动方是客户端&#xff0c;被动方是服务端。 第一次 客户端给服务端发送 “hello,我是客户端” (TCP段中 SYN1) 第二次 服务端给客户端发送"我接…

从零开始的python学习生活2

接上封装 class Phone:__volt0.5def __keepsinglecore(self):print("让cpu以单核运行")def if5G(self):if self.__volt>1:print("5G通话已开启")else:self.__keepsinglecore()print("电量不足&#xff0c;无法使用5G通话&#xff0c;已经设置为单…

Django项目创建的准备工作【 2 】

【 一 】调整后端目录 #1 目录结构 """ ├── luffy_api├── logs/ # 项目运行时/开发时日志目录 - 包├── manage.py # 脚本文件├── luffy_api/ # 项目主应用&#xff0c;开发时的代码保存 - 包├── apps/ …

【Git基本操作】添加文件 | 修改文件 | 及其各场景下.git目录树的变化

目录 1. 添加文件&add操作和commit操作 2. .git树状目录的变化 3. git其他操作 4. 修改文件 4.1 git status 4.2 git diff 1. 添加文件&add操作和commit操作 add操作&#xff1a;将工作区中所有文件的修改内容 添加进版本库的暂存区中。commit操作&#xff1a;…

系统服务综合实验(dns服务,nfs服务)

题目&#xff1a;现有主机 node01 和 node02&#xff0c;完成如下需求&#xff1a; 1、在 node01 主机上提供 DNS 和 WEB 服务 2、dns 服务提供本实验所有主机名解析 3、web服务提供 www.rhce.com 虚拟主机 4…

three-tile: 1. 第一个three-tile程序

上篇介绍了&#xff1a;three-tile&#xff1a; 一个开源的轻量级三维瓦片库-CSDN博客 three-tile 是一个开源的轻量级三维瓦片库&#xff0c;它基于threejs使用typescript开发&#xff0c;提供一个三维地形模型&#xff0c;能轻松给你的应用增加三维瓦片地图。 项目地址&…

C#知识|账号管理系统:UI层-添加账号窗体设计思路及流程。

哈喽,你好啊,我是雷工! 前边练习过详情页窗体的设计思路及流程: 《C#知识|上位机UI设计-详情窗体设计思路及流程(实例)》 本节练习添加账号窗体的UI设计,以下为学习笔记。 01 效果展示 02 添加窗体 在UI层添加Windows窗体,设置名称为:FrmAddAcount.cs 设置窗体属…

Nginx七层(应用层)反向代理:UWSGI代理uwsgi_pass篇

Nginx七层&#xff08;应用层&#xff09;反向代理 UWSGI代理uwsgi_pass篇 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this a…

数据结构模板2

Trie树&#xff1a;用来高效存储和查找字符串集合的数据结构&#xff1a; 模板题&#xff1a;https://www.acwing.com/problem/content/837/ AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int son[100010][26],cnt[100010],idx; char str[100010]; …

代码随想录算法训练营第二十九天

452. 用最少数量的箭引爆气球 这道题目我原本的想法是只要当前的气球半径范围在已有的箭头能够击穿的气球半径内就可以实现 但是 箭射出去的地方是一个值 而不是一个范围 因此有相同的重叠范围的许多气球并一定都有相同的值&#xff0c;因此这种方法不可取 这题的主要局部最…

mac安装配置cmake

本机是2015 macbook pro mid&#xff0c;已经有点老了&#xff0c;用homebrew下cmake老出问题 其实cmake官网安装也不麻烦 一、官网下载对应安装包 Download CMake 和所有dmg文件一样安装 二、改成命令行使用 一般来说 tutorial 给的都是命令行build 命令行的设置如下&am…

SFUZZ模糊测试平台全新升级,从标准到实践助力车企安全出海

开源网安模糊测试平台SFuzz全新升级&#xff0c;参照各国相关标准要求进行针对性建设&#xff0c;可为智能网联汽车信息安全测试提供更为强大的工具支持。SFuzz向被测系统输入大量随机数据&#xff0c;模拟各种异常情况&#xff0c;可以发现被测系统内潜在的缺陷和漏洞&#xf…

Spring中如何操作Redis

Spring毕竟是Java中的一个主流框架&#xff0c;如何在这个框架中使用Redis呢&#xff1f; 创建项目并引入相关依赖 然后进行创建。 至此就将Redis的相关依赖引入进来了。 编写Redis配置 将application.properties修改成application.yml 然后编写如下配置&#xff1a; spr…