如何二进制部署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 = CentOS 8.1 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 
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.2020-04-04T05-39-31Z

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

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:
  --config-dir value, -C value  [DEPRECATED] path to legacy configuration directory (default: "/root/.minio")
  --certs-dir value, -S value   path to certs directory (default: "/root/.minio/certs")
  --quiet                       disable startup information
  --anonymous                   hide sensitive information from logging
  --json                        output server logs and startup information in json format
  --compat                      enable strict S3 compatibility by turning off certain performance optimizations
  --help, -h                    show help
  --version, -v                 print the version

VERSION:
  RELEASE.2020-04-04T05-39-31Z

2.2.2 创建运行用户

groupadd  -g 103 minio
useradd -u 103 -g 103 -d /var/spool/minio -s /sbin/nologin minio

2.2.3 创建程序所需的目录

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

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

2.2.4 手动测试程序运行

sudo -u minio /usr/local/bin/minio server /data

可见如下提示,

Endpoint:  http://10.168.0.100:9000  http://127.0.0.1:9000
AccessKey: minioadmin
SecretKey: minioadmin

Browser Access:
   http://10.168.0.100:9000  http://127.0.0.1:9000

Command-line Access: https://docs.min.io/docs/minio-client-quickstart-guide
   $ mc config host add myminio http://10.168.0.100:9000 minioadmin minioadmin

Object API (Amazon S3 compatible):
   Go:         https://docs.min.io/docs/golang-client-quickstart-guide
   Java:       https://docs.min.io/docs/java-client-quickstart-guide
   Python:     https://docs.min.io/docs/python-client-quickstart-guide
   JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
   .NET:       https://docs.min.io/docs/dotnet-client-quickstart-guide
Detected default credentials 'minioadmin:minioadmin', please change the credentials immediately using 'MINIO_ACCESS_KEY' and 'MINIO_SECRET_KEY'

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

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/spool/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

加入如下定义,

# Volume to be used for MinIO server.
MINIO_VOLUMES="/data"
# Use if you want to run MinIO on a custom port.
MINIO_OPTS="--address :9000"
# Access Key of the server.
MINIO_ACCESS_KEY=www.cmdschool.org
# Secret key of the server.
MINIO_SECRET_KEY=cmdschool

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

cat <<EOT>> /etc/default/minio
# Volume to be used for MinIO server.
MINIO_VOLUMES="/data"
# Use if you want to run MinIO on a custom port.
MINIO_OPTS="--address :9000"
# Access Key of the server.
MINIO_ACCESS_KEY=www.cmdschool.org
# Secret key of the server.
MINIO_SECRET_KEY=cmdschool
EOT

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

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

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

systemctl enable minio.service

2.2.6 测试服务端口

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

快速安装指南
——————
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 …