В последнее время очень часто возникает проблема с нодами делегатов.
Только за последнюю неделю ноды упали как минимум у 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 и вместе мы сможем сделать работу стабильнее.
ХЗ в чём дело, но явно не в ресурсах. У меня новый сервер 128 Gb оперативки и шустрый рейд на SSD и он падает периодически.
Точнее не падает, а зависает, отказываясь принимать новые блоки.
Я его как раз на замену своей основной ноде взял, где была мысль что блоки пропускаются из-за слабого железа. Сейчас гоняю в тесте и вижу что причина в софте, не железе.
До ХФ никто уже со стабильностью кода разбираться не будет.
Да явно не из за ресурсов у меня падало на совершено разных по ресурсам серверах - как правило просто продолжает как бы подписывать блоки, но не принимает - уйдя видимо в форк - при остановке не выходит, а падает по core dumped.
И да на блоки из форков все время ругается при "нормальной работе"
Причина в софте вполне может быть.
Плюс у нас есть такой атавизм как майнинг.
И судя по логам еще цепь часто форкается, возможно кто-то просто собирает неправильную версию нод.
В вики до сих пор старый гайд с
tags/v0.14.2
https://wiki.golos.io/3-guides/ubuntu_guide.html
Вики поправил. Спасибо, @vik
Форкается вообще жёстко, вот прям сейчас лог смотрю:
th_a database.cpp:3641 update_last_irrevers ] Encountered a block num collision due to a fork. Walking the current fork to determine the correct block. block_num:10536348
th_a database.cpp:3641 update_last_irrevers ] Encountered a block num collision due to a fork. Walking the current fork to determine the correct block. block_num:10536358
th_a database.cpp:3641 update_last_irrevers ] Encountered a block num collision due to a fork. Walking the current fork to determine the correct block. block_num:10536474
th_a database.cpp:3641 update_last_irrevers ] Encountered a block num collision due to a fork. Walking the current fork to determine the correct block. block_num:10536551
th_a database.cpp:3641 update_last_irrevers ] Encountered a block num collision due to a fork. Walking the current fork to determine the correct block. block_num:10536627
По десятку (и больше) форков в час.
Но это вряд ли майнеры - их вообще пара-тройка человек кто смог пропатчить код (официальный код с майнингом не работает) и запустил комбайн. Т.е. майнер прошареные ребята.
И падения нод в любом случае не из-за этих форков, имхо.
@vik, Поздравляю!
Ваш пост был упомянут в моем хит-параде в следующей категории:
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
yefet, litrbooh, littleboo, t3ran13, ianboil, francisgrey, neo, chiliec, mir, fetta, andrvik, archibald116, oleg257, larissa, dreamer, dimarss, vik, shuler, brovaryleaks, vadbars, rusalka, maksina, dr-boo, arsar, vasilisapor2, nefer, tom123, borodaus, renat242, singa, semasping, romapush, lira, tnam0rken, karusel1, arystarch, snaryaga, ruta, asuleymanov, yudina-cat, boltyn, polyakov, acidgarry, newodin, oksana0407, vika-teplo, nims55, optimist, varya-davydova, bammbuss, mryabinin, prost, talia, wrong, bombo, manavendra, mr-nikola, dimk0, ermakovaolga, kertar, techofox, dimas102, alexandr-11, zhann, dim447, igrinov, ssleeperr, ieshua, vealis, mp42b, foxycat, wedge, tatdt, chimborazo, chugoi, dunsky, galinakim, gbot, zir0chka, shafarevich, kanalex, verdon, wictor19882017, sansey, yakubovruslan, goldenriver, solips, makcl, alexko, funt33
Поэтому я тоже проголосовал за него!
dobryj.kit теперь стал Делегатом! Ваш голос важен для всего сообщества!!!
Поддержите нас на странице https://golos.io/~witnesses, вот так:
А что за блок-сайз такой? На какой-то страница, вродь с делегатами, помню разные сайзы были
Это правильный :) Посмотрите на страницу делегатов стима, там все аккуратно. Даже при их объемах они все ещё используют 65k
Нет никакого смысла использовать больший размер. Тем более, когда ноды не настроены даже на 65 :)
Ясненько, спасибо)