Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
vik
6 лет назад

💡 Делегатам: Установка и настройка резервных нод. Возможность обходиться без них не нарушая работу Голоса

В последнее время очень часто возникает проблема с нодами делегатов.
Только за последнюю неделю ноды упали как минимум у 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 и тогда снова переключить.

На резервных нодах вы будете видеть сообщения о том, что блок не подписан, поскольку публичный ключ не объявлен в блокчейн
2.JPG

На активной ноде вы будете видеть нормальный ход подписания блоков

Разумеется это можно автоматизировать. Простую функцию можно написать на любом удобном для вас стеке, от 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 и вместе мы сможем сделать работу стабильнее.

15
616.996 GOLOS
На Golos с January 2017
Комментарии (10)
Сортировать по:
Сначала старые