使用redis-sentinel在进行redis复制时,通过SSH端口转发需要注意的事项

作为自己的备忘录替代品。

事件

在测试环境中,按照以下方式。

    • srv1

redis master (port 6400)
redis sentinel

srv2

redis slave (from srv1 master) (port 6400)

我编写了这样的结构。

srv1和srv2位于不同的网络上,为了进行复制,进行了SSH端口转发。

+---------------+     +-------------+  ssh port forwarding   +------------+
| srv1:sentinel | --> | srv1:master | ---------------------> | srv2:slave |
+---------------+     +-------------+                        +------------+

在这种情况下,直到将srv2:slave连接到srv1:master之前,预期中的是srv1:master的redis将会成为master。

但是,srv2:redis

slaveof localhost [forwarding port]

当通过srv2到srv1的SSH隧道进行连接时,srv1的redis主节点会被sentinel从主节点降级为从节点的现象发生了。

造成某种结果的原因可以有很多。

由于Sentinel连接到了master服务器srv1,并识别出了srv2从服务器的Redis,使用了srv1的本地IP地址加上srv2从服务器的监听端口。

换言之,sentinel试图将连接到srv1:master的srv2:slave变为从节点并在srv1:master的redis上执行slaveof命令。

应对措施

srv2: 我改变了 Redis 的端口。

在这个时刻,srv1:sentinel

    srv1 IPアドレス + srv2:slave port

由于认知的目的是不变的,因此需要注意确保 srv1 中不存在与 srv2:slave 的 redis 在同一端口上运行的情况。

bannerAds