Server--:--:--You--:--:--

oVirt Architecture Overview

By Prabath Thalangama· September 24, 2026· 3 min read
#ovirt#kvm#virtualization

Introduction

oVirt is an open-source management platform for KVM virtualization at datacenter scale — the upstream of what was Red Hat Virtualization (RHV). It gives you a web UI and API to manage many hypervisor hosts, shared storage, live migration, HA, and templates.

The components

The engine

A Java application (WildFly) with a PostgreSQL database, a REST API, and the Administration/VM portals. It's the brain: it makes scheduling decisions, tracks state, and tells hosts what to do. It does not sit in the data path — if the engine is down, running VMs keep running (you just can't manage them).

Hosts and VDSM

Each hypervisor host runs:

  • libvirt + QEMU/KVM — the actual virtualization.
  • VDSM (Virtual Desktop and Server Manager) — a Python daemon that the engine talks to over JSON-RPC. VDSM translates engine commands into libvirt calls, manages storage connections, reports stats, and runs the host's part of live migration.
  • Host types: a full RHEL/CentOS/Rocky host with packages added, or oVirt Node — a minimal, image-based appliance OS.

Data centers, clusters, hosts

  • Data center — a logical grouping with a storage type and one or more clusters. Contains the storage domains.
  • Cluster — hosts with compatible CPUs (the cluster CPU type is the lowest common denominator, so live migration works between any two hosts). Scheduling, HA, and affinity policies are per-cluster.
  • Host — one physical machine in a cluster.

Storage domains

  • Data domain — holds VM disks and snapshots. Types: NFS, iSCSI, FC, Gluster, POSIX. One data domain is the master (holds metadata).
  • ISO domain (legacy) — install media. Modern oVirt uploads ISOs to a data domain instead.
  • Export domain (legacy) — for moving VMs between data centers; replaced by the OVA export/import and data-domain detach/attach.

The SPM (Storage Pool Manager) is one host per data center elected to perform metadata operations (create/delete disk, snapshot, extend). If it dies, another host is elected.

Hosted engine

Rather than a dedicated physical/virtual machine for the engine, hosted-engine runs the engine as a VM on the same hosts it manages, with its own HA:

  • The engine VM's disk lives on a dedicated storage domain.
  • An agent/broker (ovirt-ha-agent, ovirt-ha-broker) on each hosted-engine host monitors the engine VM and restarts it elsewhere if its host fails.
  • Bootstrapped with hosted-engine --deploy (or the cockpit wizard).

This is the standard deployment now — no separate engine box to maintain.

Networking

  • Logical networks — named networks (ovirtmgmt for management, plus your VM networks) attached to host NICs/bonds/VLANs.
  • ovirtmgmt carries engine↔VDSM traffic and, by default, migration and display — separate these onto their own networks for production.

Relationship to other products

  • RHV — Red Hat's supported build of oVirt (now end-of-life; Red Hat steers customers to OpenShift Virtualization).
  • OpenShift Virtualization / KubeVirt — the successor direction: run VMs as Kubernetes objects. Different architecture; oVirt remains for classic "vSphere-like" management.

Verification and troubleshooting

# On a host
vdsm-client Host getStats
systemctl status vdsmd ovirt-ha-agent ovirt-ha-broker
hosted-engine --vm-status

# Engine
systemctl status ovirt-engine
tail -f /var/log/ovirt-engine/engine.log
  • Host stuck "Non Operational" / "Connecting" — VDSM down, a required logical network missing on the host, storage domain unreachable, or engine↔host certificate/time issues.
  • "No SPM" — no host could take the SPM role; usually the master storage domain is inaccessible. Fix storage, then a host is elected.
  • Data center "Non Responsive" — master storage domain down. Everything metadata-related stalls until it's back.
  • Hosted engine won't starthosted-engine --vm-status shows why; common causes are the HE storage domain unreachable or a stale sanlock lock.
  • Can't add a host — SSH/root access, time skew > a few seconds (engine and host must agree — run chrony), or firewall between engine and host.
  • Engine DB huge / slow — DWH (data warehouse) retention; run engine-vacuum and check the DWH sampling/retention config.
PrabathStuck on something this site can't fix?Reach out to Prabath directly on LinkedIn.