TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #1157 9.59K
Рубрика "упоротые однострочники".

🔤🔤🔥🔤🔤🔤🔤🔤🔤

Как послать PING всем серверам кластера редиса и не умереть от скуки
ㅤ
for nodeport in $(echo "CLUSTER NODES" | nc redis.example 6900 | awk '$1~/^[0-9a-z].*$/ {sub("@"," "); print $2}'); do IFS=":" read -r node port <<< $nodeport; echo -n "$nodeport: "; echo "PING" | nc $node $port; done


Первым делом мы шлём в известный нам сервер кластера redis команду CLUSTER NODES.

echo "CLUSTER NODES" | nc redis.example 6900


Референс команды cluster nodes.

Пример выхлопа

shell$5256
07c37dfeb235213a872192d90877d0cd55635b91 127.0.0.1:30004@31004,hostname4 slave e7d1eecce10fd6bb5eb35b9f99a514335d9ba9ca 0 1426238317239 4 connected
67ed2db8d677e59ec4a4cefb06858cf2a1a89fa1 127.0.0.1:30002@31002,hostname2 master - 0 1426238316232 2 connected 5461-10922
292f8b365bb7edb5e285caf0b7e6ddc7265d2f4f 127.0.0.1:30003@31003,hostname3 master - 0 1426238318243 3 connected 10923-16383
6ec23923021cf3ffec47632106199cb7f496ce01 127.0.0.1:30005@31005,hostname5 slave 67ed2db8d677e59ec4a4cefb06858cf2a1a89fa1 0 1426238316232 5 connected
824fe116063bc5fcf9f4ffd895bc17aee7731ac3 127.0.0.1:30006@31006,hostname6 slave 292f8b365bb7edb5e285caf0b7e6ddc7265d2f4f 0 1426238317741 6 connected
e7d1eecce10fd6bb5eb35b9f99a514335d9ba9ca 127.0.0.1:30001@31001,hostname1 myself,master - 0 0 1 connected 0-5460


Дальше мы парсим выхлоп awk-шкой, так как нам нужны чисто IP и порт

awk '$1~/^[0-9a-z].*$/ {sub("@"," "); print $2}')


$1~/^[0-9a-z].*$/ - берём строчки, которые начинаются с циферкобуковок

{sub("@"," "); print $2} - режем дополнительно по символу собаки, выводим 2ю колонку. Получаем:

127.0.0.1:30004
127.0.0.1:30002
127.0.0.1:30003
127.0.0.1:30005
127.0.0.1:30006
127.0.0.1:30001


Ура, у нас есть список редисок с портами. Всё это заворачиваем в for:

for nodeport in $(echo "CLUSTER NODES" | nc redis.example 6900 | awk '$1~/^[0-9a-z].*$/ {sub("@"," "); print $2}'); do ...; done


И кайф, осталось порезать по двоеточию в разные переменные хост и порт, и, вооружившись netcat-ом, сделать PING.

Режем строку по двоеточию на 2 переменных

IFS=":" read -r node port <<< $nodeport;


Итого у нас получается следующее:

nodeport=127.0.0.1:30004
node=127.0.0.1
port=30004


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

echo -n "$nodeport: "


И netcat-ом шлём команду PING уже на ноду.

echo "PING" | nc $node $port


Получаем на выходе:

127.0.0.1:30004: +PONG
127.0.0.1:30002: +PONG
127.0.0.1:30003: +PONG
127.0.0.1:30005: +PONG
127.0.0.1:30006: +PONG
127.0.0.1:30001: +PONG


🛠 #балансбатл #людипишут
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
More from @bashdays
  1. Sep 25, 2026ИИ-агент может быть у каждого: создать персонального помощника можно без настройки серверо…
  2. Sep 25, 2026🚀 Zabbix 8.0 на подходе. Запланируйте обучение команды уже сейчас В ближайшее время ожида…
  3. Sep 24, 2026✨ Как настроить PostgreSQL для продакшен-нагрузок При переходе к продакшен-нагрузкам важно…
  4. Sep 24, 2026Post #1565
  5. Sep 24, 2026Траблшутинг - мастхэв компетенция для инженера В Rebrain траблшутинги проводят уже несколь…
  6. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →