Docker安装方式
Elasticsearch也提供了可用的Docker镜像,镜像包含了X-Pack。
安全提示
提示
X-Pack被在此镜像中预装。请花几分钟时间来熟悉X-Pack安全和如何更改默认密码。默认用户
elastic的密码为changeme提示
X-Pack包含了30天的体验License,在这之后你需要选择激活购买或禁用安全插件。基础的License是免费的且包含了监控插件。
获取Elasticsearch镜像只需要一个简单的docker pull指令就可以从Elastic Docker仓库中得到。
如下命令演示了提取Docker镜像:
docker pull docker.elastic.co/elasticsearch/elasticsearch:5.3.0在命令行中运行Elasticsearch
开发模式
Elasticsearch可以通过下面的指令快起的在开发或测试环境中启动:
docker run -p 9200:9200 -e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" docker.elastic.co/elasticsearch/elasticsearch:5.3.0生产模式
重要提示
用于生产
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
OSX with Docker for Mac
vm_max_map_count参数必须要在xhyve虚拟机中配置:$ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty登录到root用户下,像Linux那样通过
sysctl来配置sysctl -w vm.max_map_count=262144
OSX with Docker Toolbox
vm_max_map_count参数必须要在docker-machine中配置:docker-machine ssh sudo sysctl -w vm.max_map_count=262144
下面的示例演示了启动一个包含两个节点的集群。启动集群之前,你需要编写好docker-compose.yml,然后输入:
docker-compose up注意
如果Linux上没有预安装
docker-compose指令,请参考此站点进行安装:docker-compose。
elasticsearch1节点将会监听localhost:9200,并且elasticsearch1与elasticsearch2将会通过Docker网络通信。
这个例子还使用Docker named volumes,被称为esdata1和esdata2,,如果不存在会先创建。
docker-compose.yml:
version: '2'
services:
  elasticsearch1:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.3.0
    container_name: elasticsearch1
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    mem_limit: 1g
    cap_add:
      - IPC_LOCK
    volumes:
      - esdata1:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - esnet
  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.3.0
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "discovery.zen.ping.unicast.hosts=elasticsearch1"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    mem_limit: 1g
    cap_add:
      - IPC_LOCK
    volumes:
      - esdata2:/usr/share/elasticsearch/data
    networks:
      - esnet
volumes:
  esdata1:
    driver: local
  esdata2:
    driver: local
networks:
  esnet:
    driver: bridge若要停掉整个集群,输入docker-compose down即可。数据目录会被保留下来,所以再次通过docker-compose up启动整个集群会得到之前的数据。如要停止整个集群且删除之前的数据,请使用docker-compose down -v即可。
检查集群状态
curl -u elastic http://127.0.0.1:9200/_cat/health
Enter host password for user 'elastic':
1472225929 15:38:49 docker-cluster green 2 2 4 2 0 0 0 0 - 100.0%日志信息将被输出到控制台且被Docker日志驱动处理。默认情况下你可以通多docker logs来获取日志信息。
在Docker中配置Elastcsearch
Elasticsearch从/usr/share/elasticsearch/config文件中加载配置。这些配置文件的文档在Elasticsearch设置与JVM设置。
镜像通过了配置多种方式,传统的是修改elasticsearch.yml文件,但也可以通过环境变量来设置参数:
A.通过Docker环境变量方式设置
例如,在使用docker run的时候输入-e "cluster.name=mynewclustername"来定义集群名称。双引号是必须的。
注意
默认设置与普通设置有一些区别。如果你定义了,模板中以
default.开头的普通设置将不会被覆盖。
B.绑定挂载文件方式设置
创建一个自定义的配置文件并挂载到镜像中配置文件同样的路径。例如,使用docker run时绑定挂载一个custom_elasticsearch.yml的参数:
-v full_path_to/custom_elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml重要
custom_elasticsearch.yml需要能够被uid:gid 1000:1000读取。
C.自定义镜像
在某些环境中,你可以需要自定义镜像包括你的配置。一个完整的Dockerfile可能像是下面这个样子:
FROM docker.elastic.co/elasticsearch/elasticsearch:5.3.0
ADD elasticsearch.yml /usr/share/elasticsearch/config/
USER root
RUN chown elasticsearch:elasticsearch config/elasticsearch.yml
USER elasticsearch然后您可以像这样尝试构建:
docker build --tag=elasticsearch-custom .
docker run -ti -v /usr/share/elasticsearch/data elasticsearch-customD.覆盖镜像默认的命令行参数
可以通过镜像的默认指令来覆盖Elsticsearch提供的命令行参数,例如:
docker run <various parameters> bin/elasticsearch -Ecluster.name=mynewclustername生产使用以及默认值的注意事项
我们收集了一些生产使用的最佳实践配置。
注意
所有提及到的参数都假定你使用
docker run。
通过Docker CLI设置正确的容量与限制非常重要。正如前面看到的docker-compose.yml示例,以下选项是必需的:
--cap-add=IPC_LOCK --ulimit memlock=-1:-1 --ulimit nofile=65536:65536确保bootstrap.memory_lock被设置为true,原因见禁用swapping。你可以参考之前介绍的配置方式,例如通过环境变量采用
-e "bootstrap.memory_lock=true"设置。镜像将expose(发布) 9200与9300的TCP端口。建议集群通过
--publish-all发布在随机的端口,除非你在每个机器上只运行一个容器。使用
ES_JAVA_OPTS环境变量设置JVM堆大小,例如在docker run的时候设置堆大小为16GB:-e ES_JAVA_OPTS="-Xms16g -Xmx16g"。还建议设置容器的内存限制。明确指定你部署的Elasticsearch镜像版本,譬如:
docker.elastic.co/elasticsearch/elasticsearch:5.3.0。如果你使用的是
devicemapper存储驱动(最新基于RedHat(rpm)的发型版本默认是这个),请确保不是使用默认的loop-lvm模式,配置docker引擎才使用direct-lvm替代它。考虑采用不同的日志驱动来集中式管理你的日志。再者说默认的
json-file日志驱动也不太适合用于生产。
下一步
现在,您搭建了一个测试环境Elasticsearch。开始更深入的研究或投入生产使用Elasticsearch之前,你需要做一些额外的配置:
了解如何配置Elasticsearch。
配置重要的系统设置。
Last updated
Was this helpful?