首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Serf客户端无法连接到本地运行的RPC客户端。

Serf客户端无法连接到本地运行的RPC客户端。
EN

Stack Overflow用户
提问于 2020-05-06 10:37:13
回答 2查看 226关注 0票数 0

我正在像这样初始化我的代理:

代码语言:javascript
复制
    conf := serf.DefaultConfig()
    conf.NodeName = "node-a"
    conf.MemberlistConfig.BindAddr = "127.0.0.1"
    conf.MemberlistConfig.BindPort = 6666
    conf.MemberlistConfig.AdvertiseAddr = "127.0.0.1"
    conf.MemberlistConfig.AdvertisePort = 6666

我还有一个客户端代码,试图连接到RPC客户机:

代码语言:javascript
复制
    c, err := client.NewRPCClient("127.0.0.1:7373")
    if err != nil {
        fmt.Println("error creating RCP Client:", err)
        return
    }

我启动了我的代理程序,我看到了这个输出:

代码语言:javascript
复制
2020/05/06 07:15:18 [INFO] serf: EventMemberJoin: node-a 127.0.0.1
[{node-a 127.0.0.1 6666 map[] alive 1 5 2 2 5 4}]

当我启动我的客户时,我会得到这个:

代码语言:javascript
复制
error creating RCP Client: dial tcp 127.0.0.1:7373: connect: connection refused

如果我使用CLI启动代理(如in:serf agent -bind=0.0.0.0:6667 -advertise=0.0.0.0:6667 -join=0.0.0.0:6666 -node=agent-2 -log-level=debug )并运行我的客户端代码,它将连接到RPC客户端。

我确信,在我的代码中,或者在我对Serf如何工作的理解中,存在一个错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-14 10:42:38

我终于明白我做错了什么。

我的目标是拥有一个Serf集群,并使节点相互通信。要做到这一点,我必须像我所做的那样启动serf服务,但是不需要客户机,节点在加入集群后相互通信。

只有当我通过Serf启动Serf代理时,我才会以我尝试的方式使用Serf客户端。

票数 0
EN

Stack Overflow用户

发布于 2020-05-12 00:25:04

这是因为当您通过serf.Create运行serf时(我假设您将上述配置传递给),它只启动到配置中提到的端口的连接,而不启动RPC服务。

但是,当运行serf agent时,它也会在端口7373上运行生听者

下面是我假设您正在运行的代理程序:

代码语言:javascript
复制
package main

import (
    "fmt"
    "github.com/hashicorp/serf/serf"
    "os"
    "os/signal"
    "syscall"
    "time"
)

func main() {
    c := make(chan os.Signal)
    signal.Notify(c, os.Interrupt, syscall.SIGTERM)
    go func() {
        <-c
        fmt.Println("\r- Ctrl+C pressed")
        os.Exit(0)
    }()

    conf := serf.DefaultConfig()
    conf.NodeName = "node-a"
    conf.MemberlistConfig.BindAddr = "127.0.0.1"
    conf.MemberlistConfig.BindPort = 6666
    conf.MemberlistConfig.AdvertiseAddr = "127.0.0.1"
    conf.MemberlistConfig.AdvertisePort = 6666
    serf.Create(conf)
    for {
        fmt.Println("- Sleeping")
        time.Sleep(10 * time.Second)
    }
}

使用netcat,您可以看到情况是这样的:

代码语言:javascript
复制
#running my go program
$ nc localhost 7373 -v
nc: connectx to localhost port 7373 (tcp) failed: Connection refused
nc: connectx to localhost port 7373 (tcp) failed: Connection refused

与此输出相比,如果绑定了TCP端口:

代码语言:javascript
复制
#running serf agent
$ nc localhost 7373 -v
Connection to localhost port 7373 [tcp/*] succeeded!
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61633062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档