Docker:2个elasticsearch容器如何协同工作?

时间:2017-08-31 06:16:15

标签: elasticsearch docker logstash

根据官方website

,docker中弹性搜索的生产设置如下所示
version: '2'
services:
  elasticsearch1:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.5.2
    container_name: elasticsearch1
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    mem_limit: 1g
    volumes:
      - esdata1:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - esnet
  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.5.2
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "discovery.zen.ping.unicast.hosts=elasticsearch1"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    mem_limit: 1g
    volumes:
      - esdata2:/usr/share/elasticsearch/data
    networks:
      - esnet

volumes:
  esdata1:
    driver: local
  esdata2:
    driver: local

networks:
  esnet:

Elasticsearch1已暴露,它也通过docker网络与Elasticsearch2连接,但它们有自己的存储。 现在是我的问题。这个设置如何工作? ES2(elasticsearch2)在ES1(elasticsearch1)发生故障之前什么都不做,或者是在复制一切?

因为当我使用API​​时,我将始终与localhost:9200连接,因此我将始终访问ES1。我不知道ES1在处理与ES2相关的信息方面做了什么。

另一种情况是在我的logstash.conf中我必须定义输出的目的地:

output {
  elasticsearch { hosts => ["elasticsearch1:9200"] }
  xxx
}

我将它保留在docker网络内部(logstash与elasticsearch1链接)但我不知道我是否还要定义elasticsearch2?或者现在发生了什么。

elasticsearch1和elasticsearch2如何协同工作?

1 个答案:

答案 0 :(得分:0)

这两个实例充当集群。即使您查询单个节点,您的查询也会在内部转发到集群的所有节点(在您的情况下为2),因为数据在它们之间共享。有关详细信息,请查看此官方页面:https://www.elastic.co/guide/en/elasticsearch/reference/5.5/_basic_concepts.html