设置
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 就死了。