Как установить 2 ноды на один сервер
Перейти к содержимому

Как установить 2 ноды на один сервер

  • автор:

Запуск нескольких нод Cosmos на 1 сервере

Cosmos использует Tendermint. Tendermint — это алгоритм консенсуса, устойчивый к злоумышленным действиям. Запустив несколько нод с Tendermint пользователь столкнется с пересечением используемых портов и соответственно неработоспособностью второй и последующих нод

По умолчанию используются порты: 26656; 26657; 6060; 26658; 26660; 9090; 9091 и др

Не рекомендуется устанавливать большое количество нод на 1 сервер — делайте все на свой страх и риск!

config.toml

  • proxy_app = «tcp://127.0.0.1:26658»
  • rpc laddr = «tcp://127.0.0.1:26657»
  • pprof_laddr = «localhost:6060»
  • p2p laddr = «tcp://0.0.0.0:26656»
  • prometheus_listen_addr = «:26660»

app.toml

  • api address = «tcp://0.0.0.0:1317»
  • grpc address = «0.0.0.0:9090»
  • grpc-web address = «0.0.0.0:9091»

client.toml

  • node = «tcp://localhost:26657»

Соответственно для второй и последующих нод необходимо сменить данные порты, чтобы они не пересекались. Это можно сделать вручную $HOME/.defund/config/config.toml или используя следующие команды:

# зададим переменную work_dir=.defund

config.toml

# для 2 ноды sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:36658\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:36657\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6061\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:36656\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":36660\"%" $HOME/$work_dir/config/config.toml # для 3 ноды sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:46658\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:46657\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6062\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:46656\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":46660\"%" $HOME/$work_dir/config/config.toml # для 4 ноды sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:56658\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:56657\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6063\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:56656\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":56660\"%" $HOME/$work_dir/config/config.toml # для 5 ноды sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:60558\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:60557\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6064\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:60556\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":60560\"%" $HOME/$work_dir/config/config.toml # для 6 ноды sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:60658\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:60657\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6065\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:60656\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":60660\"%" $HOME/$work_dir/config/config.toml # для 7 ноды sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:60758\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:60757\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6066\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:60756\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":60760\"%" $HOME/$work_dir/config/config.toml # для 8 ноды sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:60858\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:60857\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6067\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:60856\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":60860\"%" $HOME/$work_dir/config/config.toml # для 9 ноды sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:60958\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:60957\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6068\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:60956\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":60960\"%" $HOME/$work_dir/config/config.toml # для 10 ноды sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:61058\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:61057\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6069\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:61056\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":61060\"%" $HOME/$work_dir/config/config.toml # для 11 ноды sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:61158\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:61157\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6070\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:61156\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":61160\"%" $HOME/$work_dir/config/config.toml # для 12 ноды sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:61258\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:61257\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6071\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:61256\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":61260\"%" $HOME/$work_dir/config/config.toml # для 13 ноды sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:61358\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:61357\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6072\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:61356\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":61360\"%" $HOME/$work_dir/config/config.toml # для 14 ноды sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:61458\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:61457\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6073\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:61456\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":61460\"%" $HOME/$work_dir/config/config.toml # для 15 ноды sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:61558\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:61557\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6074\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:61556\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":61560\"%" $HOME/$work_dir/config/config.toml

app.toml

# для 2 ноды sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9190\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9191\"%; s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:1327\"%" $HOME/$work_dir/config/app.toml # для 3 ноды sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9290\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9291\"%; s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:1337\"%" $HOME/$work_dir/config/app.toml # для 4 ноды sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9390\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9391\"%; s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:1347\"%" $HOME/$work_dir/config/app.toml # для 5 ноды sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9490\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9491\"%; s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:1357\"%" $HOME/$work_dir/config/app.toml # для 6 ноды sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9590\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9591\"%; s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:1367\"%" $HOME/$work_dir/config/app.toml # для 7 ноды sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9690\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9691\"%; s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:1377\"%" $HOME/$work_dir/config/app.toml # для 8 ноды sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9790\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9791\"%; s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:1387\"%" $HOME/$work_dir/config/app.toml # для 9 ноды sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9890\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9891\"%; s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:1397\"%" $HOME/$work_dir/config/app.toml # для 10 ноды sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9990\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9991\"%; s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:1407\"%" $HOME/$work_dir/config/app.toml # для 11 ноды sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9900\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9901\"%; s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:1417\"%" $HOME/$work_dir/config/app.toml # для 12 ноды sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9910\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9911\"%; s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:1427\"%" $HOME/$work_dir/config/app.toml # для 13 ноды sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9920\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9921\"%; s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:1437\"%" $HOME/$work_dir/config/app.toml # для 14 ноды sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9930\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9931\"%; s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:1447\"%" $HOME/$work_dir/config/app.toml # для 15 ноды sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9940\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9941\"%; s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:1457\"%" $HOME/$work_dir/config/app.toml

client.toml

# для 2 ноды sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:36657\"%" $HOME/$work_dir/config/client.toml # для 3 ноды sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:46657\"%" $HOME/$work_dir/config/client.toml # для 4 ноды sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:56657\"%" $HOME/$work_dir/config/client.toml # для 5 ноды sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:60557\"%" $HOME/$work_dir/config/client.toml # для 6 ноды sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:60657\"%" $HOME/$work_dir/config/client.toml # для 7 ноды sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:60757\"%" $HOME/$work_dir/config/client.toml # для 8 ноды sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:60857\"%" $HOME/$work_dir/config/client.toml # для 9 ноды sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:60957\"%" $HOME/$work_dir/config/client.toml # для 10 ноды sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:61057\"%" $HOME/$work_dir/config/client.toml # для 11 ноды sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:61157\"%" $HOME/$work_dir/config/client.toml # для 12 ноды sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:61257\"%" $HOME/$work_dir/config/client.toml # для 13 ноды sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:61357\"%" $HOME/$work_dir/config/client.toml # для 14 ноды sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:61457\"%" $HOME/$work_dir/config/client.toml # для 15 ноды sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:61557\"%" $HOME/$work_dir/config/client.toml

После меняем external_address

# для 2 ноды sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:36656\"/" $HOME/$work_dir/config/config.toml # для 3 ноды sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:46656\"/" $HOME/$work_dir/config/config.toml # для 4 ноды sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:56656\"/" $HOME/$work_dir/config/config.toml # для 5 ноды sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:60556\"/" $HOME/$work_dir/config/config.toml # для 6 ноды sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:60656\"/" $HOME/$work_dir/config/config.toml # для 7 ноды sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:60756\"/" $HOME/$work_dir/config/config.toml # для 8 ноды sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:60856\"/" $HOME/$work_dir/config/config.toml # для 9 ноды sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:60956\"/" $HOME/$work_dir/config/config.toml # для 10 ноды sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:61056\"/" $HOME/$work_dir/config/config.toml # для 11 ноды sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:61156\"/" $HOME/$work_dir/config/config.toml # для 12 ноды sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:61256\"/" $HOME/$work_dir/config/config.toml # для 13 ноды sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:61356\"/" $HOME/$work_dir/config/config.toml # для 14 ноды sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:61456\"/" $HOME/$work_dir/config/config.toml # для 15 ноды sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:61556\"/" $HOME/$work_dir/config/config.toml
# после изменений не забываем перезагрузить ноду sudo systemctl restart defundd && sudo journalctl -u defundd -f -o cat

Поддержим природу вместе: 0xa7476EC14cD663C742d527113638C77a1631Cc89 cosmos1m2mm7kzvw6m3464h94ryqg8xvr6tyeyyecppnq

Ставим несколько нод на 1 сервер

Первая статья за этот год. Собрал небольшой полезный материал для вас.

  1. Несколько нод на 1 сервере.
  2. Проверка нагрузки на сервер.
  3. Проверка портов.

Несколько нод на 1 сервер

Для оптимизации расходов можно ставить 2 и более нод на 1 сервер. Главное помнить некоторые моменты:

  • Проекты с 1 сетью часто конфликтуют, поэтому лучше ставить ноды разных сетей на 1 сервер;
  • Нагрузка на сервер;
  • Порты.

Плюсы и минусы разбирать не будем, хотя есть уточнение — при 100% нагрузке CPU сервер будет перезагружаться, поэтому важно следить на нагрузками.

