Docker:2个elasticsearch容器如何一起工作?

docker中elasticsearch的生产设置看起来就像这个官方网站

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是暴露的,它也被dockernetworking连接到Elasticsearch2,但他们有自己的存储。 现在是我的问题。 这个设置如何工作? 是ES2(elasticsearch2)什么也不做,直到ES1(elasticsearch1)崩溃,还是它复制了一切?

因为当我使用API​​时,我总是会连接localhost:9200所以我会一直访问ES1。 我不知道ES1与ES2相关的信息。

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

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

我把它放在dockernetworking的内部(logstash与elasticsearch1链接),但我不知道是否还必须定义elasticsearch2? 或者现在发生的事情。

elasticsearch1和elasticsearch2如何一起工作?

这两个实例作为一个集群。 即使你查询单个节点,内部查询也会被转发到集群的所有节点(在你的情况下是2),因为数据在它们之间共享。 看看这个官方页面的更多细节: https : //www.elastic.co/guide/en/elasticsearch/reference/5.5/_basic_concepts.html