Настроить
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 умирает.