使用Docker安裝Elasticsearch

分享于 

9分钟阅读

Elasticsearch

 

Elasticsearch也可以作为Docker镜像使用,镜像使用centos 7作为基础镜像。

所有已发布的Docker镜像列表在www.docker.elastic.co,源文件位于github

这些镜像可以在 Elastic 许可下自由使用,它们包含开源和免费商业特性,以及付费的商业特性,有关 Elastic 许可级别的信息,请参见订阅页面。

提取镜像

获取适用于Docker的Elasticsearch就像对Elastic Docker注册表发出docker pull命令一样简单。


docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.2

或者,你可以下载其他Docker镜像,其中仅包含Apache 2.0许可下可用的功能,要下载镜像,请转到www.docker.elastic.co

使用node集群启动单个Docker

要启动用于开发或测试的单个节点Elasticsearch集群,请指定单节点发现绕过Bootstrap检查


docker run-p9200:9200-p9300:9300-e"discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.6.2

使用Docker Compose启动多节点集群

要启动一个三节点Elasticsearch集群并在Docker中运行,你可以使用Docker Compose:

  • 创建docker-compose.yml文件:

version:'2.2'
services:
es01:
image:docker.elastic.co/elasticsearch/elasticsearch:7.6.2
container_name:es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
-"ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft:-1
hard:-1
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
es02:
image:docker.elastic.co/elasticsearch/elasticsearch:7.6.2
container_name:es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
-"ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft:-1
hard:-1
volumes:
- data02:/usr/share/elasticsearch/data
networks:
- elastic
es03:
image:docker.elastic.co/elasticsearch/elasticsearch:7.6.2
container_name:es03
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
-"ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft:-1
hard:-1
volumes:
- data03:/usr/share/elasticsearch/data
networks:
- elastic

volumes:
data01:
driver:local
data02:
driver:local
data03:
driver:local

networks:
elastic:
driver:bridge

这个示例Docker Compose文件打开一个三节点Elasticsearch集群,node es01在和localhost:9200上侦听通过网络与es02 talk。

请注意,此配置在所有网络接口上公开端口9200,并且给定Docker在上如何操作iptables,这意味着,如果不想公开端口9200,而是使用反向代理,则将9200:9200替换为docker-compose.yml文件中的127.0.0.1:9200:9200,然后,Elasticsearch只能从主机本身访问。

Dockerdata01data02重新启动数据,并且目录,如果它们不存在,当你启动集群时,docker-compose将创建它们。

确保Docker引擎分配至少4GiB个内存,在Docker Desktop中,在首选项(macOS )或设置(Windows )的高级选项卡上配置资源使用情况。

Docker Compose未与Docker在Linux上预安装,有关安装说明,请参见docs.docker.com:在Linux上安装Compose

运行docker-compose来启动集群:


docker-compose up

提交一个_cat/nodes请求,查看节点已经启动并运行:


curl-X GET"localhost:9200/_cat/nodes?v&pretty"

日志消息转到控制台,由配置的Docker日志记录驱动程序处理,默认情况下,你可以使用docker logs访问日志。

要停止集群,请运行docker-compose down,Docker卷中的数据在使用docker-compose up重新启动集群时被保留和加载,到删除数据卷关闭集群时,请指定-v选项:docker-compose down -v

在生产中使用Docker镜像

在生产中运行Elasticsearch在Docker时,有以下要求和建议。

vm.max_map_count设置为至少262144

vm.max_map_count内核设置必须设置为至少262144才能用于生产使用。

设置vm.max_map_count的方式取决于你的平台:

Linux

vm.max_map_count设置应在/etc/sysctl.conf中永久设置:


grep vm.max_map_count/etc/sysctl.conf
vm.max_map_count=262144

要对live系统应用设置,请运行:


sysctl-w vm.max_map_count=262144

macOS Mac的Docker

vm.max_map_count设置必须在xhyve虚拟机中设置:

在命令行,运行:


screen~/Library/Containers/com.docker.docker/Data/vms/0/tty

按enter并使用$sysctl来配置vm.max_map_count


sysctl-w vm.max_map_count=262144

  • 要退出screen会话,请键入Ctrl ad

Windows和macOS的用法Docker Desktop

vm.max_map_count设置必须通过docker机器设置:


docker-machine ssh
sudo sysctl-w vm.max_map_count=262144

配置文件必须可由elasticsearch用户读取编辑

默认情况下,Elasticsearch使用uid:gid 1000:0作为用户elasticsearch在容器内运行。

一个例外是 Openshift,它使用任意分配的用户ID运行容器,Openshift呈现持久卷,将gid设置为0,无需调整。

如果要绑定挂载本地目录或文件,就必须由elasticsearch用户读取,此外,此用户必须有对数据和日志目录,一个好的策略是为本地目录授予对gid 0的组访问权限。

例如,为通过绑定挂载存储数据准备本地目录:


mkdir esdatadir
chmod g+rwx esdatadir
chgrp0 esdatadir

作为最后的手段,可以通过环境变量数据和日志目录强制容器改变用于的绑定挂载的所有权,执行此操作时,它们将由uid:gid 1000:0拥有,它提供对Elasticsearch的读写访问。

为nofile和nproc增加ulimit

nofilenproc增加的ulimit必须为Elasticsearch容器提供,验证初始化系统用于Docker守护进程将它设置为可接受的值。

要检查ulimit的Docker守护进程默认值,请运行:


docker run--rm centos:7/bin/bash-c'ulimit -Hn && ulimit -Sn && ulimit -Hu && ulimit -Su'

如果需要,在守护进程中调整它们,或者覆盖每个容器,例如在使用docker run时,设置:


--ulimit nofile=65535:65535


相关文章