弹性搜索和logstash的故障转移

时间:2014-09-30 13:33:07

标签: logging elasticsearch logstash

我正在努力配置logstash和elasticsearch。 在我的logstash配置文件输出部分。

elasticsearch {
    codec => json_lines
    cluster => "firstEsearch_cluster"
    protocol => "http"
    host => "192.168.56.3"
    port => "9200"
}

如果我这样做,我就可以与弹性搜索实例进行通信

但是现在我在各种机器上有多个弹性搜索节点,我在那里复制数据以从故障中恢复,机器在同一网络中

现在,当我的计算机192.168.56.3失败且192.168.56.4192.168.56.5正在运行elasticsearch的其他节点时,由于计算机192.168.56.3无法将日志发送到elasticsearch集群失意了。所以

  1. logstash的输出配置应该是什么,这样当其中一台机器出现故障时,我仍然可以将日志发送到elasticsearch集群
  2. 当我尝试这样做时:

    elasticsearch {
        codec => json_lines
        cluster => "firstEsearch_cluster"
        protocol => "http"
        #host => "192.168.56.3"
        #port => "9200"
    }
    

    logstash无法连接到elasticsearch实例,并且无法发送日志。

3 个答案:

答案 0 :(得分:5)

使用DNS名称部署负载均衡器,并将elasticsearch输出指向它。负载均衡器会将请求路由到活动的elasticsearch节点。

答案 1 :(得分:2)

您可以在充当客户端节点的索引器上运行设置本地ES实例。使用以下选项配置节点

node.master: false
node.data: false

然后将您的elasticsearch输出指向localhost。此客户机节点不会存储任何数据,只是充当其余节点的负载均衡器。

答案 2 :(得分:0)

Elasticsearch(现在称为弹性)建议设置一个负载均衡的nginx代理。将您的logstash服务器指向代理,nginx将在集群中的节点之间循环。

https://www.elastic.co/blog/playing-http-tricks-nginx/

以下是nginx配置的外观片段。将您的logstash服务器指向端口8080.

events {
    worker_connections  1024;
}

http {

  upstream elasticsearch {
    server 127.0.0.1:9200;
    server 127.0.0.1:9201;
    server 127.0.0.1:9202;

    keepalive 15;
  }

  server {
    listen 8080;

    location / {
      proxy_pass http://elasticsearch;
      proxy_http_version 1.1;
      proxy_set_header Connection "Keep-Alive";
      proxy_set_header Proxy-Connection "Keep-Alive";
    }

  }

}