0%

minio安装

本文收集整理自minio.io官方, 2023年6月文档

单节点单驱动器

本页上的过程介绍了在单节点单驱动器(SNSD)配置中部署 MinIO,以便进行早期开发和评估。SNSD 除了底层存储卷实现的内容(RAID、LVM、ZFS 等)之外,部署不提供额外的可靠性或可用性。

从开始 RELEASE.2022-06-02T02-11-04Z,MinIO 为单节点单驱动器部署实现了零奇偶校验纠删码后端。此功能允许在不需要多个驱动器的情况下访问 纠删码相关功能

MinIO仅从 SNSD(Single-Node,Single-Drive) 模式,如果存储卷或路径为空 _or_,则仅包含由以前的 SNSD 部署。有关详细信息,请参阅上的 具有预先存在数据的 SNSD 行为 文档。

对于扩展的开发或生产环境,请在拓扑中 多节点多驱动器(分布式) 部署 MinIO

RELEASE.2022-10-29T06-21-33Z 完全删除 已弃用的网关/文件系统 后端。如果 MinIO 启动并检测到现有的文件系统后端文件,则会返回错误。

要从 FS 后端部署迁移,请使用 mc mirrormc cp 将数据复制到新的 MinIO SNSD 部署。你还应该在 SNSD 部署。

预先存在的数据

MinIO 启动行为取决于指定存储卷或路径的内容。服务器检查 MinIO 内部后端数据以及现有文件夹和文件的结构。下表列出了可能的存储卷状态和 MinIO 行为:

部署单节点单驱动器 MinIO

以下过程部署由单个 MinIO 服务器和单个驱动器或存储卷组成的 MinIO。

1) 下载 MinIO 服务器

rpm:

wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20230504214430.0.0.x86_64.rpm -O minio.rpm
rpm -ivh install minio.rpm

二进制

wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/

2) systemd 创建服务文件

.deb或软件包.rpm将以下 systemd服务文件安装到 /etc/systemd/system/minio.service. 对于二进制安装,在所有 MinIO 主机上手动创建此文件:

[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

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

默认情况下,该minio.service文件作为minio-user用户和组运行。groupadd您可以使用和命令创建用户和组useradd 。以下示例创建用户、组并设置权限以访问旨在供 MinIO 使用的文件夹路径。这些命令通常需要 root ( sudo) 权限。

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

指定的驱动器路径作为示例提供。更改它们以匹配 MinIO 打算使用的那些驱动器的路径。

User或者,将和值更改Group为系统主机上具有必要访问权限和权限的另一个用户和组。
附:
MinIO 在github.com/minio/minio-service上发布了额外的启动脚本示例 。

3) 创建环境变量文件

创建一个环境变量文件在/etc/default/minio
例子:

# cat /etc/default/minio
# MINIO_ROOT_USER and MINIO_ROOT_PASSWORD sets the root account for the MinIO server.
# This user has unrestricted permissions to perform S3 and administrative API operations on any resource in the deployment.
# Omit to use the default values 'minioadmin:minioadmin'.
# MinIO recommends setting non-default values as a best practice, regardless of environment

MINIO_ROOT_USER=USER
MINIO_ROOT_PASSWORD=PASSWORD

# Use if you want to run MinIO on a custom port.
# MINIO_OPTS="--address :9199 --console-address :9001"
MINIO_OPTS="--console-address :40167"

# MINIO_VOLUMES sets the storage volume or path to use for the MinIO server.

MINIO_VOLUMES="/data/web_server/minio_data"

# MINIO_SERVER_URL sets the hostname of the local machine for use with the MinIO Server
# MinIO assumes your network control plane can correctly resolve this hostname to the local machine

4) 启动 MinIO 服务

在本地主机上发出以下命令以启动 MinIO SNSD部署作为服务:

sudo systemctl start minio.service

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

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

当服务器进程连接和同步时,MinIO 可能会记录更多的非严重警告。这些警告通常是暂时的,应该会在部署上线时解决。
如果任何驱动器在启动 MinIO 后仍处于脱机状态,请在开始生产工作负载之前检查并解决任何阻碍其功能的问题。

输出journalctl应类似于以下内容:

