8.4 KiB
Agave Sync Recipe
Data: 2026-03-13 Aktualizacja: 2026-03-15
Ten plik opisuje praktyczna recepture rozruchu Agave na
mevnode_sol w dwoch trybach:
catch-up mode: celem jest dogonienie sieciproduct mode: celem jest obsluga workloadow RPC i Yellowstone dla reszty systemu
Plik sterujacy
Aktualny start validatora jest skladany przez:
/usr/local/bin/agave-validator.sh
Usluga systemd:
agave-validator.service
Catch-up Mode
Stan wdrozony na mevnode_sol 2026-03-15 podczas
przejscia na Agave 3.1.9.
Cel:
- maksymalnie odchudzic runtime podczas syncu
- nie wystawiac Yellowstone
- nie budowac ciezkiego profilu RPC
Wlaczone:
--private-rpc--rpc-bind-address 127.0.0.1--rpc-port 8899--accounts-db-cache-limit-mb 32768--no-voting--limit-ledger-size 50000000--minimal-snapshot-download-speed 25000000--maximum-snapshot-download-abort 8--use-snapshot-archives-at-startup always--known-validator 7mF8NZJdREuM1uwYcvKffuY9QJBEoHhNp4hZ4NS2fuXW--only-known-rpc- dodatkowy
--entrypoint 51.89.11.213:8001dla Frankfurtu
Wylaczone:
--geyser-plugin-config /etc/agave/geyser.json--full-rpc-api--enable-accounts-disk-index--accounts-index-path /data/ledger/accounts_index--account-index ...
Wazne:
--accounts-index-pathnie moze zostac, jesli--enable-accounts-disk-indexjest wylaczone- zostawienie samego
--accounts-index-pathpowoduje start failure Agave
Product Mode
To jest profil po pelnym syncu, kiedy node ma znowu obslugiwac reszte systemu. Stan finalny z 2026-03-15:
Wlaczone:
--geyser-plugin-config /etc/agave/geyser.json--full-rpc-api--enable-accounts-disk-index--accounts-db-cache-limit-mb 32768--maximum-full-snapshots-to-retain 1--maximum-incremental-snapshots-to-retain 1--use-snapshot-archives-at-startup when-newest--known-validator 7mF8NZJdREuM1uwYcvKffuY9QJBEoHhNp4hZ4NS2fuXW--only-known-rpc
Cel:
- Yellowstone dla
mevnode_bot - ciezsze metody RPC
- nizszy swap niz przy czysto pamieciowym accounts index
Uwaga:
- w aktualnym wdrozeniu nie ma
--accounts-index-path - w aktualnym wdrozeniu nie ma
--account-index program-id - samo
--enable-accounts-disk-indexzmniejsza presje na swap, ale nie przyspiesza ciezkichgetProgramAccounts - retencja snapshotow
1/1nie jest tutaj opcjonalna; to jest kluczowy bezpiecznik operacyjny
Dlaczego retencja
1/1 jest krytyczna
Na mevnode_sol katalog /data/state jest
jednym filesystemem 2 TB, na ktorym siedza
jednoczesnie:
accountsaccounts disk index- archiwa snapshotow
- tymczasowe
tmp-snapshot-archive-*
Przy profilu:
--full-rpc-api--enable-accounts-disk-index--geyser-plugin-config /etc/agave/geyser.json
sam katalog accounts potrafi zajmowac ponad
1 TB, a snapshoty i pliki tymczasowe potrafia dopchnac
/data/state do 100%.
Wniosek praktyczny:
--maximum-full-snapshots-to-retain 1--maximum-incremental-snapshots-to-retain 1
to nie jest tylko "porzadek na dysku", tylko warunek utrzymania zapasu miejsca na:
- prace
accounts disk index - tworzenie nowego snapshotu
- restart z lokalnego full + incremental
Bez tego Agave moze dojsc do ENOSPC, przestac odpowiadac
po RPC albo wymusic awaryjny cleanup przed restartem.
Dlaczego nie 8 GB
W tej sesji nie bylo twardych danych, ze samo 8 GB
rozwiazuje problem. Przy 32 GB host nie byl pod presja
pamieci:
- RAM hosta: okolo
186 GiB - available memory: okolo
143 GiB - swap praktycznie nieuzywany
Problem wygladal bardziej na zbyt ciezki profil catch-up niz na brak RAM.
Obserwacje z 2026-03-13
Przed przelaczeniem na catch-up mode:
geyserbyl wylaczony- nadal wlaczone byly
--full-rpc-apii--enable-accounts-disk-index - node nie nadganial heada; lokalny slot rosl wolniej niz publiczny mainnet
Po przelaczeniu na catch-up mode:
- Agave wystartowalo poprawnie bez
full-rpc-api - Agave wystartowalo poprawnie bez
accounts-disk-index - aktywny proces nie ma juz
geyser,full-rpc-apianiaccounts-disk-index
Kolejnosc wdrozenia z 2026-03-15
Poniżej jest praktyczna kolejnosc, ktora byla wykonana na
mevnode_sol.
- Zatrzymac usluge:
sudo systemctl stop agave-validator.service- Wyczyscic
ledgeristate:
sudo rm -rf /data/ledger/*
sudo rm -rf /data/state/*- Zbudowac i podmienic Agave na
3.1.9:
- build z taga
v3.1.9 - instalacja do
/opt/agave-v3.1.9 - przelaczenie
/opt/agave -> /opt/agave-v3.1.9
- Wystartowac lekki
catch-up mode:
- bez
geyser - bez
--full-rpc-api - bez
--enable-accounts-disk-index - bez
--accounts-index-path - z
--use-snapshot-archives-at-startup always
- Wymusic szybki source snapshotu z Frankfurtu:
--known-validator 7mF8NZJdREuM1uwYcvKffuY9QJBEoHhNp4hZ4NS2fuXW--only-known-rpc--entrypoint 51.89.11.213:8001
Poczekac az
catch-up modedojdzie dogetHealth=ok.Zmienic startup snapshotow z
alwaysnawhen-newest.
Powod:
- przy
alwayskazdy restart wymuszal ladowanie z archive when-newestzostawia Agave mozliwosc uzycia nowszego archive, ale nie wymusza tej sciezki przy kazdym restarcie
Wlaczyc
--full-rpc-apii zrestartowac.Po ponownym syncu wlaczyc
--enable-accounts-disk-indexi zrestartowac.
Powod:
- przy
full-rpcbezaccounts-disk-indexswap byl praktycznie zapychany - po wlaczeniu
accounts-disk-indexswap spadl prawie do zera
- Po kolejnym syncu wlaczyc
geyser.
Praktycznie:
- dopiac
--geyser-plugin-config /etc/agave/geyser.json - upewnic sie, ze
libpathz configu istnieje - na
mevnode_soltrzeba bylo utworzyc symlink:
sudo mkdir -p /opt/agave/plugins
sudo ln -sfn /opt/agave.live-3.1.10-20260314-0903/plugins/v12.1.0+solana.3.1.10 /opt/agave/plugins/current- Po wlaczeniu geysera zweryfikowac:
10.91.0.1:10000nasluchuje10.91.0.1:8999/metricsodpowiada- w logu jest:
Geyser plugin: accounts_update_notifier: true, transaction_notifier: true, entry_notifier: true
- Na koncu ustawic retencje snapshotow:
--maximum-full-snapshots-to-retain 1--maximum-incremental-snapshots-to-retain 1
Cel:
- ograniczyc wzrost
/data/state/snapshots - zostawic minimalny zestaw do restartu
- nie dopuscic do zapchania
2 TB/data/state, na ktorym siedza tezaccountsiaccounts disk index
- Po syncu usuwac tylko stare snapshoty, nie ruszajac:
- aktualnego full snapshotu
- najnowszego ukonczonego incremental
- aktywnego
tmp-snapshot-archive-*
To byl praktyczny cleanup, ktory odzyskal kilkaset GB, bez psucia restart path.
Jak sprawdzac stan
Jednym poleceniem snapshot kluczowych metryk:
./scripts/ops/agave-metrics.sh mevnodeSkrypt zbiera:
- health RPC i lokalny slot
- publiczny head i
lag_slots - porty
8899/8999/10000 rss_mb,pcpu,pmemmem_available_mb,swap_used_mbvm_us,vm_sy,vm_id,vm_wa- ostatnie
rcvbuf_errors_delta_recent
Status uslugi:
ssh mevnode 'systemctl --no-pager --full status agave-validator.service | sed -n "1,20p"'Czy Yellowstone jest wylaczony:
ssh mevnode 'ss -ltnp | grep -E ":(8899|10000|8999)\\b" || true'Szybki health:
ssh mevnode "printf '%s' '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"getHealth\"}' | curl -sS -H 'Content-Type: application/json' -d @- http://10.91.0.1:8899"Pomiar, czy node nadgania:
ssh mevnode 'for i in 1 2 3; do ts=$(date +%s); pjson=$(printf "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"getSlot\",\"params\":[{\"commitment\":\"processed\"}]}" ); pubjson=$(printf "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"getSlot\"}" ); p=$(curl -sS -m 6 -H "Content-Type: application/json" -d "$pjson" http://10.91.0.1:8899 | sed -n "s/.*\"result\":\\([0-9][0-9]*\\).*/\\1/p"); pub=$(curl -sS -m 6 -H "Content-Type: application/json" -d "$pubjson" https://api.mainnet-beta.solana.com | sed -n "s/.*\"result\":\\([0-9][0-9]*\\).*/\\1/p"); echo "$ts $p $pub"; sleep 10; done'Interpretacja:
- jesli lokalny
processedrosnie szybciej niz publiczny head, node nadgania - jesli lokalny
processedrosnie wolniej, lag dalej narasta
Re-enable Po Sync
Nie wlaczac wszystkiego naraz.
Kolejnosc rekomendowana:
--full-rpc-api--enable-accounts-disk-index--geyser-plugin-config /etc/agave/geyser.json- retencja snapshotow
1/1
Po kazdym etapie:
- restart
agave-validator.service - poczekac na
getHealth=ok - dopiero potem przechodzic do nastepnego etapu