使用 autossh 在不稳定的连接上转发 redis 流量

使用 autossh 在不稳定的连接上转发 redis 流量

设置

1 个 redis 主节点

3 个客户端 redis 从属服务器(用于读取),通过隧道连接到主服务器进行写入

每个 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 用户@master_ip

每个从属设备都有自己的 AUTOSSH_PORT 20000、20002 20004 等

问题

通常,当从属设备和主设备之间的连接断开时,它会很快重新建立 - autossh 日志:

autossh[pid]: 接受读取连接的超时轮询

autossh[pid]: 端口关闭,重新启动 ssh

autossh[pid]: 检查宽限期,尝试次数 = 0

autossh[pid]: 正在启动 ssh (计数 x)

autossh[pid]: ssh 子进程 pid 为 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 配置文件中的监视端口。这不是一个好的解决方案,除非我能以某种方式自动执行并释放端口。

我尝试在端口 7 上使用 inetd echo 服务来寻找监视端口的解决方法(-M 20000:7) 正在使用中,但由于某种原因没有起作用,这是我尝试的 autossh 日志:

autossh[pid]: 不是我发送的:“ubuntu autossh 10670 1817574984”:“”

此后 autossh 就死了。

相关内容