使用docker-compose搭建Elasticsearch集群环境时的笔记
题目如所示。
構築方法已经由前辈们整理并在网络上分享了。然而,由于我的环境与他们的情况不完全一样,所以有一些无法按照他们的方法顺利进行的地方。因此,我将总结自己尝试的结果。我已经将用于搭建的YAML文件等上传至下方的GitHub页面。
创建单独的 VirtualBox
如果不做任何思考,只是写好 docker-compose.yml 并执行,就会默认启动一个名为 default 的虚拟机。如果没有使用 default,那么就没有任何问题,但是由于我已经在其他地方使用了 default 的虚拟机,所以这样使用会有些困扰。
所以,我们将创建一个用于验证的虚拟机。可以使用一个更有创意的名称,比如 “es-default”。
$ docker-machine create --driver virtualbox es-default
制作完成后启动。
$ docker-machine start es-default
所以,这里很重要。
一旦Docker Machine启动,需要增加虚拟内存数。
如果不这样做,Elasticsearch无法在Docker上启动。
$ docker-machine ssh es-default "cat /proc/sys/vm/max_map_count"
65530
$ docker-machine ssh es-default "sudo sysctl -w vm.max_map_count=262144"
vm.max_map_count = 262144
$ docker-machine ssh es-default "cat /proc/sys/vm/max_map_count"
262144
启动 Elasticsearch
一旦准备好虚拟机后,准备docker-compose.yml文件,然后开始启动Elasticsearch。最终生成的YAML文件如下(可能还有改进的余地,但基本是这样的)。
version: '2.2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.5.0
container_name: elasticsearch
environment:
- node.name=es01
- discovery.zen.ping.unicast.hosts=elasticsearch2
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes:
- ./elasticsearch/data:/usr/share/elasticsearch/data
- ./elasticsearch/logs:/var/log/elasticsearch
- ./elasticsearch/config/elasticsearch-cluster.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- 9200:9200
- 9300:9300
networks:
- esnet
elasticsearch2:
image: docker.elastic.co/elasticsearch/elasticsearch:6.5.0
container_name: elasticsearch2
environment:
- node.name=es02
- discovery.zen.ping.unicast.hosts=elasticsearch
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes:
- ./elasticsearch/data:/usr/share/elasticsearch/data
- ./elasticsearch/logs:/var/log/elasticsearch
- ./elasticsearch/config/elasticsearch-cluster.yml:/usr/share/elasticsearch/config/elasticsearch.yml
networks:
- esnet
networks:
esnet:
使用上述的YAML文件,执行下面的命令,启动配置为集群的Elasticsearch。
$ docker-compose up -d
Creating network "elasticsearchclusterandkibanausingdockercompose_esnet" with the default driver
Creating elasticsearch ... done
Creating elasticsearch2 ... done
如果在这里出现以下错误,请使用env命令打开显示的最后一个eval命令。
ERROR: Windows named pipe error: 指定されたファイルが見つかりません。 (code: 2)
$ docker-machine env es-default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="C:\Users\user\.docker\machine\machines\es-default"
export DOCKER_MACHINE_NAME="es-default"
export COMPOSE_CONVERT_WINDOWS_PATHS="true"
# Run this command to configure your shell:
# eval $("{Docker Path}docker-machine.exe" env es-default)
由于我的计算机配置较低,启动需要花费一些时间,所以我在查看日志时确认了是否成功启动。
$ docker-compose logs -f
一旦启动后,将使用ps命令来确认状态。
如果成功启动,则会检查集群状态。
# IP アドレスを確認しておく
$ docker-machine ip es-default
192.168.99.100
$ curl http://192.168.99.100:9200/_cluster/health?pretty
{
"cluster_name" : "docker-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 2,
"number_of_data_nodes" : 2,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
似乎无故障状态也能以绿色启动。
除了执行添加索引和添加文档等操作外,至此为止,今天已经完成了启动集群的配置。
完成验证后,不要忘记关闭正确设立的Docker或虚拟机。
$ docker-compose down
$ docker-machine stop es-default
请参阅相关资料
为了实现这些目标,我参考了各种总结。非常感谢前辈们!
在您的笔记本电脑上使用Docker Compose运行一个带有3个节点的Elasticsearch集群进行测试
使用Docker快速安装Elasticsearch和Kibana(单节点和多节点)
使用docker-compose安装Elasticsearch集群和Kibana
第四章:安装和配置Elasticsearch,修改配置文件(yml)并启动Elasticsearch
使用Docker安装Elasticsearch
对于初学者有用的Docker(compose)命令集
在引入Elasticsearch之前需要注意的事项!
在受内存限制的情况下启动Elasticsearch 5的Docker容器