wei/个人文档/minio部署文档.md
2026-06-04 13:57:41 +08:00

358 lines
7.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MinIO 生产级集群部署文档EC:8+4
## 文档信息
| 项目 | 内容 |
|------|------|
| **集群规模** | 3 节点 |
| **每节点磁盘** | 8 块独立数据盘(共 24 块盘) |
| **纠删码配置** | EC:8+4每纠删集合 12 盘8 数据 + 4 校验) |
| **操作系统** | CentOS 9 Stream |
| **MinIO 版本** | RELEASE.2025-09-07T16-13-09Z |
| **部署方式** | 二进制 + Systemd 服务 |
---
## 目录
1. [环境规划](#1-环境规划)
2. [磁盘准备与挂载](#2-磁盘准备与挂载)
3. [主机名与网络配置](#3-主机名与网络配置)
4. [MinIO 二进制安装](#4-minio-二进制安装)
5. [MinIO 集群配置](#5-minio-集群配置)
6. [Systemd 服务配置](#6-systemd-服务配置)
7. [防火墙配置](#7-防火墙配置)
8. [启动与验证集群](#8-启动与验证集群)
9. [常见故障排查](#9-常见故障排查)
10. [附录:命令速查](#10-附录命令速查)
---
## 1. 环境规划
### 1.1 硬件要求
| 组件 | 最低配置 | 推荐配置(本次测试) |
|------|----------|----------------------|
| CPU | 4 核 | 8 核 |
| 内存 | 8 GB | 16 GB |
| 系统盘 | 100 GB | 100 GB |
| 数据盘 | 每节点 8 × 100 GB | 每节点 8 × 100 GB |
| 网络 | 千兆 | 千兆或更高 |
### 1.2 节点信息
| 主机名 | IP 地址 | 数据盘挂载点 |
|--------|---------|--------------|
| node1 | 192.168.1.42 | /mnt/disk1 ~ /mnt/disk8 |
| node2 | 192.168.1.43 | /mnt/disk1 ~ /mnt/disk8 |
| node3 | 192.168.1.44 | /mnt/disk1 ~ /mnt/disk8 |
> **注意**:请根据你的实际 IP 地址替换。
---
## 2. 磁盘准备与挂载
此步骤在**所有三个节点**上分别执行。
### 2.1 查看磁盘列表
```bash
lsblk
```
预期输出应包含系统盘sda和 8 块数据盘sdb ~ sdi
### 2.2 格式化数据盘为 XFS
```bash
for disk in sdb sdc sdd sde sdf sdg sdh sdi; do
mkfs.xfs -f /dev/$disk
done
```
### 2.3 创建挂载点
```bash
for i in {1..8}; do
mkdir -p /mnt/disk$i
done
```
### 2.4 临时挂载并设置优化参数
```bash
mount /dev/sdb /mnt/disk1
mount /dev/sdc /mnt/disk2
mount /dev/sdd /mnt/disk3
mount /dev/sde /mnt/disk4
mount /dev/sdf /mnt/disk5
mount /dev/sdg /mnt/disk6
mount /dev/sdh /mnt/disk7
mount /dev/sdi /mnt/disk8
for i in {1..8}; do
mount -o remount,noatime,nodiratime /mnt/disk$i
done
```
### 2.5 获取 UUID 并写入 fstab
```bash
blkid | grep -E 'sdb|sdc|sdd|sde|sdf|sdg|sdh|sdi'
```
编辑 `/etc/fstab`,为每个磁盘添加一行(使用你自己的 UUID
```
UUID=8ac8649a-... /mnt/disk1 xfs defaults,noatime,nodiratime 0 0
UUID=95a4dee5-... /mnt/disk2 xfs defaults,noatime,nodiratime 0 0
...
```
### 2.6 验证挂载
```bash
mount -a
df -h | grep /mnt/disk
```
应看到 8 行输出,每行对应一个磁盘。
---
## 3. 主机名与网络配置
### 3.1 设置主机名
- **node1**`hostnamectl set-hostname node1`
- **node2**`hostnamectl set-hostname node2`
- **node3**`hostnamectl set-hostname node3`
### 3.2 配置 /etc/hosts所有节点相同
```bash
cat >> /etc/hosts <<EOF
192.168.1.42 node1
192.168.1.43 node2
192.168.1.44 node3
EOF
```
### 3.3 验证解析
```bash
ping -c 2 node1
ping -c 2 node2
ping -c 2 node3
```
---
## 4. MinIO 二进制安装
在所有三个节点执行。
### 4.1 下载 MinIO 服务器和客户端
```bash
curl -O https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/
curl -O https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/
```
### 4.2 验证版本
```bash
minio --version
mc --version
```
---
## 5. MinIO 集群配置
### 5.1 创建专用用户
```bash
groupadd -r minio-user
useradd -r -g minio-user -s /sbin/nologin minio-user
chown -R minio-user:minio-user /mnt/disk*
```
### 5.2 创建环境变量文件
```bash
cat > /etc/default/minio <<EOF
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin123
MINIO_VOLUMES="http://node{1...3}/mnt/disk{1...8}"
MINIO_OPTS="--address :9000 --console-address :9001"
MINIO_STORAGE_CLASS_STANDARD="EC:4"
EOF
```
> MINIO_STORAGE_CLASS_STANDARD="EC:4" 为8+4 如需 4+2 可改为 EC:2
> **注意**:三个节点的 `MINIO_VOLUMES` 必须完全相同。
---
## 6. Systemd 服务配置
### 6.1 创建服务文件
```bash
cat > /etc/systemd/system/minio.service <<EOF
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio
[Service]
EnvironmentFile=-/etc/default/minio
User=minio-user
Group=minio-user
LimitNOFILE=65536
ExecStart=/usr/local/bin/minio server \$MINIO_OPTS \$MINIO_VOLUMES
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
```
### 6.2 重新加载 systemd 并启用服务
```bash
systemctl daemon-reload
systemctl enable minio
```
---
## 7. 防火墙配置
在所有节点执行,开放 9000API和 9001控制台端口。
```bash
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=9001/tcp
firewall-cmd --reload
```
---
## 8. 启动与验证集群
### 8.1 启动 MinIO 服务
在**三个节点上几乎同时**执行:
```bash
systemctl start minio
```
### 8.2 检查服务状态
```bash
systemctl status minio
journalctl -u minio -f --no-pager -n 50
```
### 8.3 使用 mc 验证集群
在任意节点(如 node1
```bash
mc alias set myminio http://node1:9000 minioadmin minioadmin123
mc admin info myminio
```
**预期输出**
```
● node1:9000
Uptime: 1 minute
Version: 2025-09-07T16:13:09Z
Network: 3/3 OK
Drives: 8/8 OK
Pool: 1
● node2:9000
... (类似)
● node3:9000
... (类似)
24 drives online, 0 drives offline, EC:4
```
> **关键**`EC:4` 表示纠删码配置为 8+4因为每个纠删集 12 盘4 校验盘)。
### 8.4 访问 Web 控制台
浏览器打开 `http://node1:9001`(或任意节点 IP使用 `minioadmin` / `minioadmin123` 登录。
---
## 9. 常见故障排查
### 9.1 启动失败:`lookup node1: no such host`
**原因**:主机名解析失败。
**解决**:检查 `/etc/hosts` 是否包含所有节点映射,并验证 `ping node1` 能通。
### 9.2 集群无法形成:节点间网络不通
**原因**:防火墙未放行 9000/9001 端口。
**解决**:执行第 7 节的防火墙配置,或用 `telnet node1 9000` 测试连通性。配置 setenforce 0
### 9.3 权限错误:`Permission denied` 写入磁盘
**原因**MinIO 进程(用户 minio-user无权写入挂载点。
**解决**`chown -R minio-user:minio-user /mnt/disk*`
### 9.4 纠删码不是 EC:4显示 EC:0 或 EC:2
**原因**:磁盘数量或分布不符合自动纠删集要求。
**解决**:确保每个节点的磁盘路径正确,且 `MINIO_VOLUMES` 使用通配符形式 `http://node{1...3}/mnt/disk{1...8}`
### 9.5 查看详细日志
```bash
journalctl -u minio -n 100 --no-pager
```
---
## 10. 附录:命令速查
| 操作 | 命令 |
|------|------|
| 启动 MinIO | `systemctl start minio` |
| 停止 MinIO | `systemctl stop minio` |
| 重启 MinIO | `systemctl restart minio` |
| 查看状态 | `systemctl status minio` |
| 查看实时日志 | `journalctl -u minio -f` |
| 查看集群信息 | `mc admin info myminio` |
| 列出所有桶 | `mc ls myminio` |
| 创建桶 | `mc mb myminio/new-bucket` |
| 上传文件 | `mc cp localfile myminio/bucket/` |
| 下载文件 | `mc cp myminio/bucket/file ./` |
| 删除桶 | `mc rb myminio/bucket` |
| 压力测试 | `warp mixed --host=... --analyze.v` |
---
## 文档结束
你现在拥有一个完全可用的 MinIO 生产级集群,具备 EC:8+4 数据保护能力。如需进一步调优或扩展,请参考 [MinIO 官方文档](https://min.io/docs/)。