Несколько Tendermint нод на одном сервере
⠀О том, как можно запустить несколько нод, использующих Tendermint (например OmniFlix, Stratos, Findora и пр.), написано в этой статье.
Содержание
Кратко о Tendermint
⠀Tendermint — это алгоритм консенсуса, устойчивый к злоумышленным действиям. Алгоритм был придуман в 2014 году Джае Квоном, который был озабочен проблемой высокого энергопотребления сети Bitcoin’а. В отличие от Nakamoto консенсуса, где выбирается цепочка с наибольшей совокупностью сложности, в Tendermint выбирается цепочка, где за блок проголосовало 2/3 участников сети.
- Прост в понимании;
- Довольно быстрый;
- Блок не может быть отменен после того, как 2/3 проголосовало и подтвердило его.
- Если нода, которая должна создать блок, его не создает, то необходимо подождать некоторое время до начала нового раунда;
- Алгоритм плохо масштабируется так как за каждый блок должно проголосовать 2/3 сети.
Решение конфликта
⠀Для решения проблемы необходимо изменить используемые порты в конфиге
Автоматическое
⠀Подойдёт, если на сервере стоит 2 ноды
1) Перейти в директорию с файлом config.toml
или изменить путь файла в команде и использовать её
sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:26653\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:26652\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6061\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:26651\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":26655\"%" config.toml sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9092\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9093\"%" app.toml
2) Перезапустить ноду командой
sudo systemctl restart SERVICE_FILE_NAME
Ручное
1) Найти файл config.toml
нужной ноды (обычно находится в директории DIR_WITH_NODE/config/
)
2) Открыть его с помощью текстового редактора и найти строки, показанные ниже
И строку pprof_laddr = "localhost:6060"
3) Заменить порты, чтобы не было пересечения со стандартным конфигом
Например: 26658 -> 26653 26657 -> 26652 6060 -> 6061 26656 -> 26651 26660 -> 26655
5) Найти файл app.toml
(обычно находится в директории DIR_WITH_NODE/config/
)
6) Открыть его с помощью текстового редактора и найти строки, показанные ниже
7) Заменить порты, чтобы не было пересечения со стандартным конфигом
Например: 9090 -> 9092 9091 -> 9093
9) Перезапустить ноду командой
sudo systemctl restart SERVICE_FILE_NAME
Небольшие трудности
⠀Поскольку TCP адрес был изменён, в некоторых командах, например, в команде для просмотра статуса ноды, необходимо явно указывать изменённый TCP адрес через флаг --node
, иначе произойдёт взаимодействие с нодой со стандартным конфигом (по умолчанию команда использует --node "tcp://127.0.0.1:26657"
).
omniflixhubd status 2>&1 | jq ".SyncInfo" $HOME/stratos/stchaincli status --node "tcp://127.0.0.1:26652" 2>&1 | jq ".sync_info"
Полезные ссылки
Разбор алгоритма консенсуса в Tendermint — для более глубокого изучения
Благодарности
Команда 1package — написание статьи