# systemctl status  minio -l
● minio.service - MinIO
Loaded: loaded (/etc/systemd/system/minio.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2023-05-12 11:44:29 CST; 16s ago
Docs: https://min.io/docs/minio/linux/index.html
Process: 1702456 ExecStartPre=/bin/bash -c if [ -z "${MINIO_VOLUMES}" ]; then echo "Variable MINIO_VOLUMES not set in /etc/default/minio"; exit 1; fi (code=exited, status=0/SUCCESS)
Main PID: 1702459 (minio)
CGroup: /system.slice/minio.service
└─1702459 /usr/local/bin/minio server --console-address :40167 /data/web_server/minio_data

May 12 11:44:30 ksgame-gamecloud-minio-test-1.hb.txyun minio[1702459]: Copyright: 2015-2023 MinIO, Inc.
May 12 11:44:30 ksgame-gamecloud-minio-test-1.hb.txyun minio[1702459]: License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
May 12 11:44:30 ksgame-gamecloud-minio-test-1.hb.txyun minio[1702459]: Version: RELEASE.2023-04-13T03-08-07Z (go1.20.3 linux/amd64)
May 12 11:44:30 ksgame-gamecloud-minio-test-1.hb.txyun minio[1702459]: Status: 1 Online, 0 Offline.
May 12 11:44:30 ksgame-gamecloud-minio-test-1.hb.txyun minio[1702459]: API: http://10.73.198.192:9000 http://127.0.0.1:9000
May 12 11:44:30 ksgame-gamecloud-minio-test-1.hb.txyun minio[1702459]: Console: http://10.73.198.192:40167 http://127.0.0.1:40167
May 12 11:44:30 ksgame-gamecloud-minio-test-1.hb.txyun minio[1702459]: Documentation: https://min.io/docs/minio/linux/index.html
May 12 11:44:30 ksgame-gamecloud-minio-test-1.hb.txyun minio[1702459]: Warning: The standard parity is set to 0. This can lead to data loss.
May 12 11:44:30 ksgame-gamecloud-minio-test-1.hb.txyun minio[1702459]: You are running an older version of MinIO released 3 weeks ago
May 12 11:44:30 ksgame-gamecloud-minio-test-1.hb.txyun minio[1702459]: Update: Run `mc admin update`

5) 连接到 MinIO 服务

多节点多驱动器

顺序主机名

MinIO_需要_在创建服务器池时使用扩展符号{x...y}来表示一系列连续的 MinIO 主机。因此,MinIO_需要_ 使用按顺序编号的主机名来表示 部署中的每个进程。

例如,以下主机名将支持 4 节点分布式部署:

  • ksgame-gamecloud-minio-test-1.hb.txyun
  • ksgame-gamecloud-minio-test-2.hb.txyun
  • ksgame-gamecloud-minio-test-3.hb.txyun
  • ksgame-gamecloud-minio-test-4.hb.txyun

顺序挂载的本地 JBOD 存储

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

  • 与网络存储(NAS、SAN、NFS)相比,直连存储 (DAS) 具有显着的性能和一致性优势。

  • 使用非 XFS 文件系统(ext4、btrfs、zfs)的部署往往性能较低,同时会出现意外或不良行为。

  • RAID 或类似技术在与分布式 MinIO 部署一起使用时不会提供额外的弹性或可用性优势,并且通常会降低系统性能。

确保部署中的所有节点都使用具有相同容量(例如NTB)的相同类型(NVMe、SSD 或 HDD)的驱动器。MinIO 不区分驱动器类型,也不受益于混合存储类型。此外。MinIO 将每个驱动器使用的大小限制为部署中的最小驱动器。例如,如果部署有 15 个 10TB 驱动器和 1 个 1TB 驱动器,MinIO 将每个驱动器的容量限制为 1TB。

MinIO_要求_在创建新部署时使用扩展符号{x...y}来表示一系列连续的驱动器,其中部署中的所有节点都有一组相同的已安装驱动器。MinIO 还要求物理驱动器的顺序在重启后保持不变,这样给定的挂载点总是指向相同格式的驱动器。因此,MinIO强烈建议使用/etc/fstab或类似的基于文件的挂载配置,以确保驱动器顺序在重启后不会更改。例如:

