358 lines
7.7 KiB
Markdown
358 lines
7.7 KiB
Markdown
# 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. 防火墙配置
|
||
|
||
在所有节点执行,开放 9000(API)和 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/)。 |