1. MinIO概述与环境规划
MinIO是一个开源的对象存储服务器,兼容Amazon S3 API,用于存储和检索任意类型的数据。MinIO设计用于高性能、高可用性和可扩展性,适用于各种数据存储场景。更多学习教程www.fgedu.net.cn
1.1 MinIO版本说明
MinIO目前主要版本为RELEASE.2023-04-07T05-28-58Z,本教程以该版本为例进行详细讲解。MinIO的版本号采用发布日期格式,确保用户能够清晰了解版本的发布时间。
$ minio –version
minio version RELEASE.2023-04-07T05-28-58Z (commit-id=abcdefg1234567890abcdefg1234567890abcdefg)
Runtime: go1.19.6 linux/amd64
License: GNU AGPLv3
# 查看系统版本
$ cat /etc/os-release
NAME=”Oracle Linux Server”
VERSION=”8.9″
ID=”ol”
PRETTY_NAME=”Oracle Linux Server 8.9″
# 查看内核版本
$ uname -r
5.4.17-2136.302.7.2.el8uek.x86_64
1.2 环境规划
本次安装环境规划如下:
minio01.fgedu.net.cn (192.168.1.105) – MinIO主服务器
minio02.fgedu.net.cn (192.168.1.106) – MinIO备用服务器
minio03.fgedu.net.cn (192.168.1.107) – MinIO存储节点1
minio04.fgedu.net.cn (192.168.1.108) – MinIO存储节点2
MinIO版本:RELEASE.2023-04-07T05-28-58Z
部署模式:分布式部署
数据存储:本地SSD磁盘
2. 硬件环境要求
MinIO作为对象存储服务器,对硬件资源要求根据存储容量和并发访问量而定。学习交流加群风哥微信: itpux-com
2.1 物理主机环境要求
– CPU:至少8核
– 内存:至少32GB
– 磁盘:系统盘120GB SSD + 数据盘4TB SSD x 4
# 检查MinIO服务器资源
# free -h
total used free shared buff/cache available
Mem: 32G 8.4G 22G 512M 3.6G 23G
Swap: 8G 0B 8G
# 检查磁盘空间
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 120G 20G 100G 17% /
/dev/sdb1 4TB 100G 3.9T 3% /data1
/dev/sdc1 4TB 100G 3.9T 3% /data2
/dev/sdd1 4TB 100G 3.9T 3% /data3
/dev/sde1 4TB 100G 3.9T 3% /data4
2.2 vSphere虚拟主机环境要求
– MinIO服务器:
– vCPU:8核
– 内存:32GB
– 磁盘:系统盘120GB SSD + 数据盘4TB SSD x 4
– 网络:VMXNET3网卡,10Gbps网络
资源池配置:
– CPU预留:MinIO服务器4GHz
– 内存预留:MinIO服务器16GB
– 内存限制:MinIO服务器32GB
– CPU份额:正常
– 内存份额:正常
2.3 云平台主机环境要求
– MinIO服务器:
– 实例规格:ecs.g6.4xlarge或同等规格
– vCPU:16核
– 内存:64GB
– 系统盘:SSD云盘 120GB
– 数据盘:SSD云盘 4TB x 4
– 网络带宽:10Gbps以上
存储配置:
– 云盘快照:定期备份数据
– 跨区域复制:实现数据异地备份
3. 操作系统环境准备
在安装MinIO之前,需要对操作系统进行必要的配置和优化。
3.1 操作系统版本检查
# cat /etc/os-release
NAME=”Oracle Linux Server”
VERSION=”8.9″
ID=”ol”
PRETTY_NAME=”Oracle Linux Server 8.9″
# 检查内核版本
# uname -r
5.4.17-2136.302.7.2.el8uek.x86_64
# 检查SELinux状态
# getenforce
Enforcing
# 检查防火墙状态
# systemctl status firewalld
● firewalld.service – firewalld – dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running)
3.2 依赖服务安装
# dnf install -y wget curl tar gzip
# 关闭防火墙
# systemctl stop firewalld
# systemctl disable firewalld
# 关闭SELinux
# setenforce 0
# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config
# 创建MinIO用户
# useradd -r -s /bin/false minio
# 创建目录结构
# mkdir -p /data/minio/{config,bin,data1,data2,data3,data4}
# chown -R minio:minio /data/minio
3.3 磁盘挂载
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 120G 0 disk
└─sda1 8:1 0 120G 0 part /
sdb 8:16 0 4T 0 disk
sdc 8:32 0 4T 0 disk
sdd 8:48 0 4T 0 disk
sde 8:64 0 4T 0 disk
# 格式化磁盘
# mkfs.xfs /dev/sdb
# mkfs.xfs /dev/sdc
# mkfs.xfs /dev/sdd
# mkfs.xfs /dev/sde
# 挂载磁盘
# vi /etc/fstab
/dev/sdb /data/minio/data1 xfs defaults 0 0
/dev/sdc /data/minio/data2 xfs defaults 0 0
/dev/sdd /data/minio/data3 xfs defaults 0 0
/dev/sde /data/minio/data4 xfs defaults 0 0
# 挂载磁盘
# mount -a
# 检查挂载
# df -h
4. MinIO安装配置
完成环境准备后,开始安装MinIO。
4.1 安装MinIO
# wget https://dl.min.io/server/minio/release/linux-amd64/minio
# 安装MinIO
# mv minio /usr/local/bin/
# chmod +x /usr/local/bin/minio
# 创建MinIO配置文件
# vi /etc/minio/minio.conf
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=password
MINIO_VOLUMES=”/data/minio/data1 /data/minio/data2 /data/minio/data3 /data/minio/data4″
MINIO_OPTS=”–address :9000 –console-address :9001″
# 创建systemd服务文件
# vi /etc/systemd/system/minio.service
[Unit]
Description=MinIO Object Storage Server
After=network.target
[Service]
User=minio
Group=minio
EnvironmentFile=/etc/minio/minio.conf
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
# 启动MinIO
# systemctl daemon-reload
# systemctl start minio
# systemctl enable minio
# 验证安装
# systemctl status minio
# curl http://localhost:9000
4.2 访问MinIO Web控制台
# 打开浏览器访问 http://minio01.fgedu.net.cn:9001
# 登录MinIO
# 用户名:admin
# 密码:password
# 验证登录
# 确认能够正常登录并访问MinIO Web控制台
4.3 配置分布式MinIO
# 下载MinIO
# wget https://dl.min.io/server/minio/release/linux-amd64/minio
# 安装MinIO
# mv minio /usr/local/bin/
# chmod +x /usr/local/bin/minio
# 创建MinIO配置文件
# vi /etc/minio/minio.conf
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=password
MINIO_VOLUMES=”http://192.168.1.105/data/minio/data1 http://192.168.1.105/data/minio/data2 http://192.168.1.106/data/minio/data1 http://192.168.1.106/data/minio/data2 http://192.168.1.107/data/minio/data1 http://192.168.1.107/data/minio/data2 http://192.168.1.108/data/minio/data1 http://192.168.1.108/data/minio/data2″
MINIO_OPTS=”–address :9000 –console-address :9001″
# 创建systemd服务文件
# vi /etc/systemd/system/minio.service
[Unit]
Description=MinIO Object Storage Server
After=network.target
[Service]
User=minio
Group=minio
EnvironmentFile=/etc/minio/minio.conf
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
# 启动MinIO
# systemctl daemon-reload
# systemctl start minio
# systemctl enable minio
# 验证分布式部署
# curl http://localhost:9000/minio/health/live
5. MinIO配置优化
为了提高MinIO的性能和稳定性,需要进行一些配置优化。
5.1 基本配置优化
# vi /etc/minio/minio.conf
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=password
MINIO_VOLUMES=”/data/minio/data1 /data/minio/data2 /data/minio/data3 /data/minio/data4″
MINIO_OPTS=”–address :9000 –console-address :9001 –quiet”
# 重启MinIO
# systemctl restart minio
5.2 高可用配置
# vi /etc/minio/minio.conf
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=password
MINIO_VOLUMES=”http://192.168.1.105/data/minio/data1 http://192.168.1.105/data/minio/data2 http://192.168.1.106/data/minio/data1 http://192.168.1.106/data/minio/data2 http://192.168.1.107/data/minio/data1 http://192.168.1.107/data/minio/data2 http://192.168.1.108/data/minio/data1 http://192.168.1.108/data/minio/data2″
MINIO_OPTS=”–address :9000 –console-address :9001″
# 重启MinIO
# systemctl restart minio
# 验证高可用
# curl http://192.168.1.105:9000/minio/health/live
# curl http://192.168.1.106:9000/minio/health/live
# curl http://192.168.1.107:9000/minio/health/live
# curl http://192.168.1.108:9000/minio/health/live
5.3 内存配置
# vi /etc/systemd/system/minio.service
[Unit]
Description=MinIO Object Storage Server
After=network.target
[Service]
User=minio
Group=minio
EnvironmentFile=/etc/minio/minio.conf
Environment=”MINIO_MAX_MEMORY=16GB”
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
# 重启MinIO
# systemctl daemon-reload
# systemctl restart minio
6. S3兼容API配置
MinIO兼容Amazon S3 API,可以与各种S3客户端和应用程序集成。
6.1 配置S3客户端
# pip3 install awscli
# 配置AWS CLI
# aws configure
AWS Access Key ID [None]: admin
AWS Secret Access Key [None]: password
Default region name [None]: us-east-1
Default output format [None]: json
# 测试S3 API
# aws s3 mb s3://test-bucket –endpoint-url http://minio01.fgedu.net.cn:9000
# aws s3 cp /etc/passwd s3://test-bucket –endpoint-url http://minio01.fgedu.net.cn:9000
# aws s3 ls s3://test-bucket –endpoint-url http://minio01.fgedu.net.cn:9000
6.2 配置应用程序集成
// 使用AWS SDK for Java
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(new EndpointConfiguration(“http://minio01.fgedu.net.cn:9000”, “us-east-1”))
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(“admin”, “password”)))
.build();
// 创建存储桶
s3Client.createBucket(“test-bucket”);
// 上传文件
PutObjectRequest putObjectRequest = new PutObjectRequest(“test-bucket”, “test-file.txt”, new File(“/path/to/file.txt”));
s3Client.putObject(putObjectRequest);
# 配置Python应用程序
# 使用boto3
import boto3
client = boto3.client(‘s3′,
endpoint_url=’http://minio01.fgedu.net.cn:9000′,
aws_access_key_id=’admin’,
aws_secret_access_key=’password’,
region_name=’us-east-1′
)
# 创建存储桶
client.create_bucket(Bucket=’test-bucket’)
# 上传文件
client.upload_file(‘/path/to/file.txt’, ‘test-bucket’, ‘test-file.txt’)
7. MinIO安全配置
MinIO提供了多种安全功能,包括认证、授权、TLS加密等。
7.1 认证配置
# vi /etc/minio/minio.conf
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=password
MINIO_VOLUMES=”/data/minio/data1 /data/minio/data2 /data/minio/data3 /data/minio/data4″
MINIO_OPTS=”–address :9000 –console-address :9001″
# 重启MinIO
# systemctl restart minio
# 访问MinIO Web控制台
# 打开浏览器访问 http://minio01.fgedu.net.cn:9001
# 输入用户名和密码
7.2 TLS加密配置
# openssl req -newkey rsa:2048 -nodes -keyout /etc/minio/private.key -x509 -days 365 -out /etc/minio/public.crt
# 编辑MinIO配置文件
# vi /etc/minio/minio.conf
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=password
MINIO_VOLUMES=”/data/minio/data1 /data/minio/data2 /data/minio/data3 /data/minio/data4″
MINIO_OPTS=”–address :9000 –console-address :9001 –certs-dir /etc/minio”
# 重启MinIO
# systemctl restart minio
# 访问MinIO Web控制台
# 打开浏览器访问 https://minio01.fgedu.net.cn:9001
7.3 策略配置
# 1. 点击左侧菜单的”Identity” -> “Policies”
# 2. 点击”Create Policy”
# 3. 输入策略名称和JSON配置
# 4. 点击”Create”
# 示例策略
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [“s3:GetObject”, “s3:PutObject”],
“Resource”: [“arn:aws:s3:::test-bucket/*”]
}
]
}
# 分配策略给用户
# 1. 点击左侧菜单的”Identity” -> “Users”
# 2. 选择用户
# 3. 点击”Policies”
# 4. 选择策略
# 5. 点击”Save”
8. MinIO性能优化
在生产环境中,需要对MinIO进行性能优化以提高存储和检索效率。from:www.itpux.com
8.1 磁盘优化
# vi /etc/sysctl.conf
vm.swappiness = 0
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
# 应用配置
# sysctl -p
# 优化XFS文件系统
# vi /etc/fstab
/dev/sdb /data/minio/data1 xfs defaults,noatime,nodiratime 0 0
/dev/sdc /data/minio/data2 xfs defaults,noatime,nodiratime 0 0
/dev/sdd /data/minio/data3 xfs defaults,noatime,nodiratime 0 0
/dev/sde /data/minio/data4 xfs defaults,noatime,nodiratime 0 0
# 重新挂载
# mount -o remount /data/minio/data1
# mount -o remount /data/minio/data2
# mount -o remount /data/minio/data3
# mount -o remount /data/minio/data4
8.2 网络优化
# vi /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15
# 应用配置
# sysctl -p
8.3 MinIO参数优化
# vi /etc/minio/minio.conf
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=password
MINIO_VOLUMES=”/data/minio/data1 /data/minio/data2 /data/minio/data3 /data/minio/data4″
MINIO_OPTS=”–address :9000 –console-address :9001 –quiet –json”
# 编辑systemd服务文件
# vi /etc/systemd/system/minio.service
[Unit]
Description=MinIO Object Storage Server
After=network.target
[Service]
User=minio
Group=minio
EnvironmentFile=/etc/minio/minio.conf
Environment=”MINIO_MAX_MEMORY=16GB”
Environment=”MINIO_PROMETHEUS_URL=http://prometheus:9090″
Environment=”MINIO_PROMETHEUS_JOB_ID=minio”
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
# 重启MinIO
# systemctl daemon-reload
# systemctl restart minio
9. MinIO升级迁移
本节介绍MinIO的版本升级和数据迁移方法。
9.1 MinIO版本升级
# cp /etc/minio/minio.conf /backup/minio-config-$(date +%Y%m%d)
# 停止MinIO服务
# systemctl stop minio
# 下载新版本MinIO
# wget https://dl.min.io/server/minio/release/linux-amd64/minio
# 安装新版本MinIO
# mv minio /usr/local/bin/
# chmod +x /usr/local/bin/minio
# 启动MinIO服务
# systemctl start minio
# 验证升级
# minio –version
minio version RELEASE.2023-04-08T05-28-58Z (commit-id=abcdefg1234567890abcdefg1234567890abcdefg)
Runtime: go1.19.6 linux/amd64
License: GNU AGPLv3
# 访问MinIO Web控制台
# 打开浏览器访问 http://minio01.fgedu.net.cn:9001
9.2 MinIO数据迁移
# aws s3 sync s3://test-bucket /backup/minio-data-$(date +%Y%m%d) –endpoint-url http://minio01.fgedu.net.cn:9000
# 在新服务器上恢复数据
# aws s3 sync /backup/minio-data-20230405 s3://test-bucket –endpoint-url http://new-minio.fgedu.net.cn:9000
# 安装MinIO
# 重复安装步骤
# 启动MinIO服务
# systemctl start minio
# 验证迁移
# aws s3 ls s3://test-bucket –endpoint-url http://new-minio.fgedu.net.cn:9000
10. MinIO备份恢复
本节介绍MinIO的备份和恢复方法。
10.1 MinIO备份
# vi /data/minio/scripts/backup.sh
#!/bin/bash
BACKUP_DIR=”/backup/minio”
DATE=$(date +%Y%m%d)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 停止MinIO服务
systemctl stop minio
# 备份配置文件
cp /etc/minio/minio.conf $BACKUP_DIR/config-$DATE
# 备份数据
tar -czf $BACKUP_DIR/data-$DATE.tar.gz /data/minio/data*
# 启动MinIO服务
systemctl start minio
# 清理旧备份(保留7天)
find $BACKUP_DIR -type f -mtime +7 -exec rm -f {} \;
# 添加执行权限
# chmod +x /data/minio/scripts/backup.sh
# 添加定时任务
# crontab -e
0 0 * * * /data/minio/scripts/backup.sh
10.2 MinIO恢复
# systemctl stop minio
# 清理现有数据
# rm -rf /data/minio/data*
# 恢复数据
# tar -xzf /backup/minio/data-20230405.tar.gz -C /
# 恢复配置文件
# cp /backup/minio/config-20230405 /etc/minio/minio.conf
# 启动MinIO服务
# systemctl start minio
# 验证恢复
# systemctl status minio
# curl http://localhost:9000/minio/health/live
10.3 MinIO监控脚本
# vi /data/minio/scripts/monitor.sh
#!/bin/bash
LOG_FILE=”/var/log/minio_monitor.log”
ALERT_EMAIL=”admin@fgedu.net.cn”
check_minio_status() {
echo “$(date): Checking minio status…” >> $LOG_FILE
status=$(systemctl status minio | grep Active | awk ‘{print $2}’)
if [ “$status” != “active” ]; then
echo “$(date): MinIO is not running” >> $LOG_FILE
echo “MinIO is not running” | mail -s “MinIO Alert” $ALERT_EMAIL
systemctl start minio
else
echo “$(date): MinIO is running” >> $LOG_FILE
fi
}
check_minio_health() {
echo “$(date): Checking minio health…” >> $LOG_FILE
status=$(curl -s -o /dev/null -w “%{http_code}” http://localhost:9000/minio/health/live)
if [ “$status” = “200” ]; then
echo “$(date): MinIO health: OK” >> $LOG_FILE
else
echo “$(date): MinIO health: FAILED” >> $LOG_FILE
echo “MinIO health failed” | mail -s “MinIO Alert” $ALERT_EMAIL
fi
}
check_disk_space() {
echo “$(date): Checking disk space…” >> $LOG_FILE
for mount in /data/minio/data*; do
usage=$(df -h $mount | tail -1 | awk ‘{print $5}’ | sed ‘s/%//’)
if [ $usage -gt 90 ]; then
echo “$(date): Disk space warning: $mount is $usage% full” >> $LOG_FILE
echo “Disk space warning: $mount is $usage% full” | mail -s “MinIO Alert” $ALERT_EMAIL
else
echo “$(date): Disk space: $mount is $usage% full” >> $LOG_FILE
fi
done
}
main() {
check_minio_status
check_minio_health
check_disk_space
}
main
# 添加执行权限
# chmod +x /data/minio/scripts/monitor.sh
# 添加定时任务
# crontab -e
*/15 * * * * /data/minio/scripts/monitor.sh
通过以上步骤,MinIO安装配置、性能优化、升级迁移、备份恢复等内容已全部完成。MinIO作为开源对象存储服务器,能够高效地存储和检索数据,是企业级数据存储的重要工具。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
