> For AI agents: the complete documentation index is available at https://docs.vps.town/llms.txt, the full documentation bundle is available at https://docs.vps.town/llms-full.txt.

# VPS.Town 大盘鸡 + JuiceFS + MiniIO = 无限扩展存储空间

:::tip 温馨提示

本文由用户 `solar` 撰写，并已加入 `VPS.Town 优秀原创文章激励计划`，本站享有完整版权，未经允许不得转载。

本文已通过 [VPS.Town 社区文章投稿及奖励规则 (试行稿)](https://docs.vps.town/kb/community.md) 审核，并获得 `100 元无门槛代金券` 奖励。

:::

:::details 📖 本文目录

[](#准备工作)[](#第一步使用大盘鸡-server-a-部署-minio)[](#第二步在大盘鸡-server-a-上使用部署-redis)[](#第三步在小盘鸡-server-b-中安装创建并挂载-juicefs)[](#教程结束)
:::

## 准备工作

:::tip 🌰 VPS.Town & JuiceFS 集群解决方案

1. 最多可提供高达 **8TB 大容量存储** 的选项，扩容硬盘更轻松；
2. 同时提供 **SSD & HDD** 混合方案，读写速度更快、JuiceFS 速度更稳定；
3. 完善的售后保障，12\*7 在线客服，更支持 7 天有理由退款；
4. 搭配 JuiceFS 使用，可以实现无限扩展存储空间，扩容硬盘更轻松！

无 AFF 购买链接：[点我一键直达](https://vps.town/cart/goodsList.htm?fid=3\&gid=1)

:::

1. 服务器
   - `server-A`: [VPS Town 大盘鸡](https://vps.town/cart/goodsList.htm?fid=3\&gid=1)
   - `server-B`: 任意其他 vps (例如，[VPS.Town 传家宝](https://vps.town/cart/goodsList.htm?fid=3\&gid=3))
2. 软件工具
   - MinIO
   - Juicefs
   - Redis
   - docker/podman
   - docker-compose/podman-compose

硬盘无限扩展分为以下三个步骤，~~1. 打开冰箱门；2. 硬盘放进冰箱里；3. 关闭冰箱门~~。

## 第一步：使用大盘鸡 (`server-A`) 部署 MinIO

> (VPSTown 的数据盘与系统盘分开，刚好适合 MinIO)

假设大盘的分区路径为 `/dev/vdb`，让我们格式化一下分区，创建标签名为 `MINIODRIVE1` 的 XFS 文件系统：:

```bash title="格式化分区"
mkfs.xfs /dev/vdb -L MINIODRIVE1
```

然后创建一个目录 (`/minio/data`) 挂载上去：

```bash title="挂载分区"
mkdir -p /minio/data
mount -t xfs -o "noatime,nodiratime" /dev/vdb /minio/data
```

创建 MinIO 的配置文件 `/etc/default/minio`，内容如下（注意修改用户名和密码： `MINIO_ROOT_USER`，`MINIO_ROOT_PASSWORD`）：

```ini title="minio.conf"
MINIO_ROOT_USER=minio-user-name
MINIO_ROOT_PASSWORD=minio-password-123

MINIO_VOLUMES="/data"

MINIO_OPTS="--console-address :9001"
```

接下来使用容器启动 MinIO：

> 假设你已经安装 docker/podman 和 docker-compose

Minio 的 `compose.yaml` 文件内容如下：

```yaml
version: "3.8"
services:
  minio_local:
    image: quay.io/minio/minio
    container_name: minio_local
    ports:
      - 9000:9000 # MinIO API 端口
      - 9001:9001 # MinIO Web 控制台端口
    volumes:
      - /minio/data:/data # 替换为上面挂载了分区的目录
      - /etc/default/minio:/etc/config.env
    environment:
      - MINIO_CONFIG_ENV_FILE=/etc/config.env # 指定配置文件路径
    command: server --console-address ":9001" # 启动 MinIO 服务器并指定控制台端口
    restart: always # 容器自动重启策略
```

让我们启动 Minio: `docker compose -f compose.yaml up -d `

打开 `http://{机器 ip}:9001` 看看是否启动成功，看到如下界面说明成功

![MinIO Web 控制台启动成功](/assets/images/how-to-setup-minio-juicefs-vps-town/minio-success.png)

输入用户名密码登录 (例如，用户名：minio-user-name, 密码：minio-password-123)，点击左侧 `Buckets -> Create bucket` 创建新存储桶，例如命名为 `juicefs`：

![MinIO 创建 juicefs 存储桶](/assets/images/how-to-setup-minio-juicefs-vps-town/minio-create-bucket.png)

然后创建新的 keys 用于后续的 juicefs。

点击左侧 `Access Keys`创建新的 keys，并记录：

> ![MinIO 创建 Access Keys](/assets/images/how-to-setup-minio-juicefs-vps-town/minio-api-key.png)

现在 Minio 部署完成了。

## 第二步：在大盘鸡 (`server-A`) 上使用部署 Redis

使用容器部署 Redis 十分简单，先找个目录创建 redis 配置文件，例如 `/redis/redis.conf`，内容如下：

```bash title="redis.conf"
# 关闭保护
protected-mode no
# 绑定监听IP地址
bind 0.0.0.0
maxmemory 1024mb
appendonly yes
appendfsync everysec
```

然后创建容器 `compose.yaml` 文件，内容如下（注意修改 `--requirepass` 后面的密码，例如 `redis-passwd-123`)：

```yaml title="compose.yaml"
version: "3"
services:
  juicefs-redis:
    image: redis:latest
    container_name: juicefs-redis
    deploy:
      resources:
        limits:
          memory: 2G
          cpus: "2"
    ports:
      - 6379:6379
    volumes:
      - redis-data:/data
      - ./redis.conf:/etc/redis.conf
    restart: always
    command: redis-server /etc/redis.conf --requirepass redis-passwd-123

volumes:
  db-data:
```

然后启动容器：`docker compose up -d`

然后使用以下命令验证 redis 是否成功：

```bash
docker exec juicefs-redis redis-cli -a redis-passwd-123 ping
```

显示 `pong` 表示 redis 启动成功，现在第二步完成了。

![Redis ping 返回 pong](/assets/images/how-to-setup-minio-juicefs-vps-town/redis.png)

## 第三步：在小盘鸡 (`server-B`) 中安装、创建并挂载 Juicefs

1. 执行以下命令安装 juicefs:

```bash
curl -sSL https://d.juicefs.com/install | sh -
```

2. 创建一个目录用于挂载 juicefs，例如 `/shared-jfs`

```bash
mkdir /shared-jfs
```

3. 创建名为 shared-jfs 的 juicefs：

> 假设：
>
> - server-A ip 为：`1.2.3.4`，
>
> - Minio 创建的存储桶名字为 `juicefs`
>
> - minio 的访问密钥对：
>   - access-key: `8lzuaquVzxmnzbl87DsU`,
>   - secret-key: `UbkAcsYeeaOMebTNPJrgHme2PLGBWU8yOi1AolRc`，
>
> - redis 密码为：`redis-passwd-123`,
>
> - redis 端口为：`6379`，
>
> - juicefs 文件系统名为 `shared-jfs`

```bash
juicefs format --storage minio --bucket http://1.2.3.4:9000/juicefs --access-key 8lzuaquVzxmnzbl87DsU --secret-key UbkAcsYeeaOMebTNPJrgHme2PLGBWU8yOi1AolRc redis://:redis-passwd-123@1.2.3.4:6379/1 shared-jfs
```

> 注：redis 地址中最后的 1 改为其他值可以创建新的 juicefs

成功后会在 MinIO web 控制台的 juicefs 存储桶中看到名为 `shared-jfs` 的文件夹。

然后挂载 juicefs 文件系统到 `/shared-jfs` 目录：

```bash
juicefs mount -d redis://:redis-passwd-123@1.2.3.4:6379/1 /shared-jfs
```

> -d 表示后台运行

最后让我们运行 juicefs 自带的性能测试看下是否成功 (这里我们关闭了大文件测试，太耗时啦 🤣)：

juicefs bench --big-file-size 0 /shared-jfs

![JuiceFS bench 性能测试结果](/assets/images/how-to-setup-minio-juicefs-vps-town/juicefs-bench.png)

再来看一下存储空间：

![JuiceFS 挂载后的存储空间](/assets/images/how-to-setup-minio-juicefs-vps-town/juicefs-df.png)

## 教程结束

:::info 🎉 教程结束！

啊哈，现在 `server-B` 也有一个超级大的存储空间了。

😁 冰箱门关闭。

:::
