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
没有评论