Это связано с тем, что когда вы запускаете serf в Go через serf.Create
(я предполагаю, что вы передаете вышеуказанную конфигурацию), он только запускает соединение с портами, указанными в конфигурации, и не запускает RP C service.
Однако, когда serf agent
запущен, он также порождает прослушиватель на порту 7373.
Вот программа, которую я предполагаю, вы запускаете для agent:
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!