python elasticsearch创建连接时sniff探测和timeout的问题

elasticsearch的集群方式就那么几种,一个是直接用nginx、haproxy这样的负载均衡在集群的调度。另一种是用siniff方式自动嗅探。 

这里简单说下,在python语言下创建elasticsearch连接时,遇到的一些小问题。

query filtered
Traceback (most recent call last):
  File “es.py”, line 60, in <module>
    “range” : { “idate” : { “gte” : “2015-02-01″,”lte”:”2015-02-03″}}
  File “/Library/Python/2.7/site-packages/elasticsearch/client/utils.py”, line 68, in _wrapped
    return func(*args, params=params, **kwargs)
  File “/Library/Python/2.7/site-packages/elasticsearch/client/__init__.py”, line 497, in search
    params=params, body=body)
  File “/Library/Python/2.7/site-packages/elasticsearch/transport.py”, line 307, in perform_request
    status, headers, data = connection.perform_request(method, url, params, body, ignore=ignore, timeout=timeout)
  File “/Library/Python/2.7/site-packages/elasticsearch/connection/http_urllib3.py”, line 79, in perform_request
    raise ConnectionTimeout(‘TIMEOUT’, str(e), e)
elasticsearch.exceptions.ConnectionTimeout: ConnectionTimeout caused by – ReadTimeoutError(HTTPConnectionPool(host=u’192.168.1.103′, port=9000): Read timed out. (read timeout=10))
[ruifengyun@devops ~ ]$

这个问题很是明显,是超时timeout的问题,每次进行query的时候,默认是10s的超时的时间,不知道为毛默认为10s,在实际场景下,经常会被error, 个人建议在60s左右。 


sniff 的功能我相信大家应该有了解的,可以保证程序的可用性。 如果懒得用haproxy nginx做反向代理,那么可以用sniff 来进行集群探测。  创建对象的时候,引入n个节点,如果一个节点挂掉的话,对于程序没有影响的。 

es = Elasticsearch(
    ['esnode1', 'esnode2'],
    # sniff before doing anything
    sniff_on_start=True,
    # refresh nodes after a node fails to respond
    sniff_on_connection_fail=True,
    # and also every 60 seconds
    sniffer_timeout=60
)

 

ES肯定是内网使用的,但是如果为了安全,还是有必要做成证书认证的。 可以自己用openssl生成证书,在创建对象的时候,打开ssl和引入ca证书就可以了。 

es = Elasticsearch(
    ['localhost:443', 'other_host:443'],
    # turn on SSL
    use_ssl=True,
    verify_certs=True,
    # provide a path to CA certs on disk
    ca_certs='/path/to/CA_certs'
)



大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

发表评论

邮箱地址不会被公开。 必填项已用*标注