Как я могу подключиться к кластеру Elasticsearch на EC2 из приложения Flask? - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть машина EC2 под управлением Ubuntu с 4G оперативной памяти. Elasticsearch 7.6.0 установлен, и я могу получить к нему удаленный доступ с моего локального компьютера, используя:

curl http://ec2-ip-address:9200

Результат:

{
  "name" : "ip-xxx-xx-x-xx",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "_na_",
  "version" : {
    "number" : "7.6.0",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "7f634e9f44834fbc12724506cc1da681b0c3b1e3",
    "build_date" : "2020-02-06T00:09:00.449973Z",
    "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"
}

Файл конфигурацииasticsearch.yml выглядит следующим образом:

# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0
#
# Set a custom port for HTTP:
#
http.port: 9200
#
# For more information, consult the network module documentation.
#

Все остальное остается без изменений, что означает, что все это закомментировано.

Файл jvm.options имеет следующий вид:

################################################################

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms1g
-Xmx1g

################################################################

Для остальной части этого файла сохранены параметры по умолчанию.

На сервере EC2 правила входящего трафика следующие:

Ports   Protocol    Source  launch-wizard-3
80  tcp 0.0.0.0/0, ::/0 ✔
22  tcp 0.0.0.0/0   ✔
9200    tcp 0.0.0.0/0, ::/0 ✔

Как я уже говорил ранее, я могу подключиться со своего терминала, но при попытке подключиться с приложением flask, работающим на На моей локальной машине я получаю сообщение об ошибке, в котором в основном говорится, что время соединения истекло.

elasticsearch.exceptions.ConnectionTimeout: ConnectionTimeout caused by - ReadTimeoutError(HTTPConnectionPool(host='xx.xxx..xx', port=9200): Read timed out. (read timeout=10))

Код Python выглядит следующим образом:

from flask import Flask
import json
from datetime import datetime
from elasticsearch import Elasticsearch

application = Flask(__name__)

es = Elasticsearch("http://xx.219.xx.x6")
# es = Elasticsearch([{'host': 'ec2-xx-218-xx-4.us-west-2.compute.amazonaws.com', 'port': 443,  'use_ssl': True}])

# es = Elasticsearch("http://1xx.31.xx.xx")

@application.route('/', methods=['GET', 'POST'])
def index():
    print(es.cluster.health())
    return "OK"

Как вы можете видеть, я пробовал несколько конфигураций подключения с одной и той же ошибкой. Первоначально я думал, что ошибка была вызвана не специально открытием порта 9200 на сервере EC2, но это не решит проблему сейчас.

Возможно, недостаточно оперативной памяти. Я пробовал разные опции timeout = xx в коде. Все неудачно.

Может кто-нибудь помочь, пожалуйста, или указать мне учебник Flask / Ealsticsearch? Спасибо!

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