如何基于RHEL 8.x二进制部署MinIO?

MinIO

1 基础知识

1.1 基础概念

1.1.1 JBOD的概念

– JBOD即英文“Just a bunch of disks”的缩写,直译即“仅一堆磁盘”
– JBOD是基于底板上安装多个磁盘驱动器的存储设备(常称为Span)
– JBOD与RAID不同的是没有前端逻辑来管理磁盘上的数据分布(每个磁盘进行单独寻址,作为独立的存储资源)
– JBOD是存储领域中一类重要的存储设备

1.1.2 JBOD的实例


如上图所示,
– Span基于逻辑上把几个物理磁盘串联成一个逻辑磁盘
– Span数据从DISK0开始存储,当DISK0存满后再从DISK1开始存储并依次类推
– Span数据存储完全等同于对单一磁盘的存取操作
– Span不提供数据安全保障,只提供简单利用磁盘的方法
– Span的存储容量等于所有DISK的容量之和

1.1.3 JBOD与RAID0的区别

– RAID0主要使用条带(striping)技术
– Striping是指存储数据时,将数据根据特定大小(stripe size)分段,然后把数据段保存于不同的磁盘
– 所以RAID0单个磁盘损坏会导致整个磁盘阵列数据丢失
– 所以RAID0的数据读写由多个磁盘并发完成(有加速功能)
– JBOD严格来说不属于RAID,只是对多个磁盘进行简单的串联成一个逻辑磁盘
– JBOD并不提供任何数据冗余技术
– JBOD数据存放机制从第一块磁盘开始依次向后存储数据
– JBOD单个磁盘损坏,只会丢失单个磁盘的数据

1.2 MinIO的特点

1.2.1 MinIO的介绍

– MinIO是一种高性能的分布式对象存储系统
– MinIO支持软件定义硬件
– MinIO可运行于行业标准硬件
– MinIO基于Apache V2许可下100%开放源代码

1.2.2 速度快


– MinIO是世界上最快的对象存储服务器
– 基于标准的硬件读写速度可达183GB/s和171GB/s

1.2.3 易于扩展


– 由于支持多个集群联合创建统一的名称空间
– 所以支持跨数据中心横向扩展

1.2.4 基于云设计


– 基于云技术与架构
– 技术包括容器化以及Kubernetes、微服务和多租户

1.2.5 开放源代码


– 基于Apache V2许可,100%开放源代码
– 客户可自由修改和发布

1.2.6 与亚马逊API兼容


– MinIO采用兼容于亚马逊S3 API的对象存储标准
– MinIO支持S3 Select

1.2.7 部署简单


– 基于极简原则设计
– 支持几分钟内安装和配置

1.3 MinIO的架构


– MinIO基于本地连接的驱动器(JBOD/JBOF)的商业服务器上运行
– MinIO集群中所有服务的功能(角色)均相同,没有名称节点与元数据服务器之分
– MinIO集群可以看做是分布式MinIO服务器的集合(每个节点的进程运行于单独的用户空间)
– MinIO进程间轻量级的协程实现高并发
– MinIO将驱动器分组到擦除集(默认每组16个驱动器)
– MinIO的数据对象将按特定的哈希算法将分布到不同的擦除集
– MinIO针对数据中心云存储设计,每个租户对应单独的集群(与其他租户完全隔离)
– MinIO的每个组合通过联合跨地理区域的集群来独立扩展

1.4 MinIO的适用场景

– MinIO可作为主要的存储层
– MinIO可替代Spark、Presto、TensorFlow、H2O.ai、Hadoop HDFS的负载

1.5 最低硬件要求

– Processor: Dual Intel® Xeon® Scalable Gold CPUs (minimum 8 cores per socket).
– Memory: 128GB RAM
– Network: 25GbE for high-density and 100GbE NICs for high-performance.
– Drives: SATA/SAS HDDs for high-density and NVMe SSDs for high-performance (minimum of 8 drives per server).

2 最佳实践

2.1 系统环境

