本文将介绍Linux环境下如何搭建MinIO集群,注意,并非docker安装方式。

系统要求

官方推荐:

* A 64-bit Linux OS (e.g. RHEL 8, Ubuntu LTS releases).

查看

lsblk

分区格式化

1
2
3
4
5
6
mkfs.xfs /dev/sdb -L DISK1
mkfs.xfs /dev/sdc -L DISK2
mkdir /mnt/disk1
mkdir /mnt/disk2
mount /dev/sdb /mnt/disk1
mount /dev/sdc /mnt/disk2
1
2
3
4
vi /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

安装

The RPM and DEB packages automatically install MinIO to the necessary system paths and create a service file for running MinIO automatically. MinIO strongly recommends using RPM or DEB installation routes.systemd

amd64 (Intel or AMD 64-bit processors) arm或其他另外参照官网

DEB (Debian/Ubuntu)

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

安装后发现多了

/etc/systemd/system/minio.service

配置防火墙

Centos系统:

1
2
3
firewall-cmd --permanent --zone=public --add-port=9000/tcp
firewall-cmd --permanent --zone=public --add-port=9001/tcp
firewall-cmd --reload

Ubuntu系统:

1
2
3
4
5
6
7
8
ufw status verbose
apt install ufw 
ufw enable 
ufw default deny
ufw allow 9000
ufw allow 9001
ufw allow 9000:9010/tcp

启动

1
2
mkdir ~/minio
minio server ~/minio --console-address :9001

没设置’MINIO_ROOT_USER’ and ‘MINIO_ROOT_PASSWORD’时,默认用户密码为:minioadmin:minioadmin

API默认9000端口:http://127.0.0.1:9000

控制台访问地址:http://127.0.0.1:9001

Command-line: https://min.io/docs/minio/linux/reference/minio-mc.html

$ mc alias set myminio http://192.0.2.10:9000 minioadmin minioadmin

-——————————————–

安装MinIO Client

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

使用命令 创建与本地部署关联的新别名

1
2
mc alias set local http://127.0.0.1:9000 minioadmin minioadmin
mc admin info local

负载均衡

可用:

* NGINX

* HAProxy

负载均衡器应使用“最少连接数”算法 将请求路由到 MinIO 部署

https://www.nginx.com/products/nginx/load-balancing/

配置顺序主机名

* minio1.example.com

* minio2.example.com

* minio3.example.com

* minio4.example.com

扩展表示法:

.minio{1…4}.example.com

假设4台

minio1.example.com minio3.example.com

minio2.example.com minio4.example.com

负载均衡地址

https://minio.example.net

配置host:

10.10.137.29 minio.example.net

10.10.137.31 minio1.example.com

10.10.137.32 minio2.example.com

10.10.137.33 minio3.example.com

10.10.137.34 minio4.example.com

官方参考摘要

Local JBOD Storage with Sequential Mounts

MinIO 强烈建议使用带有 XFS 格式磁盘的直连 JBOD 阵列,以获得最佳性能。

Ensure all nodes in the deployment use the same type (NVMe, SSD, or HDD) of drive with identical capacity (e.g. TB) . MinIO does not distinguish drive types and does not benefit from mixed storage types. Additionally. MinIO limits the size used per drive to the smallest drive in the deployment. For example, if the deployment has 15 10TB drives and 1 1TB drive, MinIO limits the per-drive capacity to 1TB.N

确保配置及容量是一致的, 驱动器受限于最小配置

MinIO 需要使用扩展表示法来表示顺序 创建新部署时的驱动器系列,其中 部署具有一组相同的已装载驱动器。MinIO也 要求物理驱动器的顺序在重新启动后保持不变, 这样,给定的装入点始终指向同一格式化的驱动器。最小IO 因此强烈建议使用或类似的基于文件的 装载配置,以确保驱动器顺序在重新启动后不会更改。 例如:{x…y}/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

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

groupadd -r minio-user

useradd -M -r -g minio-user minio-user

