ORCHESTRATED RECONCILIATION ENGINE (ORE)
BY THE LUSTRE COLLECTIVE

Software-defined Lustre storage. On your hardware or cloud.

ORE provisions, manages, upgrades and monitors Lustre clusters, on bare metal or in the cloud. Declare the cluster you want, and ORE handles the rest.

Get in touch →
How it works →

WHAT ORE IS

Everything around the file system, in one distribution.

Lustre is the file system. ORE turns it into a production-ready storage system: the host image it runs on, the framework that provisions and manages every host and resource, and the observability that streams straight to your monitoring system.

What ORE is Hardwarestorage · network OS Management framework Lustre Observability re provision manage upgrade monitor Applications

Management framework

Cluster-wide orchestration and high availability for every resource, managed through a modern CLI, GUI and API.

OS distribution

A layered host image, tested as a whole, that you can extend with your own layer. Atomic upgrades, one-step rollback.

Lustre release

A fully tested and maintained Lustre release, built on the latest community releases, with fast turnaround on fixes.

Observability

Whole-platform metrics, logs and traces, over open standards, into the monitoring system you already run.

HOW IT WORKS

Plan, review, apply

You describe the cluster you want. ORE plans what needs to be done, shows you the plan, and carries it out. Every resource is tracked, so that after any failure ORE returns the cluster to operation automatically.


01 · State

What should be, and what is.

Desired state lives in a Raft-backed KV store, and surveyors on every host stream what is actually running. The complete state of the cluster, desired and live, is visible from any node at any time. Config changes stage and apply atomically.

02 · Reconcile

Desired state, continually enforced.

The ORE reconciler turns cluster state into action on every tick. Every change is planned from the difference between desired and live state, shown before it runs. Drift is detected and automatically corrected.

03 · Resilience

Built to survive failures.

Cluster state lives with a quorum of nodes spread across fault domains, and changes only with their agreement. A failed host is fenced first, its targets re-placed, and the cluster carries on.

THE PLATFORM

Built for the whole life of a cluster

One self-contained platform that grows with the cluster. Add a host, give it a role, and the daemon on it takes up that work. Every capability ships in that one daemon

LUSTRE-NATIVE BY DESIGN


Topology-aware placement

Every MGT, MDT and OST is declared with the hosts it may run on. Placement and failover follow from that, not from scripts wrapped around a generic service.

One dependency graph

Storage, networking and hosts are managed the same way as the targets, so a failover brings up what each target depends on, in order.

Fence before cascade

A failed host is fenced first, then its targets are released so a peer can claim them. No two hosts ever serve the same target.

SEEN FROM THE TERMINAL

ORE cluster watch shows what every host is running, live, from any node, with all resource transitions visible alongside.

