Sign inSign up

mnemelabs/keeper

By mnemelabs

โ€ขUpdated 6 months ago

Image
Databases & storage
0

1.2K

mnemelabs/keeper repository overview

โ mnemelabs/keeper

Mneme โ€” distributed in-memory cache built in Rust. Keeper nodes provide WAL persistence, snapshots, and cold storage for the Core (Mnemosyne) server.

๐ŸŒ mnemelabs.ioโ  ยท ๐Ÿ“ฆ GitHubโ  ยท ๐Ÿ“– Docsโ 


โ What is a Keeper?

A Keeper (Hypnos) is the persistence tier of a Mneme cluster:

  • Receives every write from Core via mTLS replication
  • Maintains a WAL (write-ahead log) with O_DIRECT + fallocate
  • Takes periodic snapshots to bound replay time on restart
  • Serves a cold store (redb B-tree) for keys evicted from Core RAM
  • Participates in QUORUM / ALL consistency acknowledgements

One Keeper is sufficient for durability. Three Keepers give QUORUM quorum of 2-of-3.


โ Quick start โ€” add a Keeper to a running Core

โ Step 1 โ€” start the Core first
docker run -d \
  --name mneme-core \
  -p 6379:6379 -p 7379:7379 \
  -e MNEME_ADMIN_PASSWORD=secret \
  -e MNEME_CLUSTER_SECRET=change-me \
  -v core-data:/var/lib/mneme \
  mnemelabs/core:0.1.0
โ Step 2 โ€” attach a Keeper
docker run -d \
  --name mneme-keeper-1 \
  --link mneme-core \
  -e MNEME_CLUSTER_SECRET=change-me \
  -e MNEME_CORE_ADDR=mneme-core:7379 \
  -e MNEME_KEEPER_ID=keeper-1 \
  -v keeper1-data:/var/lib/mneme \
  mnemelabs/keeper:0.1.0

The Keeper connects to Core on port 7379 (mTLS), registers via Herold, and immediately begins receiving replication frames.


โ Docker Compose โ€” Core + Keepers (production cluster)

services:
  mneme-core:
    image: mnemelabs/core:0.1.0
    container_name: mneme-core
    entrypoint: ["/bin/bash", "/docker/entrypoint-core.sh"]
    user: root
    environment:
      MNEME_ADMIN_PASSWORD: secret
      MNEME_CLUSTER_SECRET: change-me-in-production
      MNEME_POOL_BYTES: 2gb
    ports:
      - "6379:6379"
      - "7379:7379"
      - "9090:9090"
    volumes:
      - core-data:/var/lib/mneme
    restart: unless-stopped

  mneme-keeper-1:
    image: mnemelabs/keeper:0.1.0
    container_name: mneme-keeper-1
    entrypoint: ["/bin/bash", "/docker/entrypoint-keeper.sh"]
    user: root
    environment:
      MNEME_CLUSTER_SECRET: change-me-in-production
      MNEME_CORE_ADDR: mneme-core:7379
      MNEME_KEEPER_ID: keeper-1
    volumes:
      - keeper1-data:/var/lib/mneme
    depends_on:
      - mneme-core
    restart: unless-stopped

  mneme-keeper-2:
    image: mnemelabs/keeper:0.1.0
    container_name: mneme-keeper-2
    entrypoint: ["/bin/bash", "/docker/entrypoint-keeper.sh"]
    user: root
    environment:
      MNEME_CLUSTER_SECRET: change-me-in-production
      MNEME_CORE_ADDR: mneme-core:7379
      MNEME_KEEPER_ID: keeper-2
    volumes:
      - keeper2-data:/var/lib/mneme
    depends_on:
      - mneme-core
    restart: unless-stopped

  mneme-keeper-3:
    image: mnemelabs/keeper:0.1.0
    container_name: mneme-keeper-3
    entrypoint: ["/bin/bash", "/docker/entrypoint-keeper.sh"]
    user: root
    environment:
      MNEME_CLUSTER_SECRET: change-me-in-production
      MNEME_CORE_ADDR: mneme-core:7379
      MNEME_KEEPER_ID: keeper-3
    volumes:
      - keeper3-data:/var/lib/mneme
    depends_on:
      - mneme-core
    restart: unless-stopped

volumes:
  core-data:
  keeper1-data:
  keeper2-data:
  keeper3-data:

โ Environment variables

VariableDefaultDescription
MNEME_CLUSTER_SECRETโ€”Shared secret for join authentication โ€” required
MNEME_CORE_ADDRโ€”Core replication address (host:7379) โ€” required
MNEME_KEEPER_IDhostnameUnique node identifier within the cluster
MNEME_LOG_LEVELinfoLog verbosity: trace / debug / info / warn / error

โ Ports

PortProtocolPurpose
7379mTLSReplication (Core โ†’ Keeper)
9090HTTPPrometheus metrics (/metrics)

Keepers do not expose a client port โ€” all client traffic goes to Core.


โ Persistence internals

ComponentRole
Aoide (WAL)O_DIRECT + fallocate write-ahead log; survives OS crash
Melete (snapshots)Periodic full snapshot; bounds WAL replay on restart
Oneiros (cold store)redb B-tree; serves keys evicted from Core RAM (~1.2ms)

โ Consistency levels โ€” Keeper participation

LevelKeeper ACKs required
EVENTUAL0 โ€” fire-and-forget
ONE1 โ€” first Keeper ACK
QUORUMโŒŠN/2โŒ‹+1 (default)
ALLEvery connected Keeper

โ License

MIT โ€” ยฉ 2024 Mneme Labs

Tag summary

Content type

Image

Digest

sha256:b0dbf0e25โ€ฆ

Size

35.2 MB

Last updated

6 months ago

docker pull mnemelabs/keeper