The RPC probe flapped while every other knots check stayed green. Each burst lined up with a block: validation on the saturated HDD holds the node busy while Fulcrum, mempool and DATUM all fetch the block, and bitcoind rejected calls with "work queue depth exceeded" (93 times on 2026-10-18). - 403: the probe runs every minute, so failure-threshold 4 rides out a 1-3 minute burst while a real outage still alerts within ~5 minutes. Probes now take an optional failure_threshold over a shared probe_alert. - rpcworkqueue=64 and rpcthreads=8, so bursts queue instead of failing. Profiling later showed the stalls are per-input UTXO lookups at ~5 ms each - HDD seek latency - so this treats the symptom. The fix is chainstate on SSD. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
87 lines
3.8 KiB
YAML
87 lines
3.8 KiB
YAML
# Bitcoin Knots Configuration Variables
|
|
|
|
# Version - REQUIRED: Specify exact version/tag to build
|
|
# The only version string. There used to be a second, v-prefixed copy
|
|
# (bitcoin_knots_version) that nothing read - two hand-maintained copies of one
|
|
# fact, with nothing keeping them in step.
|
|
bitcoin_knots_version_short: "29.2.knots20251110"
|
|
|
|
# Directories
|
|
bitcoin_knots_dir: /opt/bitcoin-knots
|
|
bitcoin_knots_source_dir: "{{ bitcoin_knots_dir }}/source"
|
|
bitcoin_data_dir: /var/lib/bitcoin # Standard location for config, logs, wallets
|
|
bitcoin_large_data_dir: /mnt/knots_data # Custom location for blockchain data (blocks, chainstate)
|
|
bitcoin_conf_dir: /etc/bitcoin
|
|
|
|
# Network
|
|
bitcoin_rpc_port: 8332
|
|
# The edge host's socket-proxy/Caddy play needs this too, and a role default is
|
|
# invisible outside this role. The authoritative value for the live deployment is
|
|
# in host_vars/knots_box_local/main.yml, which outranks this; the value here is the
|
|
# protocol standard, so the role still works standalone.
|
|
bitcoin_p2p_port: 8333
|
|
bitcoin_rpc_bind: "0.0.0.0"
|
|
|
|
# RPC capacity. When a block lands, Fulcrum, mempool and DATUM all fetch it at
|
|
# once while validation holds the node busy on a saturated HDD; with the
|
|
# defaults the queue overflowed and bitcoind REJECTED calls ("http work queue
|
|
# depth exceeded" - 93 times on 2026-10-18), which also made the health probe
|
|
# flap. A deeper queue lets those bursts wait instead of failing. Costs a few
|
|
# idle threads and a little memory.
|
|
bitcoin_rpcworkqueue: 64
|
|
bitcoin_rpcthreads: 8
|
|
|
|
# Build options
|
|
bitcoin_build_jobs: 4 # Parallel build jobs (-j flag), adjust based on CPU cores
|
|
bitcoin_build_prefix: /usr/local
|
|
|
|
# Configuration options
|
|
bitcoin_enable_txindex: true # Set to true if transaction index needed (REQUIRED for Electrum servers like Electrs/ElectrumX)
|
|
bitcoin_max_connections: 125
|
|
# dbcache will be calculated as 90% of host RAM automatically in playbook
|
|
|
|
# ZMQ Configuration
|
|
bitcoin_zmq_enabled: true
|
|
bitcoin_zmq_bind: "tcp://0.0.0.0"
|
|
bitcoin_zmq_port_rawblock: 28332
|
|
bitcoin_zmq_port_rawtx: 28333
|
|
bitcoin_zmq_port_hashblock: 28334
|
|
bitcoin_zmq_port_hashtx: 28335
|
|
|
|
# Service user
|
|
bitcoin_user: bitcoin
|
|
bitcoin_group: bitcoin
|
|
|
|
# --- Health check ----------------------------------------------------------
|
|
# Checks bitcoind RPC and records the answer in its exit code, which systemd
|
|
# keeps: `systemctl is-failed bitcoin-knots-healthcheck.service`.
|
|
#
|
|
# WHERE TO REPORT HEALTH — the one place to plug in monitoring. Empty means
|
|
# check, exit honestly, report nowhere. Any endpoint accepting an HTTP ping
|
|
# works; nothing here is specific to a monitoring product.
|
|
healthcheck_push_url: ""
|
|
# Bearer token for the Gatus external endpoint. Required whenever a push URL
|
|
# is set: Gatus rejects an unauthenticated push with 401.
|
|
healthcheck_push_token: ""
|
|
|
|
# --- Logging ----------------------------------------------------------------
|
|
# The live node logs to a file. Set to "" to use printtoconsole=1 (journald).
|
|
bitcoin_logfile: "{{ bitcoin_data_dir }}/debug.log"
|
|
|
|
# --- dbcache ----------------------------------------------------------------
|
|
# Computed as 90% of RAM unless this is set. The live node was hand-tuned to
|
|
# 200 MB; the calculation would have produced 3528. As with fulcrum, note that
|
|
# set_fact outranks role defaults, so the CALCULATION has to honour this - a
|
|
# value pinned only in defaults/ is silently ignored.
|
|
bitcoin_dbcache_mb_override: 200
|
|
|
|
# --- DATUM Gateway ----------------------------------------------------------
|
|
# This node feeds block templates to datum_gateway on knots-box. These settings
|
|
# were hand-added to bitcoin.conf and were missing from the template, so a
|
|
# playbook run would have removed them and broken the mining setup.
|
|
bitcoin_datum_gateway_enabled: true
|
|
bitcoin_blockmaxsize: 3985000
|
|
bitcoin_blockmaxweight: 3985000
|
|
bitcoin_blocknotify: "killall -USR1 datum_gateway"
|
|
bitcoin_maxmempool: 1000
|
|
bitcoin_blockreconstructionextratxn: 1000000
|