メインコンテンツまでスキップ

状態データベース

routerd は観測状態と所有台帳を 1 つの SQLite ファイルに持ちます。このページでは 実用的なクエリと、ファイルの置き場所を扱います。

パス

OS既定
Linux/var/lib/routerd/routerd.db
FreeBSD/var/db/routerd/routerd.db

routerd applyrouterd serve--state-dir を渡すと、その配下に置かれます。

テーブル

テーブル役割
generationsapply 1 周ごとに 1 行: idcreated_atconfig_hashoutcome、警告 JSON
objects1 リソース 1 行: api_versionkindnamestatus JSON
artifacts所有台帳。routerd が所有するホスト側成果物ごとに 1 行
eventsapply 中に記録すべき観測
access_logs将来のコントロール API 監査用に予約

概念的な対応は k8s 流です。objects ≒ Kubernetes の status 付きオブジェクト、 artifacts ≒ owner reference、events ≒ Kubernetes events。

よくあるクエリ

PD が把握しているプレフィックス

sqlite3 /var/lib/routerd/routerd.db <<'SQL'
select json_extract(status, '$.currentPrefix') as current,
json_extract(status, '$.lastPrefix') as last,
json_extract(status, '$.lastObservedAt') as observed_at
from objects
where kind = 'IPv6PrefixDelegation';
SQL

直近のイベント

sqlite3 /var/lib/routerd/routerd.db \
"select created_at, type, reason, message
from events
order by id desc limit 30;"

routerd が所有しているもの

sqlite3 /var/lib/routerd/routerd.db \
"select kind, name, owner_kind, owner_name
from artifacts
order by kind, name;"

直近の apply

sqlite3 /var/lib/routerd/routerd.db \
"select id, created_at, config_hash, outcome
from generations
order by id desc limit 5;"

routerctl 経由の確認

日々の確認はまず routerctl を使うのが楽です。

routerctl get
routerctl describe ipv6pd/wan-pd
routerctl show inventory/host -o yaml

これらはデーモンのローカルソケット経由で同じ DB を読みますが、型付き API です。 CLI が出していない横断クエリが必要なときに SQLite シェルを使ってください。

バックアップと移行

DB は通常の SQLite ファイルです。routerd が動いた状態でバックアップするには:

sqlite3 /var/lib/routerd/routerd.db ".backup /tmp/routerd-backup.db"

ルーターホストを移行するときは YAML と一緒にこの DB をコピーしてください。 routerd は次回起動時にスキーマ差分を検出し、新バイナリが forward migration を 含んでいればその場で移行します。

DB を触らない方がよいとき

  • apply が走っている最中 (writer と競合します)
  • 「古そうなプレフィックス」「古そうな所有行」を手で「直す」目的。次の apply で ホスト状態を読み直して reconcile します。台帳を手で編集すると、routerd が 自分の所有物を見つけられなくなる恐れがあります。

本当に状態をリセットしたい場合は、デーモンを止めてファイルを別名退避し、 次の apply で YAML から再構築させてください。台帳が失われたホスト側成果物は routerd が回収しません。必要なら手で消す覚悟で行ってください。