Невозможно подключиться к elasti c поиск: активное соединение не найдено: недоступен узел Elasticsearch - PullRequest
1 голос
/ 27 апреля 2020

Я просто не могу понять, что происходит. Мое приложение go не может подключиться к поиску elasti c. Узел доступен, работает и работает. Что я здесь не так делаю?

import (
    "fmt"
    "github.com/olivere/elastic/v7"
    "github.com/sirupsen/logrus"
    "gitlab.com/codereverie/anuvadak-api-server/app_config"
    "gopkg.in/sohlich/elogrus.v7"
    "gopkg.in/validator.v2"
    "io"
    "os"
)

eurl := "http://ip:port"
eUsername := "username"
ePassword := "password"

client, err := elastic.NewClient(elastic.SetURL(eurl), elastic.SetBasicAuth(eUsername, ePassword))

if err != nil {
    fmt.Println("Some error", err.Error())
    panic("Failed to initialize elastic-search client")
}

Что здесь не так? В сообщении об ошибке говорится: no active connection found: no Elasticsearch node available

Вот данные, которые были возвращены из поиска elasti c, когда я нажал на запрос GET в браузере

  {
"name": "ABC-1",
"cluster_name": "ABC",
"cluster_uuid": "3oo05v6lSSmE7DpRh_68Yg",
"version": {
  "number": "7.6.2",
  "build_flavor": "default",
  "build_type": "deb",
  "build_hash": "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
  "build_date": "2020-03-26T06:34:37.794943Z",
  "build_snapshot": false,
  "lucene_version": "8.4.0",
  "minimum_wire_compatibility_version": "6.8.0",
  "minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"

}

1 Ответ

2 голосов
/ 27 апреля 2020

Ошибка no active connection found: no Elasticsearch node available обычно возникает, когда вы включаете сниффинг в клиенте, но в вашем кластере нет доступных узлов. Вы можете проверить состояние вашего кластера, нажав: http://host:port/_nodes/http?pretty=true.

Если вы не отключите прослушивание elastic Golang, клиент будет запускать процесс в фоновом режиме, который опрашивает /_nodes API (URL выше) каждый 15 минут и поддерживает список здоровых узлов. Если нет исправных узлов, это заканчивается этой ошибкой.

Это может произойти (ПРИМЕЧАНИЕ: у нас был чат с OP, где мы отладили проблему), также когда ваш кластер настроен с частными IP-адресами (например, в /_nodes API) вывод вы видите приватные, а не публичные c IPs). Клиент со сниффингом начинает опрос, получает список узлов и пытается подключиться к частному IP, но получает ошибку HTTP, потому что такой узел не отвечает (или даже не может быть разрешен в сети, где находится клиент). Так что он помечает его как мертвого и переходит к другому. Когда в кластере больше нет узлов, он сообщает no active connection found: no Elasticsearch node available.

Чтобы отключить сниффинг на стороне клиента (и подключиться напрямую к указанному узлу - но без какой-либо отказоустойчивости), вам нужно добавить &sniff=false в Elasti c URL.

Соединение можно без сниффинга можно сделать так:

config, _ := config.Parse("http://user:pwd@host:port/index&sniff=false")
client, _ := elastic.NewClientFromConfig(config)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...