Проверка нагрузки на сервер

Проверить нагрузку на сервер можно двумя способами — через Grafana или с самого сервера.

Grafana — пользуюсь на протяжении нескольких месяцев, показывает общий дашборд, удобно следить за нагрузками на сервер.

Небольшой минус — нужен отдельный сервер под ноду-обработчик (1 Core x 1 GB RAM).

Для просмотр через сервер вводим команды:

sudo apt install snapd -y sudo snap install bashtop bashtop

Для выхода нужно нажать ESC, стрелочками вниз на EXIT и нажимаем Enter.

Проверка портов

Для того, чтобы проверить порты уже установленной ноды, переходим на сервер и вводим код:

# Устанавливаем ПО apt install net-tools # Проверяем порты netstat -tulpn

Сервер с нодой Gear. Как видим в строке «Local Address», все что после «:» — это порты. Чтобы поставить на этот сервер другую ноду нужно, чтобы порты были разные — абсолютно все.

Таким образом, мы можем поставить тот же Aptos SubSpace StarkNet на 1 сервер, к примеру с конфигурацией 6 CPU / 16 RAM / 400 GB SSD.

Спасибо братик за прочтение статьи. Если была полезна — оставь фидбек (обратная связь).

Статья подготовлена Яриком, мои ресурсы:

Как подселять ноды? Редактирование портов в нодах Cosmos для запуска нескольких нод на одном сервере.

Основная проблема работоспособности нескольких нод на одном сервере это конфликт сетевых портов используемых нодами, так ноды основанные на Cosmos используют по умолчанию порты 26656; 26657; 6060; 26658; 26660; 9090; 9091. Но и несомненным плюсом Cosmos нод является то что порты легко изменить в конфигурационном файле.

Для того чтобы определить какие порты у нас заняты воспользуемся инструментом netstat (если он у вас не установлен то установить : sudo apt install net-tools )

sudo netstat -ltupan

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

Далее если какие то порты пересекаются с Cosmos нодой (Если у вас на сервере уже стоит космос нода то пересечение будет), то идем в конфиг и правим его, т.е. задаем новые порты для ноды.

Дальнейшие примеры будут для ноды SEI, так как в космосе всё в основном стандартно просто меняете папку ноды (вместо .sei/ на свою)

Для того чтобы не запутаться рекомендуется создать свою схему замены портов, можно менять например первую цифру, или придумать свой пул нумерации, главное не забывать что максимальное количество портов 65536

Теперь рассмотрим где находятся интересующие нас порты, открываем config.toml

Первый интересующий нас порт находится здесь

Установка Cosmos нод

Команда sudo apt update обновляет списки пакетов и репрозиториев на актуальные (не обновляет установленные пакеты) Команда sudo apt upgrade обновляет установленные пакеты до последних версий и устанавливает новые пакеты, если они требуются в качестве зависимостей. Ключ -y нужен если при установке пакетов какой либо из них запросит подтверждение то оно введётся автоматически.

Следующим шагом мы устанавливаем дополнительные пакеты

sudo apt install make clang pkg-config libssl-dev build-essential git gcc chrony curl jq ncdu htop net-tools lsof fail2ban wget -y

Давайте попробуем разобраться что и для чего нам нужно

make выполняет запуск процедуры компиляции приложения из исходного кода. По сути компилирует нам рабочий бинарник.

git распределённая система управления версиями. По сути с помощью этого пакета мы выбираем необходимую нам версию исходного кода для бинарника

Chrony — это гибкая реализация протокола сетевого времени Network Time Protocol (NTP). Используется для синхронизации системных часов с различных NTP-серверов

curl — инструмент для передачи данных с сервера или на него

jq позволяет анализировать, фильтровать, сравнивать и преобразовывать данные JSON.

Ncdu (NCurses Disk Usage) является инструментом командной строки для просмотра и анализа использования дискового пространства на Linux.

htop — компьютерная программа, предназначенная для вывода на терминал списка запущенных процессов и информации о них.

Пакет Net-tools содержит набор программ, которые формируют основу поддержки сетей в Linux

