如何解决使用主机网络的 Docker Swarm 上的 ElasticSearch
我正在尝试使用 Azure 的 Ubuntu 映像 Docker Swarm 构建 3 个节点(1 个主节点 + 2 个节点)。 然后我尝试部署一个 ElasticSearch 3 节点集群。
这是我的 YAML 文件:
version: '3.7'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
hostname: "{{.Node.Hostname}}"
environment:
- node.name={{.Node.Hostname}}
- cluster.name=rdcluster
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
- discovery.seed_hosts=elasticsearch
- cluster.initial_master_nodes=Docker01,Docker02,Docker03
- node.ml=false
- xpack.ml.enabled=false
- xpack.monitoring.enabled=false
- xpack.security.enabled=false
- xpack.watcher.enabled=false
- bootstrap.memory_lock=false
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- elasticsearch-data:/usr/share/elasticsearch/data
deploy:
mode: global
endpoint_mode: dnsrr
resources:
limits:
memory: 4G
networks:
- "myelasticnetwork"
nginx:
image: nginx:1.17.1-alpine
ports:
- 9200:9200
deploy:
mode: global
command: |
/bin/sh -c "echo '
user nobody nogroup;
worker_processes auto;
events {
worker_connections 1024;
}
http {
client_max_body_size 4g;
resolver 127.0.0.1 ipv6=off;
server {
listen *:9200;
location / {
proxy_set_header Connection keep-alive;
set $$url http://elasticsearch:9200;
proxy_pass $$url;
proxy_set_header Host $$http_host;
proxy_set_header X-Real-IP $$remote_addr;
proxy_set_header X-Forwarded-For $$proxy_add_x_forwarded_for;
}
}
}' | tee /etc/nginx/nginx.conf && nginx -t && nginx -g 'daemon off;'"
volumes:
elasticsearch-data:
networks:
myelasticnetwork:
external:
name: "host"
似乎 Elastic 由于心跳而不断重新启动。 我认为问题在于在 Azure 中我们无法连接到不受 Azure 管理的“虚拟”网络。 在这种情况下,我的节点主机网络是 10.0.0.0/20。检查 ElasticSearch 网络我得到:
$ sudo docker network inspect elasticsearch_default
[
{
"Name": "elasticsearch_default","Id": "k05k4qy8z03gni1uaegk1rnaz","Created": "2021-01-31T19:35:38.82746565Z","Scope": "swarm",**"Driver": "overlay",**
"EnableIPv6": false,"IPAM": {
"Driver": "default","Options": null,"Config": [
{
**"Subnet": "10.0.3.0/24",**
"Gateway": "10.0.3.1"
}
]
},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {
"Network": ""
},"ConfigOnly": false,"Containers": {
"8a397f15ed0dc79ca794dfea24283908bfb471b74c9122b6f68b59b424a7fb78": {
"Name": "elasticsearch_nginx.c9om15ttphfhecnlt2emrgrkv.afnl9d6p8ddwubvd3nrmn95fq","EndpointID": "04d59ae9f45425bbee98be271b16c79a329139202600c4745c4442a4f2c54fae","MacAddress": "02:42:0a:00:03:03","IPv4Address": "10.0.3.3/24","IPv6Address": ""
},"lb-elasticsearch_default": {
"Name": "elasticsearch_default-endpoint","EndpointID": "b20c369d66835f3f330d0af2cbb40e2002046cbc1a11a58c76c2f61916978e69","MacAddress": "02:42:0a:00:03:06","IPv4Address": "10.0.3.6/24","IPv6Address": ""
}
},"Options": {
"com.docker.network.driver.overlay.vxlanid_list": "4099"
},"Labels": {
"com.docker.stack.namespace": "elasticsearch"
},"Peers": [
{
"Name": "5341d18c2eb1","IP": "10.0.0.7"
},{
"Name": "c476ac76244e","IP": "10.0.0.16"
},{
"Name": "2ebc9eb2cd10","IP": "10.0.0.8"
}
]
}
]
底部 IP(10.0.0.7、10.0.0.8 和 10.0.0.16)与节点 IP 匹配。但是,顶级 IP (10.0.3.X) 是自动生成的,而不是 Azure。
有没有办法说我希望 9200 端口在节点 IP 上? 我已经尝试使用 external.name = "host" 但我没有工作。
有人可以帮我吗?
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。