💡 Делегатам: Установка и настройка резервных нод. Возможность обходиться без них не нарушая работу Голоса
В последнее время очень часто возникает проблема с нодами делегатов.
Только за последнюю неделю ноды упали как минимум у 5-ти разных пользователей из топ 19.
Причин и однозначного объяснения частых аварий озвучено не было, но мне кажется это обусловлено естественным ростом потребления ресурса блокчейном. Вместе с объемом и частотой операций растут и требования к аппаратной части.
Еще одной проблемой является неэффективное обращение с ключами подписи блоков. Ниже я предложу простейшие рекомендации и инструменты которые помогут вам сократить количество пропускаемых блоков и не нарушать ход работы сети.
Что делать если ваша нода перестала работать.
Ранее предполагалось, что активные делегаты осведомлены о необходимости менять ключи в случае аварий, однако практика показала, что такая возможность игнорируется.
Вы должны помнить из статьи wiki: Установка ноды Делегата, что для работы ноды используется пара ключей для подписи - публичный и приватный. Они действительно являются парой и генерируем мы их командой suggest_brain_key
. Этой командой можно генерировать любое количество пар, но подписывать блоки будет возможно только если приватный ключ будет указан в config.ini
а публичный будет объявлен в блокчейн командой update_witness
.
Если ваша нода аварийно прекратила работу или стала пропускать большее количество блоков, при этом у вас нет резервной и синхронизированной ноды - лучшим решением будет объявить командой update_witness публичный ключ несоответствующий приватному. Для этих целей предусмотрен общий ключ:
GLS1111111111111111111111111111111114T1Anm
Объявите его командой в cli_wallet :
update_witness "логин_делегата" "" GLS1111111111111111111111111111111114T1Anm {"account_creation_fee":"3.000 GOLOS", "maximum_block_size":65536, "sbd_interest_rate":1000} true
Вы перестанете пропускать блоки.
Если авария случилась внезапно и у вас нет возможности зайти на сервер - вы можете воспользоваться моей страницей - https://golos.cf/witnessupdate/ (она полностью "на клиенте", можно копировать html)
Так же я рекомендую https://www.termius.com/ - этот терминал доступен на всех платформах, в т.ч. Android/IOS - удобно в дороге
Мониторинг пропущенных блоков
Для удобства я разместил чатбота https://t.me/WitnessMonitor - он публикует пропущенные блоки делегатов.
Известные мне телеграм-логины делегатов упоминаются ботом, имена также дублируется хештегом для возможности поиска всех сообщений о пропуске.
Установка резервной backup ноды
Установка BackUp ноды может ничем не отличаться от установки основной wiki: Установка ноды Делегата
За исключением того, что вы не объявляете update_witness
сразу.
Но вы его можете объявить тогда, когда ваша другая нода испытывает проблемы.
Помните, что вы объявляете публичный ключ, который является парой приватного, этот приватный ключ в свою очередь прописан в config.ini
конкретной ноды.
Предположим у меня есть 3 (A, B, C)
сервера, на каждом установлена, запущена, синхронизирована и активна нода голоса.
Командой suggest_brain_key
я сгенерировал 3 пары ключей и прописал по одной приватной версии ключей в конфиге каждой ноды на каждом сервере.
Далее отправил транзакцию update_witness
в которой объявил один из 3 публичных ключей. Предположим публичный ключ, который является парой приватному на сервере A
Когда мой A
сервер начнет барахлить и терять блоки - я просто отправлю update_witness с публичным ключем сервера B
тем самым переключив задачу подписывать блоки на другую ноду. Далее можно починить и синхронизировать ноду на сервере А
и держать ее активной до поломки сервера B
и тогда снова переключить.
На резервных нодах вы будете видеть сообщения о том, что блок не подписан, поскольку публичный ключ не объявлен в блокчейн
На активной ноде вы будете видеть нормальный ход подписания блоков
Разумеется это можно автоматизировать. Простую функцию можно написать на любом удобном для вас стеке, от html формы с выпадающим списком ваших ключей, до сложного бота предвещающего беду на вашем сервере.
Пример запроса на golosjs/steemjs
var wif= "P5*******************",// Активный ключ
// Публичный ключ подписи
blockSigningKey= "GLS1111111111111111111111111111111114T1Anm",
witness= "логин_делегата",
url ="Ссылка_на_пост",
fee = "0.000 GOLOS",
props = {
account_creation_fee: "3.000 GOLOS",
maximum_block_size: 65536,
sbd_interest_rate: 1000
};
golos.broadcast.witnessUpdate(wif, witness, url, blockSigningKey, props, fee,
function(err, result) {
console.log(err,result)
});
Советы
- Используйте делегатскую ноду только для подписи блоков
- Отключите тяжелые плагины в конфиге -
account_history
,follow
и другие. Вам нужен только witness. - Если все же включаете доп. плагин - учтите, что для корректной работы потребуется делать длительный replay. Например если не включить
follow
- репутация о пользователе и другие api запросы работать не будут. При включении плагина - запросы станут работать, однако данные будут отдаваться устаревшие. И только после повторной синхронизации ноды вместе с новым плагином работа будет корректной. - Избегайте проблем с нехваткой места, как ОЗУ, так и диска. Поврежденный индекс блоков может потребовать повторной синхронизации с нуля.
Надеюсь статья будет полезна начинающим witness и вместе мы сможем сделать работу стабильнее.