Configuração
1 mestre de redis
3 clientes redis escravos (para leituras) com túneis para masterizar para gravações
Cada instância do redis é um servidor diferente em um local diferente.
Requisito
Mantenha uma conexão persistente. Quando um escravo desconecta, é possível reconectar e ressincronizar com o mestre o mais rápido possível (< 1 minuto).
sshd no mestre
TCPKeepAlive no
arquivo de configuração do 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 # PARA DEPURAR
export 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 usuario @ master_ip
cada escravo possui AUTOSSH_PORT 20000, 20002 20004 etc.
Problema
Normalmente, quando a conexão entre um escravo e o mestre morre, é restabelecida rapidamente - log autossh:
autossh[pid]: timeout polling to accept read connection
autossh[pid]: port down, restarting ssh
autossh[pid]: checking for grace period, tries = 0
autossh[pid]: starting ssh (count x)
autossh[pid]: ssh child pid is xxx
autossh[pid]: check on child xxx
autossh[pid]: set alarm for 5 secs
autossh[pid]: execing /usr/bin/ssh
autossh[pid]: connection ok
No entanto, às vezes, um tipo diferente de desconexão parece acontecer e não se reconecta mesmo após 10 minutos de tentativas:
autossh[pid]: 127.0.0.1:20000: Connection refused
autossh[pid]: port down, restarting ssh
A única maneira que encontrei atualmente para reconectar é alterar manualmente a porta do monitor no arquivo de configuração do autossh. Esta não é uma boa solução, a menos que eu possa, de alguma forma, automatizá-la e liberar a porta.
Eu tentei usar o serviço de eco inetd na porta 7 para encontrar uma solução alternativa para a porta do monitor ( -M 20000: 7 ) em uso, mas por alguma razão que não funcionou aqui é minha Autossh log da tentativa:
autossh[pid]: not what I sent: "ubuntu autossh 10670 1817574984 " : ""
e depois disso, o autossh morre.
Tags redis ssh-tunnel