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