nimbus-db-purge: add role to periodicall purge DB
https://github.com/status-im/infra-nimbus/issues/86 Signed-off-by: Jakub Sokołowski <jakub@status.im>
This commit is contained in:
parent
01e129694b
commit
a8b48242b0
|
@ -0,0 +1,38 @@
|
||||||
|
# Description
|
||||||
|
|
||||||
|
This role configures a Systemd timer that periodically purges the Nimbus node database to test the sync process. Optionally it can use the [trusted node sync](https://nimbus.guide/trusted-node-sync.html) functionality.
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
|
||||||
|
In order to purge database of `beacon-node-mainnet-stable` weekly and sync it from trusted node:
|
||||||
|
```yaml
|
||||||
|
nimbus_db_purge_node_service_name: 'beacon-node-mainnet-stable'
|
||||||
|
nimbus_db_purge_node_service_path: '/data/{{ nimbus_db_purge_node_service_name }}'
|
||||||
|
nimbus_db_purge_node_network_name: 'mainnet'
|
||||||
|
nimbus_db_purge_timer_frequency: 'weekly'
|
||||||
|
nimbus_db_purge_truster_node_api_url: 'http://localhost:9300'
|
||||||
|
nimbus_db_purge_trusted_node_sync_enabled: true
|
||||||
|
```
|
||||||
|
|
||||||
|
# Management
|
||||||
|
|
||||||
|
The Systemd timer can be managed with `systemctl`:
|
||||||
|
```
|
||||||
|
> sudo systemctl -o cat status purge-beacon-node-mainnet-stable
|
||||||
|
● purge-beacon-node-mainnet-stable.service - Purge beacon-node-mainnet-stable DB
|
||||||
|
Loaded: loaded (/etc/systemd/system/purge-beacon-node-mainnet-stable.service; enabled; vendor preset: enabled)
|
||||||
|
Active: inactive (dead) since Mon 2022-02-28 16:26:19 UTC; 4min 35s ago
|
||||||
|
TriggeredBy: ● purge-beacon-node-mainnet-stable.timer
|
||||||
|
Docs: https://github.com/status-im/infra-role-systemd-timer
|
||||||
|
Process: 1496098 ExecStart=/data/beacon-node-mainnet-stable/purge.sh (code=exited, status=0/SUCCESS)
|
||||||
|
Main PID: 1496098 (code=exited, status=0/SUCCESS)
|
||||||
|
|
||||||
|
NOT 2022-02-28 16:26:19.669+00:00 Database initialized, historical blocks will be backfilled when starting the node missingSlots=3270047
|
||||||
|
NOT 2022-02-28 16:26:19.669+00:00 Done, your beacon node is ready to serve you! Don't forget to check that you're on the canoncial chain by comparing the checkpoint root with other online sources. See https://nim>
|
||||||
|
>>> Starting node: beacon-node-mainnet-stable
|
||||||
|
nimbus : TTY=unknown ; PWD=/data/beacon-node-mainnet-stable ; USER=root ; COMMAND=/usr/bin/systemctl start beacon-node-mainnet-stable
|
||||||
|
pam_unix(sudo:session): session opened for user root by (uid=0)
|
||||||
|
pam_unix(sudo:session): session closed for user root
|
||||||
|
purge-beacon-node-mainnet-stable.service: Succeeded.
|
||||||
|
Finished Purge beacon-node-mainnet-stable DB.
|
||||||
|
```
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
#nimbus_db_purge_node_service_name: ~
|
||||||
|
#nimbus_db_purge_node_service_path: ~
|
||||||
|
#nimbus_db_purge_node_network_name: ~
|
||||||
|
nimbus_db_purge_trusted_node_sync_enabled: false
|
||||||
|
#nimbus_db_purge_trusted_node_api_url: 'http://localhost:1234'
|
||||||
|
|
||||||
|
nimbus_db_purge_timer_name: 'purge-{{ nimbus_db_purge_node_service_name }}'
|
||||||
|
nimbus_db_purge_timer_description: 'Purge {{ nimbus_db_purge_node_service_name }} DB'
|
||||||
|
nimbus_db_purge_timer_user: 'nimbus'
|
||||||
|
nimbus_db_purge_timer_group: 'staff'
|
||||||
|
nimbus_db_purge_timer_enabled: true
|
||||||
|
nimbus_db_purge_timer_timeout: 600
|
||||||
|
nimbus_db_purge_timer_frequency: 'weekly'
|
||||||
|
nimbus_db_purge_timer_script_path: '{{ nimbus_db_purge_node_service_path | mandatory }}/purge.sh'
|
|
@ -0,0 +1,24 @@
|
||||||
|
---
|
||||||
|
- name: Create purge and sync script
|
||||||
|
template:
|
||||||
|
src: 'purge_sync.sh.j2'
|
||||||
|
dest: '{{ nimbus_db_purge_timer_script_path }}'
|
||||||
|
owner: 'root'
|
||||||
|
group: 'staff'
|
||||||
|
mode: 0750
|
||||||
|
|
||||||
|
- name: Create timer for purge script
|
||||||
|
include_role: name=systemd-timer
|
||||||
|
vars:
|
||||||
|
systemd_timer_name: '{{ nimbus_db_purge_timer_name | mandatory }}'
|
||||||
|
systemd_timer_description: '{{ nimbus_db_purge_timer_description | mandatory }}'
|
||||||
|
systemd_timer_user: '{{ nimbus_db_purge_timer_user }}'
|
||||||
|
systemd_timer_group: '{{ nimbus_db_purge_timer_group }}'
|
||||||
|
systemd_timer_start_on_creation: false
|
||||||
|
systemd_timer_ionice_class: 'idle'
|
||||||
|
systemd_timer_consul_warning: true
|
||||||
|
systemd_timer_enabled: '{{ nimbus_db_purge_timer_enabled }}'
|
||||||
|
systemd_timer_frequency: '{{ nimbus_db_purge_timer_frequency }}'
|
||||||
|
systemd_timer_timeout_sec: '{{ nimbus_db_purge_timer_timeout }}'
|
||||||
|
systemd_timer_work_dir: '{{ nimbus_db_purge_node_service_path }}'
|
||||||
|
systemd_timer_script_path: '{{ nimbus_db_purge_timer_script_path }}'
|
|
@ -0,0 +1,27 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# vim:ft=sh
|
||||||
|
set -Eeuo pipefail
|
||||||
|
|
||||||
|
TRUSTED_NODE_API_URL='{{ nimbus_db_purge_trusted_node_api_url | mandatory }}'
|
||||||
|
SERVICE_NAME='{{ nimbus_db_purge_node_service_name | mandatory }}'
|
||||||
|
SERVICE_PATH='{{ nimbus_db_purge_node_service_path | mandatory }}'
|
||||||
|
NETWORK_NAME='{{ nimbus_db_purge_node_network_name | mandatory }}'
|
||||||
|
SERVICE_DATA_PATH="${SERVICE_PATH}/data/shared_${NETWORK_NAME}_0/"
|
||||||
|
|
||||||
|
echo "Stopping node: ${SERVICE_NAME}"
|
||||||
|
sudo systemctl stop "${SERVICE_NAME}"
|
||||||
|
|
||||||
|
echo "Purging DB: ${SERVICE_DATA_PATH}"
|
||||||
|
sudo rm -fr "${SERVICE_DATA_PATH}/db"
|
||||||
|
|
||||||
|
{% if
|
||||||
|
echo "Syncing from trusted node: ${TRUSTED_NODE_API_URL}"
|
||||||
|
sudo -u nimbus "${SERVICE_PATH}/repo/build/nimbus_beacon_node" \
|
||||||
|
trustedNodeSync \
|
||||||
|
--data-dir="${SERVICE_DATA_PATH}" \
|
||||||
|
--trusted-node-url="${TRUSTED_NODE_API_URL}" \
|
||||||
|
--network="${NETWORK_NAME}" \
|
||||||
|
--backfill=false
|
||||||
|
|
||||||
|
echo "Starting node: ${SERVICE_NAME}"
|
||||||
|
sudo systemctl start "${SERVICE_NAME}"
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# vim:ft=sh
|
||||||
|
set -Eeuo pipefail
|
||||||
|
|
||||||
|
SERVICE_NAME='{{ nimbus_db_purge_node_service_name | mandatory }}'
|
||||||
|
SERVICE_PATH='{{ nimbus_db_purge_node_service_path | mandatory }}'
|
||||||
|
NETWORK_NAME='{{ nimbus_db_purge_node_network_name | mandatory }}'
|
||||||
|
SERVICE_DATA_PATH="${SERVICE_PATH}/data/shared_${NETWORK_NAME}_0/"
|
||||||
|
|
||||||
|
echo " >>> Stopping node: ${SERVICE_NAME}"
|
||||||
|
sudo systemctl stop "${SERVICE_NAME}"
|
||||||
|
|
||||||
|
echo " >>> Purging DB: ${SERVICE_DATA_PATH}"
|
||||||
|
rm -fr "${SERVICE_DATA_PATH}/db"
|
||||||
|
|
||||||
|
{% if nimbus_db_purge_trusted_node_sync_enabled %}
|
||||||
|
TRUSTED_NODE_API_URL='{{ nimbus_db_purge_truster_node_api_url | mandatory }}'
|
||||||
|
echo " >>> Syncing from trusted node: ${TRUSTED_NODE_API_URL}"
|
||||||
|
"${SERVICE_PATH}/repo/build/nimbus_beacon_node" \
|
||||||
|
trustedNodeSync \
|
||||||
|
--data-dir="${SERVICE_DATA_PATH}" \
|
||||||
|
--trusted-node-url="${TRUSTED_NODE_API_URL}" \
|
||||||
|
--network="${NETWORK_NAME}" \
|
||||||
|
--backfill=false
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
echo " >>> Starting node: ${SERVICE_NAME}"
|
||||||
|
sudo systemctl start "${SERVICE_NAME}"
|
Loading…
Reference in New Issue