lsof — утилита, служащая для вывода информации о том, какие файлы используются теми или иными процессами

Fail2ban — простой в использовании локальный сервис, который отслеживает log–файлы запущенных программ, и на основании различных условий блокирует по IP найденных нарушителей.

Wget — свободная неинтерактивная консольная программа для загрузки файлов по сети.

Далее устанавливаем go и проверяем версию Go — компилируемый многопоточный язык программирования

ver=»1.19.1″ && \ wget «https://golang.org/dl/go$ver.linux-amd64.tar.gz» && \ sudo rm -rf /usr/local/go && \ sudo tar -C /usr/local -xzf «go$ver.linux-amd64.tar.gz» && \ rm «go$ver.linux-amd64.tar.gz» && \ echo «export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin» >> $HOME/.bash_profile && \ source $HOME/.bash_profile && \ go version

скачиваем и компилируем бинарник

git clone -b https://github.com/cosmos/gaia.git этой строкой скачивается репрозиторий с определённой версией которую мы указываем вместо , так же можно скачать полный репрозиторий если выполнить команду git clone https://github.com/cosmos/gaia.git

cd gaia && make install здесь мы переходим в папку со скаченным репрозиторием gaia и запускаем установку бинарника. Установку надо смотреть в документации проекта, может использоваться make install, make build, так и скачивание уже скомпилированного бинарника.

Теперь рассмотрим переменные, для чего мы их задаём.

GAIA_CHAIN=»gaia» GAIA_MONIKER=»your_name» GAIA_WALLET=»your_name»

Здесь задается имя сети, ноды, и кошелька, (можно вводить всё это в командах вручную без переменных, но если у вас несколько нод и вы планируете сделать мониторинг то опереировать переменными проще) в данном виде переменные будут работать только в рамках сессии для того чтобы они они применялись постоянно нужно их добавить в баш профиль

echo ‘export GAIA_CHAIN=’$ >> $HOME/.bash_profile echo ‘export GAIA_MONIKER=’$ >> $HOME/.bash_profile echo ‘export GAIA_WALLET=’$ >> $HOME/.bash_profile source $HOME/.bash_profile

После любого изменения баш профиля необходимо вводить команду source $HOME/.bash_profile , если ее не ввести то будут использоваться данные которые находились в нём при загрузке. Так же если решили переустановить ноду то заново переменные вводить не нужно они остаются в баш профиле, при удалении ноды рекомендуется удалить все переменные связанные с нодой из баш профиля, иначе могут появляться ошибки при загрузке.

Далее выполняем команду инициализации

gaiad init $GAIA_MONIKER —chain-id $GAIA_CHAIN

Как уже писалось выше можно обойтись без переменных и вместо них ввести свои значения. Команда инициализации создаст рабочую папку проекта (в нашем примере .gaia/)с конфигами и рабочими папками.

Дальше необходимо скачать файл генезис проекта, ссылка на него указывается либо в гите проекта либо в документации.

В данном примере скачивается запакованный файл, после чего он распаковывается и перемещается в папку проекта.

Теперь нужно настроить конфиг файлы для ноды.

Сначала добавим сиды и пиры для того чтобы нода могла подключиться к сети. (возможны вариации, могут быть только сиды, или только пиры) Сиды и пиры так же указываются либо в гите проекта либо в документации, при необходимости свежих пиров (если нода долго не может подключиться к сети), ищем либо в дискордах проектов, либо в тематических каналах.

seeds=»» sed -E -i ‘s/seeds = \».*\»/seeds = \»$seeds\»/’ $HOME/.gaia/config/config.toml

В строке seeds=»» в кавычки вписываем сиды и выполняем обе строки

peers=»» sed -i «s/^persistent_peers *=.*/persistent_peers = \»$peers\»/;» $HOME/.gaia/config/config.toml

В строке peers=»» в кавычки вписываем сиды и выполняем обе строки

Выключаем индексер (по желанию) для экономии места.

sed -i -e «s/^indexer *=.*/indexer = \»$indexer\»/» $HOME/.gaia/config/config.toml

Настраиваем прунинг (по желанию) для экономии места.

