2.1 单机起服:一次可复现的部署实录


2.1 单机起服:一次可复现的部署实录

本节摘要:单机部署是所有 MinIO 学习路径的第一站,目标是十分钟内跑通"服务启动、控制台可开、客户端可读写"三个验收点。本节给出二进制与容器两种完整实录,并说清单机独立模式的边界——它能陪你练手,不能陪你上生产。

场景代入:周五下午的那台测试机

下午四点半,数据平台负责人在工位间喊了一嗓子:"下周一演示对象存储,谁能今天先弄个能传文件的出来?"你环顾四周,角落里有台闲置的旧服务器,系统是 Rocky Linux 9,一块 500G 的系统盘加一块 2T 的数据盘。就用它。接下来的一小时里发生的事,就是本节的内容——而你会看到,MinIO 把"从零到能传文件"压缩到了一条命令。

先想清楚:单机模式是什么、不是什么

单机 MinIO 以独立模式(standalone)运行:无纠删码、无分布式元数据、数据裸放在指定目录的文件系统上。它有三个边界必须先讲清:

  1. 不能升级为集群。独立模式的数据目录格式与纠删码模式不同,单机攒的数据没有平滑迁入未来集群的路——想迁,只能用客户端工具逐对象搬运。
  2. 没有冗余。盘坏即数据丢,独立模式只适合测试与临时中转。
  3. 部分高级特性缺位。对象锁定、站点复制这类依赖纠删码语义的特性不可用。

所以正确姿势是:特性学习、CI 环境、临时对接测试用单机;生产从第一天起就是分布式。2.2 的四节点集群才是真仓,本节先把工具链摸熟。

实录一:二进制部署

二进制方式最能看清 MinIO 的全貌——它真的就只有一个文件。以下命令在 Rocky Linux 9 实测通过,从官方下载站获取服务端与客户端两个程序:

# 1. 下载服务端与客户端(生产环境请固定到具体 RELEASE 版本号,别追 latest) cd /usr/local/bin wget https://dl.min.io/server/minio/release/linux-amd64/minio wget https://dl.min.io/client/mc/release/linux-amd64/mc chmod +x minio mc # 2. 准备数据目录——专用盘专用目录,别和系统盘混居 mkfs.xfs /dev/sdb mkdir -p /data/minio && mount /dev/sdb /data/minio # 3. 创建运行用户(别用 root 跑服务) useradd -r -s /sbin/nologin minio-user chown -R minio-user:minio-user /data/minio # 4. 前台启动,验证能否拉起 export MINIO_ROOT_USER=admin export MINIO_ROOT_PASSWORD='Chang3Me!2026' sudo -u minio-user /usr/local/bin/minio server /data/minio --console-address ":9001"

终端滚出启动横幅与两行端口信息就成功了:9000 是 S3 API 端口,9001 是 Web 控制台端口。此刻打开浏览器访问主机的 9001 端口,用刚才两个环境变量登录,能看见空荡荡的控制台首页。

验收动作三连,客户端链路一并打通:

# 配置客户端别名(相当于把地址和凭证存进本地配置) mc alias set lab http://10.0.0.51:9000 admin 'Chang3Me!2026' # 建桶、传文件、列出来——三个最基本的读写动作 mc mb lab/hello mc cp /var/log/messages lab/hello/test-obj.txt mc ls lab/hello

mc ls 能列出刚上传的 test-obj.txt,单机部署就算验收通过。

实录二:容器部署

容器方式适合 CI 与临时环境,一条命令拉起:

docker run -d \ --name minio-lab \ -p 9000:9000 -p 9001:9001 \ -v /data/minio:/data \ -e "MINIO_ROOT_USER=admin" \ -e "MINIO_ROOT_PASSWORD=Chang3Me!2026" \ minio/minio:RELEASE.2026-01-15T00-00-00Z \ server /data --console-address ":9001"

两处细节值得咬文嚼字。其一,镜像标签固定到具体 RELEASE 而不是 latest——存储软件的升级要过变更流程, floating 标签会让你某天重启后面对一个行为变化的存储层。其二,数据卷挂载到宿主机目录而不是 docker 命名卷,容器删了数据还在;生产上若用容器方案,数据目录同样要求是专用块设备。

图 2-1 单机部署的端口与数据流

图 2-1 单机部署的端口与数据流

常见翻车与排法

端口起不来:多半是 9000 被占用(常见嫌犯是某些代理服务默认端口撞车)。用 ss -tlnp | grep 9000 找到占用者,要么换端口要么改配置,别硬杀别人的进程。

控制台打不开但 API 正常:忘了 --console-address 参数,控制台会随机挑高位端口。生产环境固定控制台端口是纪律,方便防火墙放行。

写入报权限错误:数据目录的属主不是运行用户。minio-user 要对数据目录有完整的读写执行权限,chown -R 一次到位,检查 SELinux 状态是否在拦截(Rocky 系默认开启)。

重启后环境变量丢失:前台 export 的变量只活在当前会话。这正是 2.3 要用 systemd 托管的原因——环境变量写进服务单元的配置文件,重启由 systemd 负责。

本节要点回顾

  • 单机独立模式是练习场:无纠删码、不能升级为集群、缺高级特性,生产部署直接上分布式。
  • 两个端口各司其职:9000 走 S3 API,9001 走控制台;生产环境都应固定并在负载均衡层收敛。
  • 版本要钉死:无论二进制还是镜像,固定到具体 RELEASE 版本,存储层拒绝"自动追新"。
  • 验收才算完成:服务拉起只是及格线,控制台登录加客户端读写三连通过,部署才能签字。

单机玩熟了,下一节把四台机器编成一支真正的纠删码舰队。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U