RustFS:现代化的分布式文件系统

RustFS是一个用Rust语言开发的高性能分布式文件系统,具有高可靠性、强一致性和出色的性能。本文将详细介绍RustFS的安装、使用方法,以及如何从MinIO迁移到RustFS。

一、RustFS简介

RustFS是基于Rust语言构建的新一代分布式文件系统,它利用Rust的内存安全特性和并发优势,提供了以下核心特性:

  • 高性能:采用异步I/O和零拷贝技术,提供出色的读写性能
  • 强一致性:实现了严格的一致性模型,确保数据可靠性
  • 高可用:支持数据复制和自动故障转移
  • 易于扩展:可以轻松添加新节点以扩展存储容量和性能
  • 安全:基于Rust的内存安全特性,减少了常见的安全漏洞

二、RustFS安装

官方的安装文档比较全,我这里仅仅是记录下自己安装的过程以及遇到的问题。

2.1 docker-compose部署

我这边是在FnOS系统中使用docker-compose的方式部署的,下面是compose文件内容:

version: "3"

services:
  # RustFS main service
  rustfs:
    image: rustfs/rustfs:latest
    container_name: rustfs
    ports:
      - "19000:9000" # S3 API port
      - "19001:9001" # Console port
    environment:
      - RUSTFS_ADDRESS=0.0.0.0:9000
      - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9001
      - RUSTFS_CONSOLE_ENABLE=true
      - RUSTFS_EXTERNAL_ADDRESS=:9000 # Same as internal since no port mapping
      - RUSTFS_CORS_ALLOWED_ORIGINS=*
      - RUSTFS_CONSOLE_CORS_ALLOWED_ORIGINS=*
      - RUSTFS_ACCESS_KEY=rustfsadmin
      - RUSTFS_SECRET_KEY=rustfsadmin
      - RUSTFS_OBS_LOGGER_LEVEL=info
      - RUSTFS_TLS_PATH=/opt/tls
      - RUSTFS_OBS_ENDPOINT=http://otel-collector:4317
    volumes:
      - ./data:/data
      - ./logs:/app/logs
    # restart: unless-stopped
    healthcheck:
      test:
        [
          "CMD",
          "sh", "-c",
          "curl -f http://localhost:9000/health && curl -f http://localhost:9001/rustfs/console/health"
        ]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

2.2 启动报错("Permission denied")

通过GitHub上的issues找到了解决方法,将数据和日志目录的所有者更改为10001。

进到所在目录,执行下面的命令:

# 修改前检查
ls -l
# 修改
chown -R 10001:10001 data/ logs/
# 修改后确认
ls -l

命令执行过程:

参考地址:Operator Managed Cluster fails to run · Issue #987 · rustfs/rustfs · GitHub

2.3 部署后确认

docker启动后无报错,在浏览器输入 http://192.168.188.2:19001/

出现这个说明安装成功,账号/密码:rustfsadmin/rustfsadmin

三、从MinIO迁移到RustFS

5.1 迁移准备

  1. 确保RustFS服务已正常运行
  2. 安装MinIO客户端 mc
  3. 备份MinIO数据(建议)

5.2 迁移方法

使用以下命令迁移:

# 使用mc客户端同步数据
mc alias set minio http://minio-server:9000 minioadmin minioadmin
mc alias set rustfs http://rustfs-server:19000 rustfsadmin rustfsadmin

# 同步数据
mc mirror --recursive minio/my-bucket rustfs/my-bucket

rustfs/my-bucket 要先在rustfs中建好存储桶my-bucket

5.3 迁移验证

# 验证文件数量
echo "MinIO文件数量:"
mc ls --recursive minio/my-bucket | wc -l

echo "RustFS文件数量:"
rishfs ls --recursive /minio-migrated/ | wc -l

# 验证文件完整性(随机选择几个文件)
mc cat minio/my-bucket/path/to/file.txt | md5sum
rishfs get /minio-migrated/path/to/file.txt - | md5sum

也可以通过web查看确认

四、总结

RustFS是一个功能强大、性能出色的分布式文件系统,适用于各种规模的存储需求。通过本文的介绍,您应该已经掌握了RustFS的安装、配置、使用以及从MinIO迁移数据的方法。