Deployment

Deployment #

Pizza ships as a single statically-linked binary — copy it, give it a data directory, run it. This page covers the deployment shapes; for the full configuration key reference see configuration and pizza.yml reference.

Single node #

The default pizza.yml runs a self-contained node: metadata catalog, shards and the HTTP API in one process.

./pizza -c pizza.yml

Data lives under path.data (default ./data). The binary needs no external services — no ZooKeeper, no external metastore.

Multiple instances on one machine #

Each instance needs a distinct API port, data directory and advertise address. The configuration reference documents the detection rules; in short, pass them explicitly:

./pizza -c pizza.yml \
  -E api.port=28001 \
  -E path.data=./data-2 \
  -E cluster.region.advertise_addr=127.0.0.1:9301

Multi-node cluster #

Run one node, then join the rest with a join token minted on the first node:

curl -X POST -H "Authorization: Bearer $KEY" \
  -H 'Content-Type: application/json' \
  -d '{"note": "bootstrap worker"}' \
  http://seed:28000/_cluster/join_token

Start additional nodes with the returned token and the seed address; the cluster management reference has the full workflow. Replication and resharding then require no further action — see sharding.

Systemd unit #

[Unit]
Description=Pizza search node
After=network-online.target

[Service]
ExecStart=/opt/pizza/pizza -c /etc/pizza/pizza.yml
Restart=on-failure
LimitNOFILE=65535
# NUMA: pin the node to one socket on multi-socket hosts
# numactl --cpunodebind=0 --membind=0 /opt/pizza/pizza -c /etc/pizza/pizza.yml

[Install]
WantedBy=multi-user.target

Pizza is share-nothing per CPU — prefer one process per NUMA socket over one big process on multi-socket machines (see architecture).

Upgrades and rollback #

  • Replace the binary and restart; on-disk formats are forward-compatible within a minor series (see release notes).
  • The startup gate keeps the node answering 503 (with phase detail) until recovery completes — put / or /_node/_local/ready behind your load balancer health check.
  • For a full discussion of backup and restore (Raft snapshots, trash) see backup.
Calendar September 25, 2026
Edit Edit this page