OS = RHEL 8.x x86_64
IP Address = 10.168.0.60
host name = any.cmdschool.org

2.2 安装前的准备

2.2.1 关闭SELinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

2.2.2 开放服务所需的端口

firewall-cmd --permanent --add-port 9000/tcp --add-port 9001/tcp
firewall-cmd --reload
firewall-cmd --list-all

2.2.3 下载软件包

cd ~
wget https://dl.min.io/server/minio/release/linux-amd64/minio

其他版本,请从以下链接下载,
https://min.io/download#/linux

2.2 程序的部署

2.2.1 部署程序到目录

cd ~
mv minio /usr/local/bin/minio
chmod +x /usr/local/bin/minio

部署完成后,可使用如下命令测试,

minio -v

可见如下显示,

minio version RELEASE.2022-06-03T01-40-53Z
commit: 61a7434379164c0a2150db8047343e9ec769ae91
go version: go1.18.3

另外,具体的命令行使用方法,可通过如下命令查询,

minio -h

可见如下显示,

NAME:
  minio - High Performance Object Storage

DESCRIPTION:
  Build high performance data infrastructure for machine learning, analytics and application data workloads with MinIO

USAGE:
  minio [FLAGS] COMMAND [ARGS...]

COMMANDS:
  server   start object storage server
  gateway  start object storage gateway

FLAGS:
  --certs-dir value, -S value  path to certs directory (default: "/root/.minio/certs")
  --quiet                      disable startup and info messages
  --anonymous                  hide sensitive information from logging
  --json                       output logs in JSON format
  --version, -v                print version information
  --help, -h                   show help

VERSION:
  0.0.0

从帮助可知,minio提供两条命令,我们尝试执行“server”命令,

/usr/local/bin/minio server

可见如下显示,

NAME:
  minio server - start object storage server

USAGE:
  minio server [FLAGS] DIR1 [DIR2..]
  minio server [FLAGS] DIR{1...64}
  minio server [FLAGS] DIR{1...64} DIR{65...128}

DIR:
  DIR points to a directory on a filesystem. When you want to combine
  multiple drives into a single large system, pass one directory per
  filesystem separated by space. You may also use a '...' convention
  to abbreviate the directory arguments. Remote directories in a
  distributed setup are encoded as HTTP(s) URIs.

FLAGS:
  --address value              bind to a specific ADDRESS:PORT, ADDRESS can be an IP or hostname (default: ":9000") [$MINIO_ADDRESS]
  --listeners value            bind N number of listeners per ADDRESS:PORT (default: 1) [$MINIO_LISTENERS]
  --console-address value      bind to a specific ADDRESS:PORT for embedded Console UI, ADDRESS can be an IP or hostname [$MINIO_CONSOLE_ADDRESS]
  --certs-dir value, -S value  path to certs directory (default: "/root/.minio/certs")
  --quiet                      disable startup and info messages
  --anonymous                  hide sensitive information from logging
  --json                       output logs in JSON format
  --help, -h                   show help

EXAMPLES:
  1. Start minio server on "/home/shared" directory.
     $ minio server /home/shared

  2. Start single node server with 64 local drives "/mnt/data1" to "/mnt/data64".
     $ minio server /mnt/data{1...64}

  3. Start distributed minio server on an 32 node setup with 32 drives each, run following command on all the nodes
     $ export MINIO_ROOT_USER=minio
     $ export MINIO_ROOT_PASSWORD=miniostorage
     $ minio server http://node{1...32}.example.com/mnt/export{1...32}

  4. Start distributed minio server in an expanded setup, run the following command on all the nodes
     $ export MINIO_ROOT_USER=minio
     $ export MINIO_ROOT_PASSWORD=miniostorage
     $ minio server http://node{1...16}.example.com/mnt/export{1...32} \
            http://node{17...64}.example.com/mnt/export{1...64}

2.2.2 创建运行用户

groupadd  -g 103 minio
useradd -u 103 -g 103 -d /var/lib/minio -s /bin/bash minio

