Docker安装

Elasticsearch有Docker镜像。镜像使用 centos:7 作为基本镜像。

有关所有已发布的Docker镜像和标记的列表,请访问 www.docker.elastic.co。源文件在 Github 中。

此软件包可在Elastic许可下免费使用。它包含开源和免费商业功能以及付费商业功能。开始 为期30天的试用,试用所有付费商业功能。有关Elastic许可级别的信息,请参阅 订阅 页面。

拉取镜像

获取Elasticsearch镜像仅需要发送docker pull命令到Elastic Docker中心。

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

或者,您可以下载仅包含Apache 2.0许可下可用功能的其他Docker映像。要下载图像,请访问 www.docker.elastic.co。

命令行运行

开发模式

使用以下命令可以快速启动Elasticsearch以进行开发或测试:

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.7.1

生产模式

重要

vm.max_map_count内核设置需要设置为至少262144才能用于生产环境。根据您的平台:

  • Linux

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

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

    要在实时系统上应用该设置,请执行以下操作: sysctl -w vm.max_map_count=262144

  • Docker for MacOS

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

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

    只需按Enter键并配置sysctl,就像对待Linux一样:

    sysctl -w vm.max_map_count=262144
    
  • Windows和macOS的Docker Toolbox

    必须通过docker-machine设置vm.max_map_count设置:

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

以下示例显示包含两个Elasticsearch节点的集群。要打开集群,请使用 docker-compose.yml 并输入:

docker-compose up

注意

Linux上的Docker未预装docker-compose。可以在 Docker Compose网页 上找到安装它的说明。

节点elasticsearch侦听localhost:9200elasticsearch2通过Docker网络与elasticsearch通讯。

此示例还使用名为esdata1esdata2的Docker命名卷,如果尚未存在,将创建它们。

docker-compose.yml
version: '2.2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.7.1
    container_name: elasticsearch
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata1:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - esnet
  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.7.1
    container_name: elasticsearch2
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "discovery.zen.ping.unicast.hosts=elasticsearch"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata2:/usr/share/elasticsearch/data
    networks:
      - esnet

volumes:
  esdata1:
    driver: local
  esdata2:
    driver: local

networks:
  esnet:

要停止集群,请键入docker-compose down。数据卷将持久化存在,因此可以使用docker-compose up使用相同的数据再次启动集群。要销毁集群和数据卷,只需键入docker-compose down -v即可。

检查集群的状态

curl http://127.0.0.1:9200/_cat/health
1472225929 15:38:49 docker-cluster green 2 2 4 2 0 0 0 0 - 100.0%

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

Docker配置Elasticsearch

Elasticsearch从/usr/share/elasticsearch/config/中的文件加载配置。配置项记录在 配置JVM配置

该镜像提供了几种配置Elasticsearch设置的方法,传统方法是提供自定义文件,即elasticsearch.yml。也可以使用环境变量来设置选项:

A. 通过Docker环境变量传入参数

例如,要使用docker run定义集群名称,可以传递 -e "cluster.name=mynewclustername"。双引号是必需的。

B. 绑定配置

创建自定义配置文件并将其挂载到映像的相应文件上。例如,可以使用以下参数来执行docker run绑定挂载custom_elasticsearch.yml

-v full_path_to/custom_elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

重要

容器使用uid:gid 1000:1000作为用户elasticsearch运行Elasticsearch。绑定挂载的主机目录和文件(例如上面的custom_elasticsearch.yml)需要此用户可以访问。对于 数据和日志目录,例如/usr/share/elasticsearch/data,还需要写访问权限。另见下面的注释1。

C. 定制镜像

在某些环境中,自定义镜像可能更有意义,自定义Dockerfile很简单:

FROM docker.elastic.co/elasticsearch/elasticsearch:6.7.1
COPY --chown=elasticsearch:elasticsearch elasticsearch.yml /usr/share/elasticsearch/config/

然后,您可以使用以下内容构建镜像:

docker build --tag=elasticsearch-custom .
docker run -ti -v /usr/share/elasticsearch/data elasticsearch-custom

某些插件需要其他安全权限。您必须在运行Docker映像时附加tty,并在提示是否接受时选择yes,或者单独检查安全权限,以及您是否愿意将—batch标志添加到plugin install命令来明确接受它们。有关详细信息,请参阅 插件管理文档

D. 覆盖镜像的默认CMD

通过覆盖镜像的默认命令,可以将命令行选项传递给Elasticsearch进程。例如:

docker run <various parameters> bin/elasticsearch -Ecluster.name=mynewclustername

配置Elasticsearch Docker镜像的SSL/TLS

请参阅 Docker容器间通讯加密

生产环境的说明和默认值

我们收集了许多生产用途的最佳实践。下面提到的任何Docker参数都假定使用docker run

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

警告

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

如果要挂载本地目录或文件,请确保此用户可以读取,而 数据和日志目录 还需要写访问权限。一个好的策略是为本地目录授予对gid 10000的组访问权限。例如,要准备一个本地目录来挂载存储数据:

mkdir esdatadir
chmod g+rwx esdatadir
chgrp 1000 esdatadir

作为最后的手段,您还可以强制容器通过环境变量TAKE_FILE_OWNERSHIP,来改变 数据和日志目录 的挂载所有权。在这种情况下,它们将由uid:gid 1000:0 根据需要提供对Elasticsearch进程的读/写访问权限。

  1. 确保为elasticsearch容器提供nofilenproc的增加的ulimits非常重要。验证Docker守护程序的 init system 是否已将这些设置为可接受的值,如果需要,可以在守护程序中调整它们,或者为每个容器覆盖它们,例如使用docker run
--ulimit nofile=65535:65535

注意

检查上述ulimits的Docker守护程序默认值的一种方法是运行:

docker run --rm centos:7 /bin/bash -c 'ulimit -Hn && ulimit -Sn && ulimit -Hu && ulimit -Su'
  1. 需要禁用swapping以提高性能和节点稳定性。这可以通过 Elasticsearch文档 中提到的方法来实现。如果你选择bootstrap.memory_lock: true方法,除了通过 配置方法 定义它之外,你还需要memlock: true 进行控制,在 Docker守护进程 中定义或为容器指定设置。这在上面的 docker-compose.yml 进行了展示。如果使用docker run
-e "bootstrap.memory_lock=true" --ulimit memlock=-1:-1
  1. 该镜像 暴露 TCP端口9200和9300。对于集群,建议使用--publish-all随机化已发布的端口,除非您为每个主机固定一个容器。

  2. 使用ES_JAVA_OPTS环境变量来设置堆大小。例如,docker run使用-e ES_JAVA_OPTS="-Xms16g -Xmx16g"来配置为16G。

  3. 部署指定版本的Elasticsearch映像。例如,docker.elastic.co/elasticsearch/elasticsearch:6.7.1

  4. 始终挂载/usr/share/elasticsearch/data卷,如 生产模式 中所示,原因如下:

    a. 容器被关闭时,elasticsearch节点的数据不会丢失

    b. Elasticsearch对I/O敏感,Docker存储驱动程序不适合快速I/O.

    c. 允许使用高级 Docker卷插件

  5. 如果您使用的是devicemapper存储驱动程序,请确保未使用默认的loop-lvm模式。配置使用docker-engine代替 direct-lvm

  6. 请考虑使用其他 日志驱动程序 集中采集日志。另请注意,默认的json-file日志记录驱动程序不适合生产环境。

下一步

您现在已经设置了测试Elasticsearch环境。在开始认真开发或使用Elasticsearch投入生产之前,您必须进行一些额外的设置:

results matching ""

    No results matching ""