Please enable Javascript to view the contents

将 JuiceFS 元数据从 Redis 迁移到 PGSQL

 ·  ☕ 2 分钟

1. 为什么将元数据存储从 Redis 迁移到 PGSQL

  • PGSQL 成本低

Redis 使用内存存储元数据,PGSQL 使用磁盘存储元数据,成本差异显而易见。

  • PGSQL 性能可调节

不同的 PGSQL 提供了不同的性能 IOPS。如果对性能没有持续高的要求,使用 PGSQL 是不错的选择。

  • PGSQL 存储上限更高

如果按照元数据大小估算应该更准确,但我更喜欢用的公式是: 元数据的大小 * 2000 = 存储的大小。也就是 200TB 的数据,需要一个 100GB 的 Redis 实例。而目前我们常用的云厂最大的主从 Redis 实例只有 96GB,无法满足存储需求。

使用 Redis 集群有一个坑是,Juicefs 只会使用一个 Redis 集群节点存储元数据,其他节点的资源无法使用。

而使用 PGSQL 的实例可以提供 TB 级别的存储,Juicefs 单实例可以容纳 PB 级别的数据。

2. 从 Redis 导出元数据

  • 配置环境变量
1
2
3
4
export REDIS_PASSWORD=
#ip:port/database
export REDIS_ENDPOINT=
export META_SERVER=redis://:$REDIS_PASSWORD@$REDIS_ENDPOINT
  • 导出元数据
1
2
3
4
juicefs dump $META_SERVER meta-redis.json

Dumped entries: 25334296/25752607 [============================================================>-]  17909.7/s ETA: 23s
juicefs[3287398] <INFO>: Dump metadata into meta-redis.json succeed [dump.go:107]

等待导出完毕。

3. 将元数据导入到 PGSQL

  • 配置环境变量
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
export ACCESS_KEY=
export SECRET_KEY=
export BUCKET=
export ENDPOINT=ks3-cn-beijing-internal.ksyun.com
export BUCKET_ENPOINT=$BUCKET.$ENDPOINT
export PROVIDER=ks3

export NAMESPACE=
export PVC_NAME=

export NODE_SELECTOR_KEY=
export NODE_SELECTOR_VALUE=

export JUICEFS_IMAGE=juicedata/juicefs-fuse
export DEMO_IMAGE=shaowenchen/demo-ubuntu

export POSTGRES_USER=admin
export POSTGRES_PASSWORD=
export POSTGRES_IP=
export POSTGRES_PORT=5432
export POSTGRES_DB=
export META_SERVER=postgres://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_IP:$POSTGRES_PORT/$POSTGRES_DB?sslmode=disable
  • 创建数据库
1
psql -U $POSTGRES_USER -h $POSTGRES_IP -p $POSTGRES_PORT -d postgres -c "CREATE DATABASE $POSTGRES_DB;"
  • 导入元数据
1
2
3
4
juicefs load $META_SERVER meta-redis.json

juicefs[3315492] <WARNING>: Secret key was removed; please correct it with `config` command [load.go:138]
juicefs[3315492] <INFO>: Load metadata from meta-redis.json succeed [load.go:143]
  • 配置存储桶秘钥
1
juicefs config --secret-key $SECRET_KEY $META_SERVER

在集群配置 JuiceFS 的过程可以参考,在 Kubernetes 下创建后端为 JuiceFS 的 PVC

4. 性能测试

最后使用默认参数测试了下,看起来速度也还行,在可以接受的范围:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
juicefs bench .

+------------------+------------------+---------------+
|       ITEM       |       VALUE      |      COST     |
+------------------+------------------+---------------+
|   Write big file |     408.04 MiB/s |   2.51 s/file |
|    Read big file |     232.10 MiB/s |   4.41 s/file |
| Write small file |     11.0 files/s | 91.25 ms/file |
|  Read small file |     21.9 files/s | 45.61 ms/file |
|        Stat file |    144.2 files/s |  6.94 ms/file |
|   FUSE operation | 17912 operations |    1.48 ms/op |
|      Update meta |  1228 operations |    9.88 ms/op |
|       Put object |   356 operations |  114.92 ms/op |
|       Get object |   356 operations |   55.30 ms/op |
|    Delete object |     0 operations |    0.00 ms/op |
| Write into cache |     0 operations |    0.00 ms/op |
|  Read from cache |     0 operations |    0.00 ms/op |
+------------------+------------------+---------------+

微信公众号
作者
微信公众号