MinIO 存储应用部署
实验简介与理论基础
实验背景
在云计算时代,我们需要存储海量的非结构化数据(如图片、视频、日志、备份镜像)。传统的硬盘存储(块存储)在扩展性和共享性上存在局限。
MinIO 是一个基于 Go 语言开发的高性能对象存储服务。
- 特点:轻量级、兼容亚马逊 AWS S3 接口、适合云原生环境。
- 核心概念:
- **Bucket (存储桶)**:相当于操作系统中的”顶级文件夹”,用于隔离不同类别的数据。
- **Object (对象)**:存入的文件(图片、视频等),包含数据本身和元数据。
实验目标
本实验将在单台 CentOS 7.9 服务器上部署 MinIO 服务,实现:
- 手动启动 MinIO 并访问控制台。
- 配置 Systemd 实现服务开机自启和后台运行。
- 通过网页端上传和预览文件。
节点规划
| IP地址 | 主机名 | 角色 | 挂载数据路径 |
|---|---|---|---|
| 172.128.11.63 | minio | MinIO 单机服务节点 | `/opt/data/minio` |
⚠️ 注意:请确保实验节点网络正常,建议关闭防火墙以避免端口拦截问题。
基础环境准备 (MinIO Node)
⚠️ 注意: 本章所有命令均在 172.128.11.63 节点执行。
修改主机名
为了在网络中清晰标识服务器身份,首先修改主机名。
```bash
[root@localhost ~]# hostnamectl set-hostname minio
[root@localhost ~]# bash
[root@minio ~]#
```
💡 解释:`bash` 命令用于重新加载 Shell 环境,让新的主机名 `minio` 立即显示在命令行提示符中。
创建数据存储目录
MinIO 需要一个专门的目录来存放上传的文件。
```bash
[root@minio ~]# mkdir -p /opt/data/minio
```
- `/opt/data/minio`: 这是我们将要在启动命令中指定的数据存储区。
手动部署与测试
这一步旨在让大家快速体验 MinIO 的运行过程,验证软件是否可用。
上传并授权
假设你已经通过 FTP 或 SCP 工具将 `minio` 二进制文件上传到了 `/root` 目录。
1. 检查文件
```bash
[root@minio ~]# cd /root
[root@minio ~]# ll
此时应该能看到 minio 文件,但权限可能是 -rw-r–r– (不可执行)
-rw-r–r–. 1 root root 94375936 May 9 03:26 minio
```
2. 赋予执行权限
Linux 系统中,必须显式给予文件”执行”权限,它才能像程序一样运行。
```bash
赋予执行权限: +x 表示添加执行(execute)权限
[root@minio ~]# chmod +x minio
[root@minio ~]# ll
此时文件名通常变绿,权限变为 -rwxr-xr-x
-rwxr-xr-x. 1 root root 94375936 May 9 03:26 minio
```
临时启动 MinIO
使用命令行直接启动 MinIO Server,并将 `/opt/data/minio` 指定为数据盘。
```bash
启动 MinIO 服务: server 子命令启动服务器模式, 参数指定数据存储目录
[root@minio ~]# ./minio server /opt/data/minio/
```
观察启动日志(不要按 Ctrl+C):
当看到以下信息时,说明启动成功:
```text
API: http://172.128.11.63:9000 http://127.0.0.1:9000
RootUser: minioadmin
RootPass: minioadmin
Console: http://172.128.11.63:37172 …
WARNING: Console endpoint is listening on a dynamic port…
```
💡 理论加油站:
- **API 端口 (9000)**:程序代码(如 Java SDK)连接 MinIO 上传下载文件的端口。
- **Console 端口 (随机/动态)**:浏览器访问的管理界面端口。老版本 MinIO 只有 9000 端口,新版本分离了控制台端口。当你浏览器访问 9000 时,它会自动重定向到那个随机端口。
- 默认账号密码:均为 `minioadmin`。
浏览器验证
- 打开浏览器,访问 `http://172.128.11.63:9000\`。
- 页面会自动跳转到一个登录界面。
- 输入账号 `minioadmin`,密码 `minioadmin` 进行登录。
- 如果能看到红色的 MinIO 界面,说明环境正常。
停止服务:
回到终端,按 `Ctrl + C` 终止当前进程。
注意:这种方式启动,一旦关闭 SSH 窗口或按 Ctrl+C,服务就会停止,不适合生产使用。接下来我们将把它配置为系统服务。
配置 Systemd 系统服务 (生产环境部署)
本章节将把 MinIO 配置为后台守护进程,实现开机自启和故障自动重启。
规范化程序目录
为了方便管理,我们将 MinIO 的程序文件和数据文件分开存放。
1. 创建程序存放目录
```bash
创建 MinIO 程序存放目录
[root@minio ~]# mkdir -p /data/minio_data/
```
2. 移动程序文件
将刚才在 root 目录下的 `minio` 程序移动到新目录。
```bash
复制 MinIO 程序文件到指定目录
[root@minio ~]# cp /root/minio /data/minio_data/
[root@minio ~]# ll /data/minio_data/
确保有 minio 文件且有执行权限
```
编写启动脚本
为了方便管理启动参数(如指定端口、指定配置文件),我们创建一个 Shell 脚本来启动它。
1. 创建脚本文件
```bash
[root@minio ~]# cd /data/minio_data/
[root@minio minio_data]# vi run.sh
```
2. 写入以下内容
```bash
#!/bin/bash
启动 minio,指定数据目录为 /opt/data/minio
/data/minio_data/minio server /opt/data/minio
```
3. 赋予脚本执行权限
```bash
赋予脚本所有权限: 777 表示所有用户都有读、写、执行权限(rwxrwxrwx)
[root@minio minio_data]# chmod 777 run.sh
```
编写 Systemd 服务文件
Linux 的 Systemd 是管理系统服务的标准方式。
1. 创建 service 文件
```bash
[root@minio minio_data]# vi /usr/lib/systemd/system/minio.service
```
2. 写入以下内容
```ini
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/
[Service]
工作目录:程序所在的文件夹
WorkingDirectory=/data/minio_data
启动命令:指向我们刚才写的脚本
ExecStart=/data/minio_data/run.sh
故障重启机制:如果非正常退出,5秒后自动重启
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
```
启动服务并设置开机自启
1. 启动 MinIO 服务
```bash
启动 MinIO 服务
[root@minio minio_data]# systemctl start minio
```
2. 查看服务状态
```bash
查看服务运行状态
[root@minio minio_data]# systemctl status minio
```
验证关键点:
- 看到 `Active: active (running)` 表示启动成功。
- 日志中应包含 `API: http://…:9000`。
3. 设置开机自启
```bash
设置 MinIO 服务开机自启
[root@minio minio_data]# systemctl enable minio
输出 Created symlink … 表示设置成功
```
MinIO 功能应用体验
登录控制台
- 浏览器再次访问 `http://172.128.11.63:9000\`。
- 使用 `minioadmin` / `minioadmin` 登录。
创建存储桶 (Create Bucket)
MinIO 存储文件前必须先创建桶。
- 点击右下角的 “+” 号按钮(或页面上的 “Create Bucket”)。
- 输入 Bucket Name(桶名):例如 `test`。
- 按回车键确认。
上传文件 (Upload Object)
- 点击进入刚才创建的 `test` 桶。
- 点击右下角的 上传按钮(Upload file)。
- 从你的电脑本地选择一张图片(如 `.jpg` 或 `.png`)。
- 上传成功后,列表中会显示该文件。
预览与分享 (Preview)
- 点击上传的文件名。
- 右侧会弹出详情页。
- 点击 “Share” 按钮,可以生成一个临时的下载链接。
- 点击 **”Preview”**(如果支持),可以直接在浏览器中看到图片内容。
💡 实验成果:如果你能成功上传图片并在浏览器中预览,说明你的私有云对象存储服务已经搭建完毕!
常见问题排查 (Troubleshooting)
Q1: 浏览器访问 IP:9000 打不开?
- 原因 1:MinIO 服务没启动。
- 解决:执行 `systemctl status minio` 查看状态。
- 原因 2:防火墙拦截。
- 解决:测试环境可临时关闭防火墙 `systemctl stop firewalld`。
- 原因 3:浏览器自动跳转的随机端口(如 35282)被防火墙拦截。
- 解决:如果你在外部网络,可能需要放行所有高位端口,或者在启动命令中指定固定控制台端口(例如 `–console-address “:9001”`,本实验使用默认设置,请确保网络通畅)。
Q2: 启动脚本报错 “Permission denied”?
- 解决:检查 `run.sh` 和 `minio` 二进制文件是否都有执行权限 (`chmod +x …`)。
Q3: 之前上传的文件不见了?
- 解决:检查启动命令中的数据目录是否正确。如果在步骤 3.2 和 4.2 中指定的目录不一致(例如一个是 `/opt/data` 一个是 `/opt/minio`),数据就不会互通。本实验统一要求使用 `/opt/data/minio`。