chown minio-user:minio-user /mnt/disk1 /mnt/disk2

网络文件系统卷中断一致性保证

MinIO 严格的写后读和写后列表一致性 模型需要本地驱动器文件系统。

如果底层存储,MinIO 无法提供一致性保证 卷是 NFS 或类似的网络连接存储卷。

对于需要使用网络连接存储的部署,请使用 NFSv4 以获得最佳结果。

Homogeneous Node Configurations

同构节点配置

MinIO 强烈建议选择基本相似的硬件 部署中所有节点的配置。确保硬件(CPU、 内存、主板、存储适配器)和软件(操作系统、内核) 设置、系统服务)在所有节点上保持一致。

如果节点具有异构,则部署可能会表现出不可预测的性能 硬件或软件配置。受益于存储陈旧数据的工作负载 低成本硬件上的数据应改为部署专用的“暖”或“冷” MinIO 部署和转换数据到该层。

MinIO 默认为 ,或每个纠删集 4 个奇偶校验块。您可以设置自定义奇偶校验 通过设置适当的 MinIO 存储类环境变量来达到级别。考虑使用 MinIO 纠删码计算器 为您的选择适当的纠删码奇偶校验级别的指南 簇。EC:4

MINIO_STORAGE_CLASS_STANDARD

基于容量的规划

MinIO 通常建议规划容量,以便仅在以下情况下才需要扩展服务器池 2+ 年的部署正常运行时间。

例如,考虑一个应用程序套件,估计会产生 10TB 的 每年的数据。MinIO 部署应至少提供:

10TB + 10TB + 10TB = 30TB

MinIO 建议添加缓冲区存储以考虑潜在的增长 存储的数据(例如,40TB 的总可用存储空间)。根据经验,更多 最初,容量优先于频繁的即时扩展以满足 容量要求。

由于 MinIO 纠删码需要一些 存储 对于奇偶校验,总原始存储必须超过计划的可用容量。考虑使用 MinIO 纠删码计算器作为规划指导 特定纠删码设置周围的容量。

推荐的操作系统

本教程假设所有运行 MinIO 的主机都使用推荐的 Linux 操作系统,例如 RHEL8+ 或 Ubuntu 18.04+。

在分布式环境中启动新的 MinIO 服务器时,存储设备不得具有现有数据。

启动 MinIO 服务器后,与数据的所有交互都必须通过 S3 API 完成。 使用 MinIO 客户端、MinIO 控制台或其中一个 MinIO 软件开发工具包来处理存储桶和对象。

警告

修改后端驱动器上的文件可能会导致数据损坏或数据丢失。

minio配置文件

https://github.com/minio/minio-service/tree/master/linux-systemd

创建配置文件/etc/default/minio,

变量参考https://min.io/docs/minio/linux/reference/minio-server/minio-server.html#minio-server-environment-variables

1
2
3
4
5
6
7
8
cat <<EOT >> /etc/default/minio
MINIO_VOLUMES="https://minio{1...4}.example.net:9000/mnt/disk{1...4}/minio"
MINIO_OPTS="--console-address :9001"
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minio-secret-key-CHANGE-ME
MINIO_SERVER_URL="https://minio.example.net:9000"
MINIO_CONFIG_ENV_FILE=/etc/default/minio
EOT

重新加载配置使用命令

mc admin service restart

配置minio服务启动

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.

( cd /etc/systemd/system/; curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service )

1
systemctl enable minio.service

/etc/systemd/system/minio.service

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[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
# 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
1
2
3
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

添加 TLS/SSL 证书

参考:

https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html#deploy-minio-distributed

https://min.io/docs/minio/linux/operations/network-encryption.html#minio-tls

systemctl enable minio.service

systemctl start minio.service

systemctl status minio.service

journalctl -f -u minio.service

扩容

参考:

https://min.io/docs/minio/container/operations/install-deploy-manage/expand-minio-deployment.html

https://min.io/docs/minio/linux/operations/install-deploy-manage/expand-minio-deployment.html