Ошибка 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)