Tendis
Tendis copied to clipboard
单物理机系统绑定多ip时,绑定不同ip启动的tendis服务,在配置cluster时 ip识别的问题
Description
同一个物理机器上绑定不同ip启动的tendis服务,在配置cluster的时候,会把 这两个不同ip的服务,在cluster内部 识别成同一个ip的情况
Expected Behavior
tendis 版本 :2.3.4-rocksdb-v5.13.4 搭建3主3从 cluster时 系统 centos7:
节点1的ip情况,其他3个节点与之类似 ifconfig bond4: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 inet 192.168.1.18 netmask 255.255.254.0 broadcast 192.168.1.255
bond4:1: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 inet 192.168.1.30 netmask 255.255.254.0 broadcast 192.168.1.255
节点2 ifconfig bond4: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 inet 192.168.1.19 netmask 255.255.254.0 broadcast 192.168.1.255
bond4:1: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 inet 192.168.1.31 netmask 255.255.254.0 broadcast 192.168.1.255
节点3 ifconfig bond4: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 inet 192.168.1.20 netmask 255.255.254.0 broadcast 192.168.1.255
bond4:1: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 inet 192.168.1.32 netmask 255.255.254.0 broadcast 192.168.1.255
tendis conf 分别绑定 各服务器的两个ip, 在每台服务器上启动 tendis实例
启动后各物理服务器上的tendis实例的ip情况如下
server1
netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.1.30:18903 0.0.0.0:* LISTEN 89183/tendisplus
tcp 0 0 192.168.1.18:18903 0.0.0.0:* LISTEN 84841/tendisplus
tcp 0 0 192.168.1.30:8903 0.0.0.0:* LISTEN 89183/tendisplus
tcp 0 0 192.168.1.18:8903 0.0.0.0:* LISTEN 84841/tendisplus
server2
netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.1.31:18903 0.0.0.0:* LISTEN 78695/tendisplus
tcp 0 0 192.168.1.19:18903 0.0.0.0:* LISTEN 74363/tendisplus
tcp 0 0 192.168.1.31:8903 0.0.0.0:* LISTEN 78695/tendisplus
tcp 0 0 192.168.1.19:8903 0.0.0.0:* LISTEN 74363/tendisplus
server3
netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.1.32:18903 0.0.0.0:* LISTEN 75309/tendisplus
tcp 0 0 192.168.1.20:18903 0.0.0.0:* LISTEN 70965/tendisplus
tcp 0 0 192.168.1.32:8903 0.0.0.0:* LISTEN 75309/tendisplus
tcp 0 0 192.168.1.20:8903 0.0.0.0:* LISTEN 70965/tendisplus
启动后配置cluster ./redis-cli -h 192.168.1.18 -p 8903 192.168.1.18:8903> cluster meet 192.168.1.19 8903 OK 192.168.1.18:8903> cluster meet 192.168.1.20 8903 OK 192.168.1.18:8903> cluster meet 192.168.1.30 8903 OK 192.168.1.18:8903> cluster meet 192.168.1.31 8903 OK 192.168.1.18:8903> cluster meet 192.168.1.32 8903
./redis-cli -h 192.168.1.18 -p 8903 cluster addslots {0..5461} OK ./redis-cli -h 192.168.1.19 -p 8903 cluster addslots {5462..10922} OK ./redis-cli -h 192.168.1.20 -p 8903 cluster addslots {10923..16383} OK
表现如下: 192.168.1.18:8903> cluster nodes 9905c951de7fbc5f1f6bc9b390c1683f01104ca9 192.168.1.20:8903@18903 master - 0 1626424349251 4 connected 3129f8b911971820df9f1836ff6bb49bd3cc3331 192.168.1.19:8903@18903 master - 0 1626424352253 3 connected 1cf646cbb1e3cc392ac94cc0fbb4bfff1b6a99e1 192.168.1.18:8903@18903 myself,master - 0 1626424351000 1 connected 0-5461 d4cb2a25c5b2bad0db6f70c245df879874e650ab 192.168.1.19:8903@18903 master - 0 1626424351252 0 connected 5462-10922 3ed3afbe4298746484ae696a706ee6eea634b481 192.168.1.20:8903@18903 master - 0 1626424350252 2 connected 10923-16383 eb9c1b744bbbfb2c702d8934152c923798e57691 :0@0 master,fail,noaddr - 1626424147259 1626424147160 0 disconnected
你这里应该是本意用bind来绑定地址,但bind 的含义并不是指定server绑定的地址,cluster nodes节点自身的ip信息不是根据这个bind 设置的ip , 而是gossip通信过程中从session 解析的ip。 bind具体含义可以参考redis 配置bind 的注释:默认情况下,如果没有指定bind配置指令,则 Redis 监听来自服务器上所有可用网络接口的连接。可以使用bind配置指令来监听一个或多个选定的接口。 另外不建议在一台服务器 拉起多个tendis进程,主从如果在同一台服务器也起不到故障恢复的作用