2 回答
TA贡献1807条经验 获得超9个赞
这是因为当您在 Go 中运行 serf 时serf.Create(我假设您将上述配置传递给),它只会启动与配置中提到的端口的连接,而不会启动 RPC 服务。
但是,当serf agent它运行时,它还会在端口 7373 上生成一个侦听器。
这是我假设您正在为代理运行的程序:
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,你可以看到是这样的:
#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 端口已绑定,则与此输出对比:
#running serf agent
$ nc localhost 7373 -v
Connection to localhost port 7373 [tcp/*] succeeded!
TA贡献2041条经验 获得超4个赞
我终于明白我做错了什么。
我的目标是拥有一个 Serf 集群并使节点相互通信。为此,我必须像我一样启动 serf 服务,但不需要客户端,节点在加入集群后相互通信。
我将按照我尝试的方式使用 Serf 客户端,前提是我通过 Serf cli 启动 Serf 代理。
- 2 回答
- 0 关注
- 98 浏览
添加回答
举报