190 lines
5.2 KiB
Markdown
190 lines
5.2 KiB
Markdown
## Setup blockchain backup on a node
|
|
1. connect to the node as `root`.
|
|
|
|
2. clone this repository to `root`'s home folder:
|
|
```
|
|
git clone https://github.com/poanetwork/poa-devops.git
|
|
cd poa-devops
|
|
```
|
|
|
|
3. make sure `python` (v2.6+ or v3.5+) is installed on the node.
|
|
|
|
4. install `pip` and/or upgrade it to the newest version:
|
|
```
|
|
apt-get install python-pip
|
|
pip install --upgrade pip
|
|
```
|
|
|
|
5. upgrade `setuptools` to the newest version:
|
|
```
|
|
pip install --upgrade setuptools
|
|
```
|
|
|
|
6. install `boto` and `boto3` packages:
|
|
```
|
|
pip install boto boto3
|
|
```
|
|
|
|
7. install `ansible`:
|
|
```
|
|
pip install ansible
|
|
```
|
|
|
|
8. create `group_vars/backup` file:
|
|
```
|
|
cp group_vars/backup.example group_vars/backup
|
|
```
|
|
and set the following variables:
|
|
* `poa_role` - node's role (one of `bootnode`, `validator`, `moc`, `explorer`, `netstat`)
|
|
* `backup_parity_data` - `true`/`false` - backup whole `parity_data` folder "as is" or not (default: `true`)
|
|
* `backup_parity_blocks` - `true`/`false` - use or not `parity export blocks` to create a file with exported blocks and backup it (default: `true`)
|
|
* `access_key` - s3 access key
|
|
* `secret_key` - s3 secret key
|
|
* `s3_bucket` - s3 bucket name
|
|
* `node_name` - short descriptive name of the node (e.g. `sokol-arche`). It will be used as part of a backup file name, so it must be lowercase, must not contain spaces, commas, etc
|
|
|
|
9. create `hosts` file:
|
|
```
|
|
touch hosts
|
|
```
|
|
and set it to run `backup` on localhost:
|
|
```
|
|
[backup]
|
|
localhost
|
|
```
|
|
|
|
10. run playbook (still, do this on the node)
|
|
```
|
|
ansible-playbook -i hosts -c local site.yml
|
|
```
|
|
|
|
11. if all is well, setup a cronjob to run every hour:
|
|
```
|
|
crontab -e
|
|
```
|
|
append the following line:
|
|
```
|
|
30 * * * * /bin/bash /root/poa-devops/bkp-blockchain-cron.sh
|
|
```
|
|
|
|
12. configure logrotate to archive old log files. Create file `/etc/cron.hourly/poa-devops-logrotate` with the following content:
|
|
```
|
|
#!/bin/bash
|
|
/usr/sbin/logrotate /root/poa-devops/bkp-blockchain-logrotate.conf
|
|
```
|
|
and set permission to run it:
|
|
```
|
|
chmod 755 /etc/cron.hourly/poa-devops-logrotate
|
|
```
|
|
|
|
## How to restore from the backup
|
|
|
|
### Restore from `parity_data`
|
|
_Must be done under `root` account_
|
|
|
|
0. place backup file to the user's home directory, e.g. `/home/bootnode` (or `/home/moc`, etc)
|
|
|
|
1. stop netstats (if it's installed) and parity
|
|
```
|
|
# may fail if netstats is not installed, ignore it then:
|
|
systemctl stop poa-netstats
|
|
systemctl stop poa-parity
|
|
```
|
|
|
|
2. backup your current `parity_data`
|
|
```
|
|
# replace bootnode with other role's name if necessary (e.g. moc, validator, etc)
|
|
cd /home/bootnode
|
|
mv parity_data parity_data.bkp.$(date -u +%Y%m%d-%H%M%S)
|
|
```
|
|
|
|
3. unpack `parity_data` folder from backup
|
|
```
|
|
# exact filename will be different
|
|
tar -xzf 20180127-134045-bootnode-sokol-archive-parity_data.tar.gz
|
|
```
|
|
|
|
4. make sure that `bootnode` (or `moc`, etc) is owner of the unpacked directory
|
|
```
|
|
ls -lh
|
|
```
|
|
check owner of the `parity_data`, if it's another user, run
|
|
```
|
|
# replace bootnode with correct user name if necessary (e.g. moc, validator, etc)
|
|
chown -R bootnode:bootnode parity_data
|
|
```
|
|
|
|
5. restart parity and netstats (if it's installed)
|
|
```
|
|
systemctl start poa-parity
|
|
# unnecessary if netstats is not installed:
|
|
systemctl start poa-netstats
|
|
```
|
|
|
|
6. open `NETSTATS_URL` in your browser to see if node is up and accepts blocks. If not, explore parity logs in `/home/bootnode/logs/parity.log` or try to start parity manually to see if it fails at startup:
|
|
```
|
|
# assuming you're still in home folder
|
|
./parity --config node.toml
|
|
```
|
|
|
|
### Restore from `parity_blocks`
|
|
Parity docs: https://github.com/paritytech/parity/wiki/FAQ:-Backup,-Restore,-and-Files#how-do-i-backup-my-blockchain
|
|
|
|
_Must_ be done under `root` account_
|
|
|
|
0. place backup file to the user's home directory, e.g. `/home/bootnode` (or `/home/moc`, etc)
|
|
|
|
1. stop netstats (if it's installed) and parity
|
|
```
|
|
# may fail if netstats is not installed, ignore it then:
|
|
systemctl stop poa-netstats
|
|
systemctl stop poa-parity
|
|
```
|
|
|
|
2. backup your current `parity_data`
|
|
```
|
|
# replace bootnode with other role's name if necessary (e.g. moc, validator, etc)
|
|
cd /home/bootnode
|
|
cp -a parity_data parity_data.bkp.$(date -u +%Y%m%d-%H%M%S)
|
|
```
|
|
|
|
3. remove current chain
|
|
```
|
|
rm -rf parity_data/cache parity_data/chains
|
|
```
|
|
|
|
4. unpack `parity_blocks.rlp` file from backup
|
|
```
|
|
# exact filename will be different
|
|
gunzip 20180127-134045-bootnode-sokol-archive-parity_blocks.rlp.gz
|
|
```
|
|
|
|
5. import blocks from backup
|
|
```
|
|
./parity --config node.toml import 20180127-134045-bootnode-sokol-archive-parity_blocks.rlp
|
|
```
|
|
|
|
6. make sure that `bootnode` (or `moc`, etc) is owner of `parity_data` and all its subfolders, most importantly newly created `parity_data/cache` and `parity_data/chains`
|
|
```
|
|
ls -lh
|
|
ls -lh parity_data
|
|
```
|
|
if owner is another user, run
|
|
```
|
|
# replace bootnode with correct user name if necessary (e.g. moc, validator, etc)
|
|
chown -R bootnode:bootnode parity_data
|
|
```
|
|
|
|
7. restart parity and netstats (if it's installed)
|
|
```
|
|
systemctl start poa-parity
|
|
# unnecessary if netstats is not installed:
|
|
systemctl start poa-netstats
|
|
```
|
|
|
|
8. open `NETSTATS_URL` in your browser to see if node is up and accepts blocks. If not, explore parity logs in `/home/bootnode/logs/parity.log` or try to start parity manually to see if it fails at startup:
|
|
```
|
|
# assuming you're still in home folder
|
|
./parity --config node.toml
|
|
```
|