ore cluster watch ● active · 75 resources · ◐ 1 Degraded · ● 74 Active
┌ hosts (grouped) ──────────────────────────────────────────────────────────
▼ ore-node1 [2f393d3b9e] Host ★ Leader ● ore-rocky10-qemu:2026101419
└ MGT MGT ● Active
└ MDT lustre1-MDT0001 ● Active
└ Chrony ● Active
└ ETH data0 ● Active
└ ETH data1 ● Active
└ ETH mgmt0 ● Active
└ LNet ● Active
└ DISK /dev/mob/lustre1_mdt0000 ● Active · read-only
└ DISK /dev/mob/lustre1_mdt0001 ● Active · read-only
└ DISK /dev/mob/mgt ● Active · read-only
▼ ore-node2 [f0f536dc14] Host ● Active ● ore-rocky10-qemu:2026101419
└ MDT0 lustre1 ● Active
└ Chrony ● Active
└ ETH data0 ● Active
└ ETH data1 ● Active
└ ETH mgmt0 ● Active
└ LNet ● Active
└ DISK /dev/mob/lustre1_mdt0000 ● Active · read-only
└ DISK /dev/mob/lustre1_mdt0001 ● Active · read-only
└ DISK /dev/mob/mgt ● Active · read-only
▼ ore-node3 [77352f4489] Host ● Active ● ore-rocky10-qemu:2026101419
└ MD lustre1_ost0000 ● Active
└ MD lustre1_ost0001 ● Active
└ OST lustre1-OST0000 ◐ Degraded recovering
└ OST lustre1-OST0001 ● Active
└ Chrony ● Active
└ ETH data0 ● Active
└ ETH data1 ● Active
└ ETH mgmt0 ● Active
└ LNet ● Active
└ NVMe-oF ● Active
└ DISK /dev/disk/by-id/nvme-ore_ebof_1 ● Active · read-only held by lustre1_ost0000
└ DISK /dev/disk/by-id/nvme-ore_ebof_2 ● Active · read-only held by lustre1_ost0000
└ DISK /dev/disk/by-id/nvme-ore_ebof_3 ● Active · read-only held by lustre1_ost0000
└ DISK /dev/disk/by-id/nvme-ore_ebof_4 ● Active · read-only held by lustre1_ost0000
└ DISK /dev/disk/by-id/nvme-ore_ebof_5 ● Active · read-only held by lustre1_ost0001
└ DISK /dev/disk/by-id/nvme-ore_ebof_6 ● Active · read-only held by lustre1_ost0001
└ DISK /dev/disk/by-id/nvme-ore_ebof_7 ● Active · read-only held by lustre1_ost0001
└ DISK /dev/disk/by-id/nvme-ore_ebof_8 ● Active · read-only held by lustre1_ost0001
└ DISK /dev/disk/by-id/nvme-ore_ebof_9 ● Active · read-only
└ DISK /dev/disk/by-id/nvme-ore_ebof_10 ● Active · read-only
└ DISK /dev/disk/by-id/nvme-ore_ebof_11 ● Active · read-only
└ DISK /dev/disk/by-id/nvme-ore_ebof_12 ● Active · read-only
└ DISK /dev/disk/by-id/nvme-ore_ebof_13 ● Active · read-only
└ DISK /dev/disk/by-id/nvme-ore_ebof_14 ● Active · read-only
└ DISK /dev/disk/by-id/nvme-ore_ebof_15 ● Active · read-only
└ DISK /dev/disk/by-id/nvme-ore_ebof_16 ● Active · read-only
▼ ore-node4 [dc7ea5e883] Host ● Active ● ore-rocky10-qemu:2026101419
└ MD lustre1_ost0002 ● Active
└ MD lustre1_ost0003 ● Active
└ OST lustre1-OST0002 ● Active
└ OST lustre1-OST0003 ● Active
└ Chrony ● Active
└ ETH data0 ● Active
└ ETH data1 ● Active
└ ETH mgmt0 ● Active
└ LNet ● Active
└ NVMe-oF ● Active
└ DISK /dev/disk/by-id/nvme-ore_ebof_1 ● Active · read-only
└ DISK /dev/disk/by-id/nvme-ore_ebof_2 ● Active · read-only
└ DISK /dev/disk/by-id/nvme-ore_ebof_3 ● Active · read-only
└ DISK /dev/disk/by-id/nvme-ore_ebof_4 ● Active · read-only
└ DISK /dev/disk/by-id/nvme-ore_ebof_5 ● Active · read-only
└ DISK /dev/disk/by-id/nvme-ore_ebof_6 ● Active · read-only
└ DISK /dev/disk/by-id/nvme-ore_ebof_7 ● Active · read-only
└ DISK /dev/disk/by-id/nvme-ore_ebof_8 ● Active · read-only
└ DISK /dev/disk/by-id/nvme-ore_ebof_9 ● Active · read-only held by lustre1_ost0002
└ DISK /dev/disk/by-id/nvme-ore_ebof_10 ● Active · read-only held by lustre1_ost0002
└ DISK /dev/disk/by-id/nvme-ore_ebof_11 ● Active · read-only held by lustre1_ost0002
└ DISK /dev/disk/by-id/nvme-ore_ebof_12 ● Active · read-only held by lustre1_ost0002
└ DISK /dev/disk/by-id/nvme-ore_ebof_13 ● Active · read-only held by lustre1_ost0003
└ DISK /dev/disk/by-id/nvme-ore_ebof_14 ● Active · read-only held by lustre1_ost0003
└ DISK /dev/disk/by-id/nvme-ore_ebof_15 ● Active · read-only held by lustre1_ost0003
└ DISK /dev/disk/by-id/nvme-ore_ebof_16 ● Active · read-only held by lustre1_ost0003
┌ transitions ──────────────────────────────────────────────
15:01:47 ✓ Stop LNet on ore-node3 1s 338ms
15:01:47 → Stop data0 on ore-node3
15:01:47 → Stop data1 on ore-node3
15:01:47 ✓ Stop data1 on ore-node3 266ms
15:01:47 ✓ Stop data0 on ore-node3 283ms
15:02:37 → Start Chrony on ore-node3
15:02:37 → Start data0 on ore-node3
15:02:37 → Start data1 on ore-node3
15:02:37 → Start LNet on ore-node3
15:02:37 → Start NVMe-oF on ore-node3
15:02:37 ✓ Start NVMe-oF on ore-node3 144ms
15:02:37 ✓ Start Chrony on ore-node3 518ms
15:02:38 ✓ Start LNet on ore-node3 963ms
15:02:38 ✓ Start data0 on ore-node3 1s 421ms
15:02:39 ✓ Start data1 on ore-node3 2s 189ms
15:02:48 ⇢ – lustre1-OST0000 relocating ore-node4 → ore-node3
15:02:48 ⇢ – lustre1-OST0001 relocating ore-node4 → ore-node3
15:02:48 → Stop lustre1-OST0000 on ore-node4
15:02:48 → Stop lustre1-OST0001 on ore-node4
15:02:49 ✓ Stop lustre1-OST0000 on ore-node4 526ms
15:02:49 ✓ Stop lustre1-OST0001 on ore-node4 542ms
15:02:51 → Relocate lustre1_ost0000 on ore-node4
15:02:51 → Relocate lustre1_ost0001 on ore-node4
15:02:51 ✓ Relocate lustre1_ost0000 on ore-node4 284ms
15:02:51 ✓ Relocate lustre1_ost0001 on ore-node4 307ms
15:02:51 → Start lustre1_ost0000 on ore-node3
15:02:51 → Start lustre1_ost0001 on ore-node3
15:02:51 ✓ Start lustre1_ost0001 on ore-node3 153ms
15:02:51 ✓ Start lustre1_ost0000 on ore-node3 158ms
15:02:55 → Start lustre1-OST0000 on ore-node3
15:02:55 → Start lustre1-OST0001 on ore-node3
15:03:01 ✓ Start lustre1-OST0000 on ore-node3 5s 356ms
15:03:01 ⇥ – lustre1-OST0000 relocated ore-node4 → ore-node3
15:03:01 ✓ Start lustre1-OST0001 on ore-node3 5s 489ms
15:03:01 ⇥ – lustre1-OST0001 relocated ore-node4 → ore-node3
Quit (q)Prev ([)Next (])Grouped (t)State (s)Rebalance (r)Aux (v)Discovered (d)Help (?)

OBSERVABILITY AND SUPPORT

Built for the day after install


Observability, out of the box

Every node ships metrics, logs and traces for Lustre and ORE itself to any OTLP endpoint, with TLC-maintained Grafana dashboards and alerts bundled. Connect your own Prometheus, Loki or a commercial backend.

Real-time Support without opening your firewall

A point-in-time support bundle collects configuration and logs across the cluster. For escalations, you can open a secure session that an authorised support engineer connects to, with no VPN, jump-host or firewall change.

Running Lustre in production?

The Lustre Collective builds and supports ORE alongside Lustre itself. Get in touch to find out more about using ORE on your platform.

Get in touch →