Skip to Content
DocumentationReferenceConfiguration schema

Configuration Schema Reference

Oxia uses three YAML configuration surfaces, each with its own schema and consumer.

FileFlag(s)ConsumerContents
Cluster config--cconfig on oxia coordinator, or referenced from the coordinator server configCoordinatorNamespaces, server list, server metadata, load-balancer tuning.
Coordinator server config--sconfig on oxia coordinatorCoordinator processAdmin / internal bind addresses, TLS, metadata provider, observability.
Data-server config--sconfig on oxia serverData-server processPublic / internal bind addresses, auth, TLS, storage paths, scheduler, observability.

The authoritative JSON schema for each surface can be generated from a running binary:

oxia config create-schema

Pipe the output into any JSON-schema validator to check a config file before deploying it.

Cluster configuration

Cluster-wide configuration consumed by the coordinator. This is the most operator-visible file and the one most often edited in production — for example when adding a namespace.

FieldTypePurpose
namespaceslist<Namespace>Declared namespaces. At least one is required.
serverslist<Server>Storage nodes available to the cluster. At least one is required.
serverMetadatamap<name, ServerMetadata>Optional per-server labels used by placement policies — for example an availability-zone tag.
loadBalancerLoadBalancerShard rebalancing tuning.

Namespace

FieldTypeDefaultPurpose
namestringRequired. Unique namespace identifier.
initialShardCountuint32Required. Shard count at namespace creation (≥ 1).
replicationFactoruint32Required. Must be ≥ 1 and ≤ the number of servers.
notificationsEnabledbooltrueEnable the notifications feed for the namespace.
keySortingstringhierarchicalhierarchical (default, /-aware) or natural (byte-wise). See key sorting.
policy.antiAffinitieslistOptional placement anti-affinity rules.

Anti-affinity (policy.antiAffinities[])

FieldTypePurpose
labelslist<string>Server-metadata label keys to compare replicas against.
modestringStrict fails ensemble selection if the constraint cannot be met; Relaxed proceeds anyway.

Server

FieldTypePurpose
namestringOptional unique identifier (defaults to internal address).
publicstringAdvertised host:port for client traffic.
internalstringhost:port for coordinator → server and server → server RPCs.

ServerMetadata

FieldTypePurpose
labelsmap<string, string>Free-form labels (for example zone: eu-west-1a) referenced by anti-affinity policies when placing shard replicas.

LoadBalancer

FieldTypePurpose
scheduleIntervaldurationHow often the balancer scans for shards to move.
quarantineTimedurationHow long a recently moved shard is ineligible for further moves.

Example

namespaces: - name: default initialShardCount: 3 replicationFactor: 3 keySorting: hierarchical servers: - public: oxia-0.oxia-svc.oxia.svc.cluster.local:6648 internal: oxia-0.oxia-svc:6649 - public: oxia-1.oxia-svc.oxia.svc.cluster.local:6648 internal: oxia-1.oxia-svc:6649 - public: oxia-2.oxia-svc.oxia.svc.cluster.local:6648 internal: oxia-2.oxia-svc:6649

Coordinator server configuration

Passed via oxia coordinator --sconfig. Per-process settings for the coordinator.

SectionPurpose
cluster.configPathPath to the cluster-config file described above.
server.adminBind address + TLS for the admin gRPC service (OxiaAdmin). Default 0.0.0.0:6651.
server.internalBind address + TLS for the internal service (coordinator ↔ server traffic). Default 0.0.0.0:6649.
controller.tlsTLS for outbound coordinator → server calls.
metadataHow the coordinator persists cluster status. See below.
observability.metricPrometheus metrics endpoint. Default enabled, 0.0.0.0:8080.
observability.log.levelLog level (debug / info / warn / error). Default info.

Metadata provider

metadata.providerName selects how the coordinator’s cluster status is persisted across restarts:

ProviderExtra configurationUse case
memoryTests only. State is lost on restart.
filemetadata.file.pathSingle-node or development.
configmapmetadata.kubernetes.namespace, metadata.kubernetes.configMapNameKubernetes: survives restarts via a ConfigMap.
raftmetadata.raft.address, metadata.raft.dataDir, metadata.raft.bootstrapNodesSelf-managed, HA coordinator with a built-in Raft group.

Data-server configuration

Passed via oxia server --sconfig. Per-process settings for a storage node.

SectionPurpose
server.publicPublic bind address (default 0.0.0.0:6648), auth, tls.
server.internalInternal bind address (default 0.0.0.0:6649), tls.
replication.tlsTLS for peer replication traffic.
storage.walWrite-ahead log: dir (default ./data/wal), sync (default true), retention (default 1h).
storage.databasePebble database: dir (default ./data/db), readCacheSizeMB (default 100).
storage.notificationNotifications: retention (default 1h).
scheduler.checksum.intervalPeriodic DB integrity check. Default 5m. Set to 0s to disable.
observabilitySame shape as on the coordinator (metric + log).

Authentication

server.public.auth configures client authentication. Currently only OIDC is supported out of the box; see security for the full schema and a worked example.

TLS options

Every TLS block in any config file (server.*.tls, replication.tls, controller.tls) shares the same schema:

FieldTypePurpose
enabledboolExplicit on / off. Auto-detected as true when certFile is set.
certFilestringServer certificate file.
keyFilestringServer private key file.
trustedCaFilestringTrusted CA bundle.
clientAuthboolRequire mTLS.
minVersion, maxVersionuint16Allowed TLS versions.
cipherSuiteslist<uint16>Allowed cipher suites.
insecureSkipVerifyboolDisable certificate verification. Avoid in production.
serverNamestringSNI override for outbound connections.

See security for end-to-end examples.

Hot reload

When a data server is started with --sconfig, the file is watched and re-parsed on modification: applicable fields take effect without a restart. Bind addresses and other startup-only fields still require restarting the process.

Source of truth

The Go structs below are the canonical definition; field-level descriptions live there as jsonschema:"description=..." tags and are what oxia config create-schema exposes as JSON schema.

Last updated on