pruning=»custom» pruning_keep_recent=»100″ pruning_keep_every=»0″ pruning_interval=»50″ sed -i -e «s/^pruning *=.*/pruning = \»$pruning\»/» $HOME/.gaia/config/app.toml sed -i -e «s/^pruning-keep-recent *=.*/pruning-keep-recent = \»$pruning_keep_recent\»/» $HOME/.gaia/config/app.toml sed -i -e «s/^pruning-keep-every *=.*/pruning-keep-every = \»$pruning_keep_every\»/» $HOME/.gaia/config/app.toml sed -i -e «s/^pruning-interval *=.*/pruning-interval = \»$pruning_interval\»/» $HOME/.gaia/config/app.toml Так же задаём минимальну цену за газ sed -i -e «s/^minimum-gas-prices *=.*/minimum-gas-prices = \»0.001uatom\»/» $app.toml

Создаём сервис

[Service] User=$USER ExecStart=$(which gaiad) start —home $HOME/.gaia Restart=on-failure RestartSec=3 LimitNOFILE=65535

[Install] WantedBy=multi-user.target EOF

sudo tee /etc/systemd/system/gaiad.service > /dev/null эта строчка задает место создания сервиса, сервисы находятся в папке /etc/systemd/system/ так что здесь задаем имя сервиса gaiad.service

Description=gaia название сервиса как он будет отображаться

ExecStart=$(which gaiad) start —home $HOME/.gaia параметры запуска, ключ —home $HOME/.gaia указывает местоположение рабочей папки проекта.

Restart=on-failure указывает что при ошибке сервис будет перезагружен

RestartSec=3 время, в секундах, через которое произойдёт перезагрузка сервиса

Теперь запускаем наш сервис

sudo systemctl daemon-reload

Перечитывает файлы сервиса, необходимо выполнять после создания или редактирования сервиса

sudo systemctl enable gaiad

Включает созданный сервис добавляя его в автозапуск

sudo systemctl restart gaiad

Перезапуск сервиса (как запуск работает тоже)

journalctl -u gaiad -f -o cat

Просмотр логов, если в логах постоянно рестартит сервис, то рекомендую остановить его и запустить бинарник напрямую gaiad start , так будет выводить более подробную информацию об ошибке.

sudo systemctl stop gaiad

Остановка сервиса

sudo systemctl disable gaiad

Отключение сервиса и удаление его из автозапуска

Вывод показывает статус ноды, проверяем синхронизацию когда «catching_up»: false то нода синхронизирована (если установленно несколько нод на сервере то указываем порт нужной ноды)

После того как нода синхронизировалась создаем или восстанавливаем кошелёк, необходимо будет придумать и ввести пароль для работы с кошельком

gaiad keys add $GAIA_WALLET

После создания кошелька обязательно сохраняем мнемоник он необходим для восстановления кошелька, для восстановления используем ключ —recover, и вводим мнемоник от кошелька.

gaiad keys add $GAIA_WALLET —recover

Запишем адрес кошелька в переменную (это будет удобнее чем постоянно вводить что-то такое cosmos15h6vd5f0wqps26zjlwrc6chah08ryu4hzzdwhc)

GAIA_ADDR=$(gaiad keys show $GAIA_WALLET -a)

Добавляем переменную, команда gaiad keys show $GAIA_WALLET -a покажет адрес кошелька, и записываем в баш профиль

echo ‘export GAIA_ADDR=’$ >> $HOME/.bash_profile source $HOME/.bash_profile

Запишем адрес валидатора в переменную

GAIA_VALOPER=$(gaiad keys show $GAIA_WALLET —bech val -a)

Добавляем переменную, команда gaiad keys show $GAIA_WALLET —bech val -a покажет адрес валидатора, и записываем в баш профиль

echo ‘export GAIA_VALOPER=’$ >> $HOME/.bash_profile source $HOME/.bash_profile

Посмотреть вывод любой переменной можно с помощью команды echo например echo $GAIA_VALOPER отобразит адрес валидатора записанный в переменной

Нужно запросить средства на кошелёк для создания валидатора, краны в основном указываются в документации, гитах или дискордах проектов. После запроса средств проверяем баланс командой

gaiad query bank balances $GAIA_ADDR

