让我们考虑一个简单的案例:
services:
elasticsearch:
image: elasticsearch:alpine
ports:
- "9200:9200"
- "9300:9300"
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- ./elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
networks:
- backend
deploy:
replicas: 3
networks:
- backend:
driver:
overlay
我们有三个副本,每个服务都有一个VirtualIP地址。另请注意,这些地址是 覆盖网络地址。此外,service_names解析为VirtualIP。 现在,请告诉我:
VirtualIP是否已负载均衡?我的意思是以下情况:
nc 10.0.0.4 9200
在后台(使用负载平衡),我被重定向到10.0.0.2
(另一项服务)。
nc elasticsearch_1 9200
呢?
创建三个回复或三个单独的服务有意义吗?
答案 0 :(得分:0)
通过Google在Docker Swarm中有正确的Elasticsearch设置示例。设计会根据es群集的大小和需求而有所不同。
您可能希望每个节点成为具有一个副本的自己的服务。在较小的环境中,这更易于管理,因为通常,副本应可互换,并且es节点是具有各自配置和特定数据存储的特定应用。
在创建服务时,请禁用VIP,以便使该服务的跳数减少一倍(因为每个将仅是一个副本)。因此,将--endpoint-mode dnsrr
添加到服务创建中,或添加add it to your stack/compose file。