From 5daafdf806a087da811347e01d149f6d91c2e682 Mon Sep 17 00:00:00 2001 From: Ruben Date: Thu, 14 Aug 2025 21:30:01 -0500 Subject: [PATCH] migrate redis to multiple dragonflydb instances --- phosphorus/srv/docker/sharkey/compose.yaml | 78 ++++++++++++++++------ phosphorus/srv/docker/sharkey/default.yml | 14 ++-- 2 files changed, 64 insertions(+), 28 deletions(-) diff --git a/phosphorus/srv/docker/sharkey/compose.yaml b/phosphorus/srv/docker/sharkey/compose.yaml index 1d1fe28..0c1d02a 100644 --- a/phosphorus/srv/docker/sharkey/compose.yaml +++ b/phosphorus/srv/docker/sharkey/compose.yaml @@ -14,9 +14,6 @@ services: api: image: registry.activitypub.software/transfem-org/sharkey:latest restart: always - depends_on: - redis: - condition: service_healthy ports: - "127.0.0.1:60628:3001" networks: @@ -39,9 +36,6 @@ services: worker: image: registry.activitypub.software/transfem-org/sharkey:latest restart: always - depends_on: - redis: - condition: service_healthy networks: - db - sharkey @@ -60,9 +54,6 @@ services: activity: image: registry.activitypub.software/transfem-org/sharkey:latest restart: always - depends_on: - redis: - condition: service_healthy ports: - "127.0.0.1:47815:3002" networks: @@ -86,9 +77,6 @@ services: media: image: registry.activitypub.software/transfem-org/sharkey:latest restart: always - depends_on: - redis: - condition: service_healthy ports: - "127.0.0.1:57378:3003" networks: @@ -108,18 +96,66 @@ services: - ./media:/sharkey/.config - ./default.yml:/sharkey/.config/default.yml:ro - # redis is used for caching - redis: + # "redis is for caching" WRONG!!! it is long term persistent storage in misskey. for some reason. "caching". + # do NOT wipe redis or you lose a bunch of actual data like timelines and notifications. + # also, we use dragonflydb over redis. personal preference, better performance and stability. + + # general dfdb + dragonfly: + image: docker.dragonflydb.io/dragonflydb/dragonfly restart: always - image: redis:alpine - volumes: - - ./redis:/data + ulimits: + memlock: -1 networks: - sharkey - healthcheck: - test: "redis-cli ping" - interval: 5s - retries: 20 + environment: + # these envvars are important in order for dragonflydb/misskey to interact with each other properly, and to load and save all data properly + DFLY_snapshot_cron: '* * * * *' + DFLY_version_check: false + DFLY_default_lua_flags: allow-undeclared-keys # without this, dfdb would immediately complain loading data + DFLY_dbfilename: 'dump.rdb' # misskey expects this + DFLY_df_snapshot_format: false # misskey doesn't know how to handle dfdb's format + DFLY_dir: '/data' # directory with the snapshot/data + volumes: + - ./dragonfly/general:/data + + # job queue dfdb + dragonfly-queue: + image: docker.dragonflydb.io/dragonflydb/dragonfly + restart: always + ulimits: + memlock: -1 + networks: + - sharkey + environment: + DFLY_port: 6380 + DFLY_snapshot_cron: '* * * * *' + DFLY_version_check: false + DFLY_default_lua_flags: allow-undeclared-keys + DFLY_dbfilename: 'dump.rdb' + DFLY_df_snapshot_format: false + DFLY_dir: '/data' + volumes: + - ./dragonfly/queue:/data + + # timelines dfdb + dragonfly-tl: + image: docker.dragonflydb.io/dragonflydb/dragonfly + restart: always + ulimits: + memlock: -1 + networks: + - sharkey + environment: + DFLY_port: 6381 + DFLY_snapshot_cron: '* * * * *' + DFLY_version_check: false + DFLY_default_lua_flags: allow-undeclared-keys + DFLY_dbfilename: 'dump.rdb' + DFLY_df_snapshot_format: false + DFLY_dir: '/data' + volumes: + - ./dragonfly/timelines:/data networks: db: diff --git a/phosphorus/srv/docker/sharkey/default.yml b/phosphorus/srv/docker/sharkey/default.yml index 915a75e..dc29b2e 100644 --- a/phosphorus/srv/docker/sharkey/default.yml +++ b/phosphorus/srv/docker/sharkey/default.yml @@ -141,7 +141,7 @@ dbReplications: false #───┘ Redis configuration └───────────────────────────────────── redis: - host: redis + host: dragonfly port: 6379 #family: 0 # 0=Both, 4=IPv4, 6=IPv6 #pass: example-pass @@ -160,9 +160,9 @@ redis: # # You can specify more ioredis options... # #username: example-username -#redisForJobQueue: -# host: redis -# port: 6379 +redisForJobQueue: + host: dragonfly-queue + port: 6380 # #family: 0 # 0=Both, 4=IPv4, 6=IPv6 # #pass: example-pass # #prefix: example-prefix @@ -170,9 +170,9 @@ redis: # # You can specify more ioredis options... # #username: example-username -#redisForTimelines: -# host: redis -# port: 6379 +redisForTimelines: + host: dragonfly-tl + port: 6381 # #family: 0 # 0=Both, 4=IPv4, 6=IPv6 # #pass: example-pass # #prefix: example-prefix