2.2.3 创建程序所需的目录

mkdir -p /data/minio
chown minio:minio /data/minio
chmod 775 /data/minio

注:目录不能是根分区目录,否则会有错误提示

2.2.4 手动测试程序运行

su - minio
export MINIO_ROOT_USER="minio"
export MINIO_ROOT_PASSWORD="miniopwd"
export MINIO_ADDRESS=":9000"
export MINIO_LISTENERS="1"
export MINIO_CONSOLE_ADDRESS=":9001"
/usr/local/bin/minio server /data/minio

可见如下提示,

Automatically configured API requests per node based on available memory on the system: 30
Status:         1 Online, 0 Offline.
API: http://10.10.200.181:9000  http://127.0.0.1:9000
RootUser: minio
RootPass: miniopwd

Console: http://10.10.200.181:9001 http://127.0.0.1:9001
RootUser: minio
RootPass: miniopwd

Command-line: https://docs.min.io/docs/minio-client-quickstart-guide
   $ mc alias set myminio http://10.10.200.181:9000 minio miniopwd

Documentation: https://docs.min.io
Finished loading IAM sub-system (took 0.0s of 0.0s to load data).

可使用如下命令查看启动的进程号,

pgrep -u minio minio

可使用如下命令退出程序,

kill 2 `pgrep -u minio minio`

2.2.5 配置服务控制脚本

vim /usr/lib/systemd/system/minio.service

加入如下配置,

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

[Service]
WorkingDirectory=/var/lib/minio
User=minio
Group=minio
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
# 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})

修改完脚本后,你需要使用如下命令重载服务,

systemctl daemon-reload

另外,由于服务中定义环境变量文件“/etc/default/minio”我们需要创建它,

vim /etc/default/minio

加入如下定义,

MINIO_VOLUMES="/data/minio"
MINIO_ROOT_USER="minio"
MINIO_ROOT_PASSWORD="miniopwd"
MINIO_ADDRESS=":9000"
MINIO_LISTENERS="1"
MINIO_CONSOLE_ADDRESS=":9001"

请特别留意“MINIO_ACCESS_KEY”与“MINIO_SECRET_KEY”的定义,另外你也可以使用如下快速命令创建,

cat <<EOT>> /etc/default/minio
MINIO_VOLUMES="/data/minio"
MINIO_ROOT_USER="minio"
MINIO_ROOT_PASSWORD="miniopwd"
MINIO_ADDRESS=":9000"
MINIO_LISTENERS="1"
MINIO_CONSOLE_ADDRESS=":9001"
EOT

请使用如下命令控制服务和查询状态,

systemctl start minio.service
systemctl status minio.service
systemctl stop minio.service
systemctl restart minio.service

测试完毕,建议你使用如下命令设置服务自动启动,

systemctl enable minio.service

2.2.6 测试服务端口

http://10.168.0.60:9001/

参阅文档
==================

快速安装指南
——————
https://docs.min.io/docs/minio-quickstart-guide.html

MinIO下载页面
————-
https://min.io/download#/linux

MinIO文档
—————
https://docs.min.io/

MinIO官方首页
————–
https://min.io/

JBOD的概念
—————
https://baike.baidu.com/item/JBOD/3624200?fr=aladdin

uid与gid参考
——————
https://wiki.archlinux.org/index.php?title=DeveloperWiki:UID_/_GID_Database

systemd的配置
——————
https://github.com/minio/minio-service/tree/master/linux-systemd

没有评论

发表回复

MinIO
如何使用MinFS挂载MinIO?

1 基础知识 1.1 MinFS的介绍 – MinFS是适用于Amazon S3兼容对象 …

MinIO
如何设置MinIO的桶和权限?

1 前言 一个问题,一篇文章,一出故事。 笔者需要学习创建MinIO存储的桶和权限,于是整理此文。 …

MinIO
如何部署MinIO客户端?

1 基础知识 – MinIO Client简称mc – MinIO Clie …