我是初学者,有弹性和码头群。我花了两个星期的时间学习并尝试准备一个有弹性的码头群。我想准备一个带有docker swarm的弹性簇。我们可以轻松地使用放大和缩小的地方。我认为我们需要swarm来做这个和弹性集群,以保持数据库节点之间的数据同步。我还想到完全自动化我想使用Zen配置容器主机名。 因为swar round rubin“elasticsearch”主机名应该返回所有的ip。
首先我试着遵循这条指令: sematext.com/blog/2016/12/12/docker-elasticsearch-swarm
这里nginx-proxy不作为服务(docker-compose文件的一部分),但它作为容器工作。 (码头运行)。我不知道会有什么不同。但这个想法本身已经准备好了早期版本的docker,它对我不起作用。
这条指令背后的主要思想是,discovery.zen.ping.unicast.hosts有容器名称。 Docker swarm本身负载均衡然后弹性可以找到另一个节点。
因为nginx-proxy不能作为服务工作,所以我试图遵循这条指令:derpturkey.com/elasticsearch-cluster-with-docker-engine-swarm-mode /
我已经定义了nginx服务来连接弹性,我在这里配置了所有参数。
version: '3'
services:
elasticsearch:
image: 'elasticsearch:5'
command: [ elasticsearch, -E, network.host=0.0.0.0, -E, discovery.zen.ping.unicast.hosts=elasticsearch, -E, discovery.zen.minimum_master_nodes=1 ]
nginx:
image: 'nginx:1'
ports:
- '9200:9200'
command: |
/bin/bash -c "echo '
server {
listen 9200;
add_header X-Frame-Options "SAMEORIGIN";
location / {
proxy_pass http://elasticsearch:9200;
proxy_http_version 1.1;
proxy_set_header Connection keep-alive;
proxy_set_header Upgrade $$http_upgrade;
proxy_set_header Host $$host;
proxy_set_header X-Real-IP $$remote_addr;
proxy_cache_bypass $$http_upgrade;
}
}' | tee /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
它不起作用。 后来我做了一些改变:
我测试了它。 Nginx正在工作。 curl -XGET http://elastic:changeme@127.0.0.1:9200/_cluster/state?pretty返回数据。
version: '3'
services:
elasticsearch:
image: elasticsearch:latest
deploy:
replicas: 2
ports: ["9300:9300"]
command: [elasticsearch, -E, network.bind_host=0.0.0.0, -E, discovery.zen.ping.unicast.hosts=elasticsearch, -E, discovery.zen.minimum_master_nodes=1]
nginx:
image: 'dodi1983/nginx:0.1'
ports:
- 9200:9200
depends_on:
- elasticsearch
后果:
不幸的是,当我询问有关可用节点的弹性时。弹性始终返回当前节点信息(负载平衡)。我可以看到不同的ID。只有一个节点可用,但我认为ZEN发现应该找到两个节点。我登录nginx容器并尝试获取群集信息。你可以在这里看到,它们是不同的节点,它们不在集群中。 curl -XGET http://elastic:changeme@elasticsearch:9200/_cluster/state?pretty
有没有人有任何想法或解决方案? 谢谢。
答案 0 :(得分:0)
对我来说帮助了官方文档
https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
version: '2.2'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.4.1
container_name: es01
environment:
- node.name=es01
- discovery.seed_hosts=es02
- cluster.initial_master_nodes=es01,es02
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- esnet
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.4.1
container_name: es02
environment:
- node.name=es02
- discovery.seed_hosts=es01
- cluster.initial_master_nodes=es01,es02
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata02:/usr/share/elasticsearch/data
networks:
- esnet
volumes:
esdata01:
driver: local
esdata02:
driver: local
networks:
esnet: