Сделал скрипт для backup-сервера активных делегатов


ВНИМАНИЕ! # Поссле 7 дне ттестов словил несколько missed-блоков и оказал# По этой инструкции не делайте, буду искать альтернативось, что при определенном стечении обстоятельств, схема может не омент, когда наст понял, скрипт сработал как раз в тот момент, кгда настала моя очередь генерации блока. И что-то пошло не так.

Если следить за очередью и менять ноду в безопасное время, то всё пройдет успешно.

дача

Необходимо, чтоб backup-сервер следил за появлением новых missed-блоков вашего делегата. Если появляется missed-блок, то backup-сервер автоматически переключает генерацию на себя.

Проверка теорииПосле успешного эксперимента и консультации с @litvintech, оказалось, что схема рабочая. Осталось автоматизировать.

Подготвка backup-сервера

Для парсинга json-ответов от API в скрипте используется утилита jq. Устанавливаем командой:
sudo apt-get install jq

Запускаем golosd. После синхронизации с сетью запускаем cli_wallet и импортируем приватный ACTIVE ключ вашего аккаунта.

После этого генерерируем новый набор ключей помощью команды suggest_brain_key.

В config.ini вколачиваемем `
rpc-endpoint=127.0.0.1:9090
witness "nickname"
private-key = private_brain_key


Перезапускаем gм golosd командой:```./golosd --replay-blockchain```

cli_wallзапускаем со следующими параметрами:
```./cli_wallet --server-rpc-endpoint="ws://127.0.0.1:9090" --rpc-http-endpoint 127.0.0.1:8093 --rpc-http-allowip 127.0.0.1```

В результате у вас получится нода, которая постоянно выдает
```Not producing block for nickname because I don't have the private key for GLS6rfMKdTTd...```

Так и должно быть. Т.к. вы сгенерировали новые brain ключи. Теперь, если в cli_wallet выполнить команду

```update_witness ...```

с новым публичным brain ключем, то генерация блоков переключится на этот сервер.

Я решил автоматизировать этот процесс и написать скрипт, который сам будет следить за увеличением missed-блоков и выполнять команду update_witness.

# Подготовка скрипта
Скачать скрипт можно из github.

Но прежде чем его запускать, отредактируйте значения переменных.

cli_wallet --rpc-http-endpoint url

WALLET=http://127.0.0.1:8093

cli_wallet unlock password

PASSWORD="PASSWORD"

update_witness params:

NICKNAME="xtar" #your witness nickname
BACKUPKEY="PUBKEY" # backup server brain pub_key
URL="/ru--delegaty/@xtar/kandidat-delegat-xtar-razrabotchik-steemul-ru" # post url
FEE="3.000 GOLOS" # account_creation_fee
BLOCKSIZE=65536 # maximum_block_size
RATE=1000 # sbd_interest_rate



Теперь, когда все переменные вы заполнили, можете выполнить скрипт командой

```chmod +x check.sh && ./check.sh```

# Алгоритм работы
Выполнение скрипта необходимо засунуть в crontab для ежеминутного выполненполнения. Для этого в файл /etc/crontab добавляем строку:

```* *  u* *    /patsh/check.sh```

+ скрипт подключается к API cli_wallet
+ если кошелек заблокирован - разблокирует паролем, указанным в переменной PASSWORD
+ смотрит (командой get_witness nickname) текущее количество missed-блоков вашего делегата и записывает в файл
+ после повторного запуска скрипт сравнивает старое и новое количество missed-блоков
+ если количество missed-блоков изменилось, то выполняет команду update_witness с параметрами из переменных.
+ тем самым, если все переменные заполнены верно, скрипт переключает генерацию блоков на backup-сервер.

# Вопросы, предложения?
Вопросы и свежие идеи приветствуются в комментариях!

---

Если вы готовы поддержать новые мои разработки (идей много), поддержите моего делегата, ник @xtar вот тут /~witnesses . 

Заранее благодарю! =)

Comments 3


Интересное решение! :) спасибо!
тестировал?

26.10.2016 21:08
0

Должно сработать, так скажем) Тестировал частями, все части отрабатывают как положено. Но спецом missed не делал пока. Может завтра пожертвую статистикой и проверю в боевых условиях, так сказать.

26.10.2016 21:16
0

Сегодня попробую у себя на резервном сервере настроить =)
Что можно добавить? Некий вызов-нотификацию что-бы сообщить о том произошло переключение - например в телеграмм или емейл или просто вызовом какого-либо url.
Продуманна ли логика после первого переключения? Скрипт по идее должен еще отслеживать (если еще не) не его ли ключ сейчас активен и если активен его - ничего не делать (только увеличивать счетчик миссед), но писать это в выводе.

27.10.2016 03:42
0

Теперь, если в cli_wallet выполнить команду
update_witness ...
с новым публичным brain ключем, то генерация блоков переключится на этот сервер

Ты не уточнил какова вероятность того, что в момент переноса обе ноды найдут один блок одновременно? чисто теоретически...

27.10.2016 12:16
0

@litvintech схему вроде одобрил.

27.10.2016 12:20
0

Но все же если есть хотя бы одна десятитысячная доля такого исхода, я бы хотел знать)

27.10.2016 12:42
0