然后您可以使用扩展符号指定整个驱动器范围 /mnt/disk{1...2}。如果要在每个驱动器上使用特定的子文件夹,请将其指定为/mnt/disk{1...2}/minio.

挂载数据盘:

# mkdir /mnt/disk1
# mount /dev/vdb /mnt/disk1
# mkdir /mnt/disk2
# mount /dev/vdc /mnt/disk2
# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs tmpfs 3.9G 52K 3.9G 1% /dev/shm
tmpfs tmpfs 3.9G 780K 3.9G 1% /run
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda1 ext4 99G 5.6G 89G 6% /
tmpfs tmpfs 785M 0 785M 0% /run/user/0
tmpfs tmpfs 785M 0 785M 0% /run/user/1000
tmpfs tmpfs 785M 0 785M 0% /run/user/1101
/dev/vdb xfs 500G 33M 500G 1% /mnt/disk1
/dev/vdc xfs 500G 33M 500G 1% /mnt/disk2

写入fstab,开机自动挂载:

# cat /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

部署分布式 MinIO

以下过程创建一个新的分布式 MinIO 部署,其中包含一个Server Pool

下面提供的所有命令都使用示例值。将这些值替换为适合部署的值。

1 在每个节点上安装 MinIO 二进制文件

以下选项卡提供了使用 RPM、DEB 或二进制将 MinIO 安装到 64 位 Linux 操作系统上的示例。RPM 和 DEB 包自动将 MinIO 安装到必要的系统路径并miniosystemctl. MinIO 强烈建议使用 RPM 或 DEB 安装路径。要更新使用管理的部署systemctl,请参阅更新 systemctl-Managed MinIO 部署

wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/

2 创建systemd服务文件

.deb或软件包.rpm将以下 systemd服务文件安装到 /etc/systemd/system/minio.service. 对于二进制安装,在所有 MinIO 主机上手动创建此文件:

