无法连接到运行在不同网络命名空间中的redis服务器

fnvucqvd  于 2021-06-07  发布在  Redis
关注(0)|答案(0)|浏览(275)

设置:
已创建网络命名空间。
创建了一个 veth 一对 vetha 以及 vethbvethb 在命名空间中结束,在主机中结束。
添加了ip 192.168.122.50vethb 开始了一个 redis 网络命名空间中容器中的服务器
将请求发送到 redis 直接从运行在名为 secondaryvm . 但是,它抛出: Failed to connect to Redis: Connection timed out 错误。不明白为什么会这样,所以看了看 tcpdump 嗅流 vetha ,以下是相同的内容:

21:48:33.764967 IP (tos 0x0, ttl 64, id 31361, offset 0, flags [DF], proto TCP (6), length 60)
    secondaryvm.34540 > 192.168.122.50.6379: Flags [S], cksum 0x75d6 (incorrect -> 0xe169), seq 3863373484, win 64240, options [mss 1460,sackOK,TS val 3417390465 ecr 0,nop,wscale 7], length 0
21:48:38.884975 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.122.50 tell secondaryvm, length 28
21:48:38.885101 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.122.50 is-at 1a:8c:7f:8b:4d:e0 (oui Unknown), length 28
21:49:16.138726 IP (tos 0x0, ttl 64, id 29195, offset 0, flags [DF], proto TCP (6), length 60)
    secondaryvm.34544 > 192.168.122.50.6379: Flags [S], cksum 0x75d6 (incorrect -> 0xe563), seq 550142628, win 64240, options [mss 1460,sackOK,TS val 3417432839 ecr 0,nop,wscale 7], length 0
21:49:17.156952 IP (tos 0x0, ttl 64, id 29196, offset 0, flags [DF], proto TCP (6), length 60)
    secondaryvm.34544 > 192.168.122.50.6379: Flags [S], cksum 0x75d6 (incorrect -> 0xe169), seq 550142628, win 64240, options [mss 1460,sackOK,TS val 3417433857 ecr 0,nop,wscale 7], length 0
21:49:19.173031 IP (tos 0x0, ttl 64, id 29197, offset 0, flags [DF], proto TCP (6), length 60)
    secondaryvm.34544 > 192.168.122.50.6379: Flags [S], cksum 0x75d6 (incorrect -> 0xd989), seq 550142628, win 64240, options [mss 1460,sackOK,TS val 3417435873 ecr 0,nop,wscale 7], length 0
21:49:22.405182 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.122.50 tell secondaryvm, length 28
21:49:22.405262 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.122.50 is-at 1a:8c:7f:8b:4d:e0 (oui Unknown), length 28
21:49:23.429054 IP (tos 0x0, ttl 64, id 29198, offset 0, flags [DF], proto TCP (6), length 60)
    secondaryvm.34544 > 192.168.122.50.6379: Flags [S], cksum 0x75d6 (incorrect -> 0xc8e9), seq 550142628, win 64240, options [mss 1460,sackOK,TS val 3417440129 ecr 0,nop,wscale 7], length 0
21:49:31.621030 IP (tos 0x0, ttl 64, id 29199, offset 0, flags [DF], proto TCP (6), length 60)
    secondaryvm.34544 > 192.168.122.50.6379: Flags [S], cksum 0x75d6 (incorrect -> 0xa8e9), seq 550142628, win 64240, options [mss 1460,sackOK,TS val 3417448321 ecr 0,nop,wscale 7], length 0
21:49:47.749024 IP (tos 0x0, ttl 64, id 29200, offset 0, flags [DF], proto TCP (6), length 60)
    secondaryvm.34544 > 192.168.122.50.6379: Flags [S], cksum 0x75d6 (incorrect -> 0x69e9), seq 550142628, win 64240, options [mss 1460,sackOK,TS val 3417464449 ecr 0,nop,wscale 7], length 0
21:50:20.261084 IP (tos 0x0, ttl 64, id 29201, offset 0, flags [DF], proto TCP (6), length 60)
    secondaryvm.34544 > 192.168.122.50.6379: Flags [S], cksum 0x75d6 (incorrect -> 0xeae8), seq 550142628, win 64240, options [mss 1460,sackOK,TS val 3417496961 ecr 0,nop,wscale 7], length 0
21:50:25.381045 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.122.50 tell secondaryvm, length 28
21:50:25.381176 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.122.50 is-at 1a:8c:7f:8b:4d:e0 (oui Unknown), length 28

redis服务器已经启动,客户端正在根据 terminal 输出,但不符合 tcpdump 输出。根据 tcpdump 输出,客户端正在尝试连接,但未成功建立连接。
客户端终端输出:

========================100==================================================
terminate called after throwing an instance of 'sw::redis::TimeoutError'
  what():  Failed to connect to Redis: Connection timed out
Aborted (core dumped)

客户代码(用redis plus编写):

int main(){
    auto redis = Redis("tcp://192.168.122.50:6379);
    sleep(5);
    int ep = 100;

    while(true){
    cout<<"===================="<<ep<<"======================\n";

    auto pipe = redis.pipeline(false);
    for(int i=1; i<=500; i++){
        string s = to_string(i);

        if(i%2 == 1){
           pipe.set(s, s);
        }
        else {
           string st = to_string(i-1);
           pipe.get(st);
        }
    }

    auto pipe_replies = pipe.exec();
    pipe.discard();

   }

根据终端的输出,它成功地建立了连接。
我不明白这里发生了什么。
像线吗 auto redis = Redis("tcp://192.168.122.50:6379"); 不建立连接?
redis服务器肯定启动了,那么为什么看tcp流没有建立连接呢?
redis版本 6.0.9 它在6379端口运行。
如何防止这种错误?
编辑:
我按照以下步骤/命令设置网络名称空间:


# !/bin/bash

sudo ip netns ls
sudo ip netns add alpine_network
sudo ip link add name veth-host type veth peer name veth-alpine
sudo ip link set veth-alpine netns alpine_network
sudo ip netns exec alpine_network ip addr add 192.168.122.50/24 dev veth-alpine
sudo ip netns exec alpine_network ip link set veth-alpine up
sudo ip netns exec alpine_network ip link set lo up
sudo ip link set veth-host up
sudo ip route add 192.168.122.50/32 dev veth-host
sudo ip netns exec alpine_network ip route add default via 192.168.122.50 dev veth-alpine

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题