Watch health
External probes report expiring evidence. All required checks must remain fresh before a node may contend.
elasticd turns service-health evidence into bounded eligibility, exclusive authority, exact Linux VIP state, and explicit route intent. Each resource reconciles independently—and when authority can no longer be proven, the safe answer is withdrawal, not optimism.
External probes report expiring evidence. All required checks must remain fresh before a node may contend.
Only current authority may add the exact configured addresses; every mutation is observed before it counts.
The publisher turns ownership into explicit route intent and separately reports local publication and peer state.
One long-lived controller serializes health, ownership, address, publisher, timer, and shutdown events for this resource. Its authority generation and desired state belong to vip/web alone.
Web, mail, and DNS can live in the same daemon while preferring different nodes and failing independently. Each resource controller owns only its mutable lifecycle state, operation generation, timers, and status snapshot. Shared capabilities such as the BGP runtime keep one lifecycle, but they do not merge resource authority.
Every asynchronous result carries the authority and operation generation that started it. If ownership changes while a netlink or publisher operation is still in flight, the late result is rejected instead of completing a newer transition. One resource failure does not reset unrelated controllers unless a shared runtime is unsafe for all of them.
External producers report bounded, versioned observations for the workload. When one required check expires or becomes unacceptable, edge-1 becomes ineligible immediately—without the health listener touching Raft, Consul, netlink, or BGP.
Service-specific checks run outside the elasticd authority daemon. Monit, Consul, or root-managed scripts submit fresh health reports through its local health socket. This keeps application credentials and protocol logic outside the privileged HA daemon.
Every required check begins as unknown after restart. Acceptable states carry a bounded TTL derived from the daemon’s monotonic receive time; producer timestamps cannot extend it. Missing, expired, critical, withdrawn, malformed, or unauthorized evidence never satisfies eligibility.
Health can remove a node from contention, but it cannot create ownership or request a VIP. Read local health notification and eligibility →
The selected driver identifies one authority generation. The controller may act only while that generation still matches and its conservative local deadline remains unexpired. Failed proof never extends the clock.
Resource configuration defines ownership priorities and required health checks. Fresh health reports determine which nodes are eligible, and the configured preference guides owner selection. The selected node still needs a committed Raft ownership grant and an unexpired local lease before it can act. Health or priority alone never grants ownership.
Handover is break-before-make: the current owner withdraws routes, waits for the required propagation delay, removes managed VIPs, and confirms cleanup before releasing ownership. If it crashes or cleanup cannot be proven, the successor waits a conservative safety delay before taking over. Leases and takeover safeguards prevent the previous and next owners from overlapping.
The design prefers an explicit outage to two correct owners. Understand ownership leases and safe takeover →
edge-3 adds only the configured host prefixes on the configured existing interface. An acknowledgement is not enough: fresh netlink observation must prove every required address usable before route publication can begin.
The address capability owns only exact configured pairs: interface name plus canonical host prefix. It may add, observe, or remove those pairs. It does not create or bring up the interface, adopt an address it discovers, infer resources from host networking, or touch unrelated addresses, routes, rules, neighbors, namespaces, sysctls, or firewall state.
Netlink events are wake-up hints, not durable truth. Full link-and-address observation is authoritative at startup, after event loss or decode failure, after link replacement, and periodically. IPv4 must be observed on the expected link; IPv6 must also clear tentative, duplicate-address, and deprecation checks required by the address contract.
If an active VIP disappears, elasticd withdraws publication before repairing the address and republishing. Read managed VIP and netlink reconciliation →
Only after every required VIP is observed usable may edge-3 insert the resource’s exact configured path. The publisher reports local route state and peer availability separately, without pretending either proves Internet-wide convergence.
The publisher accepts only validated route intent from resource configuration. It does not scan interfaces, redistribute kernel routes, derive aggregates, import routes into the host, or let an arbitrary path cross the publisher boundary. For v0.1, one embedded GoBGP server and peer set are shared across resources, while desired routes remain resource-scoped.
Local publication proves the exact elasticd-originated path exists in the embedded BGP local RIB for the current authority generation. It does not prove that a peer selected it or that every downstream router converged. Peer failure is operational degradation, not a new ownership election.
Clean drain proves local route absence and maintains it through the configured propagation delay before removing the VIP and releasing authority. Unclean takeover waits the declared stale-route fence. Read publisher intent, BGP observation, and fencing →
Health expiry, owner loss, and quorum loss change different inputs. The output stays explainable—and sometimes the safe output is no VIP at all.
Know exactly when a sample becomes too old to justify ownership. Health model →
The authority backend defines the fencing and lease guarantees you actually get. Driver contract →
When ownership cannot be proven, disappearing can be safer than guessing. Failure model →
Read the ownership model, evidence semantics, driver contracts, and the assumptions still being challenged in public.