[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用户和组运行。groupadd您可以使用和命令创建用户和组useradd 。以下示例创建用户、组并设置权限以访问旨在供 MinIO 使用的文件夹路径。这些命令通常需要 root ( sudo) 权限。

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

User或者,将和值更改Group为系统主机上具有必要访问权限和权限的另一个用户和组。

MinIO 在github.com/minio/minio-service上发布了额外的启动脚本示例 。

3 创建服务环境文件

在 处创建一个环境文件/etc/default/minio。MinIO 服务使用这个文件作为 MinIO和_文件使用的所有 环境变量的来源 。minio.service

目前测试环境有4台实例
ksgame-gamecloud-minio-test-1.hb.txyun
ksgame-gamecloud-minio-test-2hb.txyun
ksgame-gamecloud-minio-test-3.hb.txyun
ksgame-gamecloud-minio-test-4.hb.txyun
每台实例挂载2块数据盘
/mnt/disk1
/mnt/disk2

修改示例以反映您的部署拓扑:

cat minio
# MINIO_ROOT_USER and MINIO_ROOT_PASSWORD sets the root account for the MinIO server.
# This user has unrestricted permissions to perform S3 and administrative API operations on any resource in the deployment.
# Omit to use the default values 'minioadmin:minioadmin'.
# MinIO recommends setting non-default values as a best practice, regardless of environment

MINIO_ROOT_USER=USER
MINIO_ROOT_PASSWORD=PASSWORD

# Use if you want to run MinIO on a custom port.
# MINIO_OPTS="--address :9199 --console-address :9001"
MINIO_OPTS="--console-address :40167 --address :9000"

# MINIO_VOLUMES sets the storage volume or path to use for the MinIO server.

#MINIO_VOLUMES="/minio_data"
MINIO_VOLUMES="http://ksgame-gamecloud-minio-test-{1...4}.hb.txyun:9000/mnt/disk{1...2}"

# MINIO_SERVER_URL sets the hostname of the local machine for use with the MinIO Server
# MinIO assumes your network control plane can correctly resolve this hostname to the local machine
[sre@game-cs002 /home/sre/game-scripts/minio]$cat minio
# MINIO_ROOT_USER and MINIO_ROOT_PASSWORD sets the root account for the MinIO server.
# This user has unrestricted permissions to perform S3 and administrative API operations on any resource in the deployment.
# Omit to use the default values 'minioadmin:minioadmin'.
# MinIO recommends setting non-default values as a best practice, regardless of environment

MINIO_ROOT_USER=USER
MINIO_ROOT_PASSWORD=$PASSWORD

# Use if you want to run MinIO on a custom port.
# MINIO_OPTS="--address :9199 --console-address :9001"
MINIO_OPTS="--console-address :9001 --address :9000"

# MINIO_VOLUMES sets the storage volume or path to use for the MinIO server.

#MINIO_VOLUMES="/minio_data"
MINIO_VOLUMES="http://ksgame-gamecloud-minio-test-{1...4}.hb.txyun:9000/mnt/disk{1...2}"

# MINIO_SERVER_URL sets the hostname of the local machine for use with the MinIO Server
# MinIO assumes your network control plane can correctly resolve this hostname to the local machine

您可以根据部署的需要指定其他环境变量或服务器命令行选项。部署中的所有 MinIO 节点都应该包含相同的环境变量,每个变量的值都相同。

4 添加 TLS/SSL 证书

因为我们有nginx集群,证书统一托管,故未在minio机器上单独部署证书,姑且一看

MinIO在 MinIO目录中检测到有效的 x.509 证书 ( ) 和私钥 ( ) 后自动启用传输层安全 (TLS) 1.2+ 。.crt``.key``${HOME}/.minio/certs

对于systemd托管部署,使用$HOME运行 MinIO 服务器进程的用户的目录。提供的minio.service 文件以minio-user. 前面的步骤包括使用主目录创建此用户的说明/home/minio-user

  • 将 TLS 证书放入/home/minio-user/.minio/certs.

  • 如果_任何_MinIO 服务器或客户端使用由未知证书颁发机构(自签名或内部 CA)签名的证书,则必须_将_CA 证书放在/home/minio-user/.minio/certs/CAs部署中的所有 MinIO 主机上。MinIO 拒绝无效证书(不受信任、过期或格式错误)。

如果该minio.service文件指定了不同的用户帐户,请使用 $HOME该帐户的目录。或者,使用命令行参数指定自定义证书目录 。修改中的变量 以设置此选项。运行 MinIO 服务器进程的用户必须_对_指定目录具有读取和列出权限。minio server --certs-dirMINIO_OPTS``/etc/defaults/minio``systemd

有关为 TLS 配置 MinIO 的更多具体指南,包括通过服务器名称指示 (SNI) 的多域支持,请参阅网络加密 (TLS)。您可以选择跳过此步骤以在不启用 TLS 的情况下进行部署。MinIO 强烈建议_不要在早期开发之外进行_非 TLS 部署。

5 运行 MinIO 服务器进程

在部署中的每个节点上发出以下命令以启动 MinIO 服务:

sudo systemctl start minio.service

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

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

当服务器进程连接和同步时,MinIO 可能会记录更多的非严重警告。这些警告通常是暂时的,应该会在部署上线时解决。

6 nginx配置

参考

upstream minio-minio-api {
server 10.73.198.192:9000 weight=10;
server 10.73.198.162:9000 weight=10;
server 10.73.195.139:9000 weight=10;
server 10.73.195.171:9000 weight=10;
keepalive 1000;
check interval=5000 rise=2 fall=3 timeout=30000 type=tcp default_down=false;
}

server {
listen 80;
listen 443 ssl;
include extra/YOURCERT;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 5m;
ssl_prefer_server_ciphers on;
ssl_ciphers AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

server_name YOURDOMAIN;

access_log /data/logs/nginx/gifshow.access.log main;
error_log /data/logs/nginx/gifshow.error.log;

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

if ( $scheme = http ) {
return 301 https://$host$request_uri;
}

include extra/logid.conf;
include limit/waf_anticc.conf;
include extra/proxy.conf;

location / {
client_body_buffer_size 10m;
client_max_body_size 100m;
proxy_buffers 1024 4k;
proxy_read_timeout 300;
proxy_pass http://minio-api;
}
}

7 打开 MinIO 控制台

打开浏览器并在端口访问任何 MinIO 主机名:9001以打开MinIO 控制台登录页面。例如, https://minio1.example.com:9001

使用上一步中的minio_root_user和minio_root_password登录。

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

多节点多驱动器部署完成

欢迎关注我的其它发布渠道