Теперь создаем валидатора, подробно написано тут , после создания не должно быть ошибок, если в поле raw_log есть какие-то записи то это ошибка и валидатор не создался. После создания валидатора обязательно сохраните файл priv_validator_key.json из папки конфиг в данном примере $HOME/.gaia/config/priv_validator_key.json. Этот файл необходим для восстановления валидатора в случае отказа сервера или при переносе ноды на другой сервер. Важно при переносе ноды на другой сервер перед копированием этого файла старая нода должна быть полностью остановлена.

Рассмотрим полезные команды для управления нодой

Проверка статуса валидатора

gaiad q staking validator $GAIA_VALOPER

Просмотр списка активных валидаторов

gaiad q staking validators -oj —limit=3000 | jq ‘.validators[] | select(.status==»BOND_STATUS_BONDED»)’ | jq -r ‘(.tokens|tonumber/pow(10; 6)|floor|tostring) + » \t » + .description.moniker’ | sort -gr | nl

Просмотр списка неактивных валидаторов

gaiad q staking validators -oj —limit=3000 | jq ‘.validators[] | select(.status==»BOND_STATUS_UNBONDED»)’ | jq -r ‘(.tokens|tonumber/pow(10; 6)|floor|tostring) + » \t » + .description.moniker’ | sort -gr | nl

Выход из тюрьмы

gaiad tx slashing unjail —from $GAIA_WALLET —chain-id $GAIA_CHAIN —gas auto —gas-adjustment 1.4 -y

Посмотреть причину попадания в тюрьму

gaiad query slashing signing-info $(gaiad tendermint show-validator)

Собрать награды со своего валидатора

gaiad tx distribution withdraw-rewards $GAIA_VALOPER —commission —from $GAIA_WALLET —chain-id $GAIA_CHAIN —gas-adjustment 1.4 —gas auto -y

Собрать награды со всех валидаторов в которых делегировали

gaiad tx distribution withdraw-all-rewards —from $GAIA_WALLET —chain-id $GAIA_CHAIN —gas-adjustment 1.4 —gas auto -y

Делегировать средства на своего валидатора

gaiad tx staking delegate $GAIA_VALOPER 1000000uatom —from $GAIA_WALLET —chain-id $GAIA_CHAIN —gas-adjustment 1.4 —gas auto -y

Делегировать средства другому валидатору

gaiad tx staking delegate 1000000uatom —from $GAIA_WALLET —chain-id $GAIA_CHAIN —gas-adjustment 1.4 —gas auto -y

Переделегировать средства другому валидатору

gaiad tx staking redelegate $GAIA_VALOPER 1000000uatom —from $GAIA_WALLET —chain-id $GAIA_CHAIN —gas-adjustment 1.4 —gas auto -y

Вывести средства со своего валидатора

gaiad tx staking unbond $GAIA_VALOPER 1000000uatom —from $GAIA_WALLET —chain-id $GAIA_CHAIN —gas-adjustment 1.4 —gas auto -y

Перевести средства на другой кошелёк

gaiad tx bank send wallet 1000000usei —from $GAIA_WALLET —chain-id $GAIA_CHAIN

Посмотреть список голосований

gaiad query gov proposals

Посмотреть иформацию по номеру голосования

gaiad query gov proposal 1

Проголосовать «да» за номер голосования

gaiad tx gov vote 1 yes —from $GAIA_WALLET —chain-id $GAIA_CHAIN —gas-adjustment 1.4 —gas auto -y

Проголосовать «нет» за номер голосования

gaiad tx gov vote 1 no —from $GAIA_WALLET —chain-id $GAIA_CHAIN —gas-adjustment 1.4 —gas auto -y

Проголосовать «воздержался» за номер голосования

gaiad tx gov vote 1 abstain —from $GAIA_WALLET —chain-id $GAIA_CHAIN —gas-adjustment 1.4 —gas auto -y

Большое спасибо, за внимание и уделенное время

Наш телеграмм канал по нодам — https://t.me/mmsnodes
Наш телеграмм чат по нодам — https://t.me/mmsnodeschat
Наш телеграмм канал по экосистеме Cosmos — https://t.me/cosmochannel_mms

С уважением, MMS_Team

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *