Назад | Перейти на главную страницу

Использование autossh для перенаправления трафика redis при нестабильном соединении

Настроить

1 мастер Redis

3 клиента передают подчиненные устройства (для чтения) с туннелями для управления для записи

Каждый экземпляр Redis - это отдельный сервер в другом месте.

Требование

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

sshd на мастере

TCPKeepAlive нет

файл конфигурации autossh

REDIS_SLAVE_PORT = 6379 REDIS_MASTER_PORT = 6379

AUTOSSH_FIRST_POLL = 5 AUTOSSH_POLL = 11

AUTOSSH_PORT = 20000

AUTOSSH_GATETIME = 10

AUTOSSH_LOGFILE = / home / xxx / autossh.log

AUTOSSH_PATH = / usr / bin / ssh

AUTOSSH_PIDFILE = / home / xxx / autossh.pid

AUTOSSH_LOGLEVEL = 7 # ДЛЯ ОТЛАДКИ

экспорт AUTOSSH_POLL AUTOSSH_LOGFILE AUTOSSH_PATH AUTOSSH_GATETIME AUTOSSH_PORT AUTOSSH_PIDFILE AUTOSSH_FIRST_POLL AUTOSSH_LOGLEVEL

autossh -2 -fN -M $ {AUTOSSH_PORT} -C -L $ {REDIS_SLAVE_PORT}: localhost: $ {REDIS_MASTER_PORT} -i /home/xxx/.ssh/id_rsa user @ master_ip

у каждого ведомого есть собственный AUTOSSH_PORT 20000, 20002 20004 и т. д.

Проблема

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

autossh [pid]: тайм-аут опроса для принятия соединения для чтения

autossh [pid]: порт отключен, перезапуск ssh

autossh [pid]: проверка на льготный период, попытки = 0

autossh [pid]: запуск ssh (количество x)

autossh [pid]: дочерний pid ssh - xxx

autossh [pid]: проверить ребенка xxx

autossh [pid]: установить будильник на 5 секунд

autossh [pid]: выполнение / usr / bin / ssh

autossh [pid]: соединение в порядке

Однако иногда кажется, что происходит разное отключение, которое не восстанавливается даже после 10 минут попыток:

autossh [pid]: 127.0.0.1:20000: в соединении отказано

autossh [pid]: порт отключен, перезапуск ssh

Единственный способ, который я нашел в настоящее время для повторного подключения, - это вручную изменить порт монитора в файле конфигурации autossh. Это не лучшее решение, если я не смогу как-то автоматизировать его и освободить порт.

Я попытался использовать службу inetd echo на порту 7, чтобы найти обходной путь для порта монитора (-М 20000: 7), но по какой-то причине это не сработало, вот мой журнал autossh из попытки:

autossh [pid]: не то, что я отправил: "ubuntu autossh 10670 1817574984": ""

и после этого autossh умирает.