Клиент Serf не может подключиться к клиенту RP C, работающему локально - PullRequest
0 голосов
/ 06 мая 2020

Я инициализирую свой агент следующим образом:

    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

У меня также есть код клиента, который пытается подключиться к RP C клиент:

    c, err := client.NewRPCClient("127.0.0.1:7373")
    if err != nil {
        fmt.Println("error creating RCP Client:", err)
        return
    }

Я начинаю мой агент и я вижу этот вывод:

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}]

Когда я запускаю своего клиента, я получаю следующее:

error creating RCP Client: dial tcp 127.0.0.1:7373: connect: connection refused

Если я запускаю агент с помощью интерфейса командной строки, как в: 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 и запустите мой клиентский код, он подключается к клиенту RP C.

Я уверен, что есть ошибка в моем коде или в моем понимании того, как работает Serf.

Ответы [ 2 ]

2 голосов
/ 12 мая 2020

Это связано с тем, что когда вы запускаете 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!
0 голосов
/ 14 мая 2020

Я наконец понял, что делал неправильно.

Моя цель - создать кластер Serf и заставить узлы взаимодействовать друг с другом. Для этого мне нужно запустить сервисы serf, как я делал, но в клиенте не было необходимости, узлы общаются друг с другом после присоединения к кластеру.

Я буду использовать клиента Serf таким же образом Я пытался, только если я запустил Serf agent через Serf cli.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...