soli-one Get started

cluster fabric for Rocky Linux 10

Turn a rack of machines into one computer.

You stop choosing which server runs what. You say what should run, and the cluster places it — and when a node dies, moves it.

Rocky Linux 10 · signed RPMs · MIT

rk-01 — one top
$ one top
VIRTUAL HOST   3 nodes up / 3
CPU   48 cores   load 1.32 3.66 5.40   2%
MEM   82G total   42G used   39G available
DISK  294G total  27G free

NAME     DC     RACK   STATE    CPU   LOAD      MEM
rk-01    par1   r1     alive     16   0.44  14G/27G
rk-02    par1   r2     alive     16   0.44  14G/27G
rk-03    par1   r3     alive     16   0.44  14G/27G
48 cores, because the cluster has 48 cores.
01

Three bare machines to an app served by every one

Recorded, not animated: the video is these commands run against three Rocky 10 machines with nothing on them but SSH, from a laptop. packaging/lab/tutorial.sh runs the same commands and checks every result.

No sound. The time each command runs is cut; its output is shown whole. The commands are below, to copy.
  1. 1

    Make them one cluster

    one cluster form --cluster-id demo \
      rk-01 rk-02 rk-03

    Installs soli-one from the signed channel, creates the trust material on the first, admits the others.

  2. 2

    Install the runtimes everywhere

    export SOLI_ONE_HOST=rk-01
    one node install soli soli-proxy \
      solidb solikv

    One command for every node, from the same channel, packages signed.

  3. 3

    A proxy on every node

    one proxy enable

    Each proxy gets an admin key; every agent is told where all of them are.

  4. 4

    SoliDB and SoliKV clusters

    one datastore apply \
      --spec db.toml --everywhere

    Every member started in order and confirmed replicating. SoliKV's keyspace assigned.

  5. 5

    Deploy from your laptop

    one deploy ./hello --name hello \
      --domain hello.test --replicas 2 \
      -- soli serve . --port '$PORT'

    The tree travels over SSH, runs where the scheduler places it, and every proxy serves it.

The tutorial, step by step →

02

Kill the agent. The workload doesn't notice.

Workloads run as transient systemd units, not as children of the agent. So soli-oned can be killed, upgraded or restarted while everything it placed keeps serving — and the replacement adopts them instead of restarting them.

That is the property the design is built on, so it is not a promise: it is a test against the real binary, and an end-to-end run through the installed RPM on every push.

How workloads are supervised →
$ kill -9 $(pidof soli-oned)
# web keeps serving: same MainPID

$ systemctl start soli-oned
# adopted, not restarted: same MainPID,
# same InvocationID
Same process, same PID. Not restarted, never interrupted.
03

What runs today

Every card below is linked into soli-oned or one, and covered by tests that run on Rocky 10, and on 9, against a real systemd as PID 1.

04

An illusion that tells you where it ends

Summing free memory across a fleet is a real number and a useless one: you cannot put a 400 GiB workload into it. So one free prints the largest single node next to the total.

"Any node can take over any workload" is true for stateless work and false for a database. one ps carries a mobility column, a database is pinned to its node, and one node drain refuses to empty a node holding pinned work without naming what it would interrupt.

Stateful clusters →
works today

One control plane

top, free, df, ps report the fleet. You run things without naming a host.

built, not wired in

One network identity

A floating address per datacenter. The library is tested against real Raft and a real interface; no agent runs it yet.

built, not wired in

One file namespace

Artifacts replicate today. The read-only /soli view over them is a tested library that nothing mounts yet.

05

Where the line is

Every docs page marks what works, what is built but not linked into a binary, and what is deliberately not built. CI fails the build if a page calls a shipped command missing, or a library-only crate shipped.

Built, tested, not wired in

  • VIP failover — soli-one-vip
  • The elected ACME orderer — soli-one-acme
  • The read-only /soli view — soli-one-fuse
  • OVHcloud provider — soli-one-ovh

Deliberately not built

  • Certificates in replicated state — a private key on every control node is a posture to choose, not to grow into
  • Cross-region artifact gateways
  • A writable /soli

Start with three machines.

Or three agents on one workstation — the README has the loop.