通过Docker安装 --X-PACK

Elasticsearch同样也提供Docker镜像. 这个镜像使用Centos:7作为基础镜像, 并且支持X-PACK

Docker镜像和标签列表可以在这个网站上找到, www.docker.elastic.co. 源码在这里 https://github.com/elastic/elasticsearch-docker/tree/6.2

镜像类型

镜像有三种类型, basic, 默认类型, 包含部分功能的X-PACK, 免费的授权协议. platinum, 完全的X-PACK功能, 30天的试用. OSS, 不包含X-PACK, 开源版本的Elasticsearch.

platinum镜像开启了X-PACK-SECURITY, 为了访问你的集群, 有必要为elastic用户设置密码, 可以在启动的时候通过ELASTIC_PASSWORD环境变量来设置

docker run -e ELASTIC_PASSWORD=MagicWord docker.elastic.co/elasticsearch/elasticsearch-platinum:6.2.4

platinum可以试用30天, 在那之后, 你可以选择购买, 或者使用免费的授权, 那只包含部分X-PACK功能.

可以简单的通过docker pull来获取Elasticsearch的docker镜像

docker pull docker.elastic.co/elasticsearch/elasticsearch:6.2.4
docker pull docker.elastic.co/elasticsearch/elasticsearch-platinum:6.2.4
docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:6.2.4

从命令行启动Elasticsearch

开发模式

为了开发或者测试, 可以在命令行通过以下命令来快速启动Elasticsearch:

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

生产环境

生产环境使用的话, vm.max_map_count这个内核设置至少设置成262144. 根据你的系统:

  • Linux 可以在/etc/sysctl.conf里永久设置
$ grep vm.max_map_count /etc/sysctl.conf
vm.max_map_count=262144

在一台启动的机器上应用设置: sysctl -w vm.max_map_count=262144

  • macOS, Docker For Mac

必须使用xhyve virtual machine来设置

$ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty

用root登录, 之后和linux上的设置一样

sysctl -w vm.max_map_count=262144
  • Windows 和 macOS: Docker toolbox

通过docker-machine来设置

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

下面的例子启动了2个Elasticsearch节点的集群, 使用docker-compose.yml和下面的命令:

docker-compose up

docker-compose 在linux上没有和docker一起安装, 你需要自己安装 https://docs.docker.com/compose/install/#install-using-pip

节点Elasticsearch监听在本机的9200端口, Elasticsearch2通过docker网络和和Elasticsearch通信.

这个例子还使用了docker命名卷, esdata1和esdata2, 如果不存在则会被创建.

docker-compose.yml

version: '2.2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.2.4
    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.2.4
    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 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 logs来查看.

配置Elasticsearch

Elasticsearch从/usr/share/elasticsearch/config/读取配置文件.

https://www.elastic.co/guide/en/elasticsearch/reference/6.2/settings.html

https://www.elastic.co/guide/en/elasticsearch/reference/6.2/jvm-options.html

这个镜像提供几种方法来配置Elasticsearch, 常规的方法是提供一个自定义的elasticsearch.yml, 当然也可以用环境变量来设置.

  • 通过docker环境变量呈现参数

举个例子, 可以在docker run命令中使用-e "cluster.name=mynewclustername"来设置集群名, 注意双引号是必须的.

  • 绑定挂在配置文件

创建自己的配置文件并挂在到镜像对应的文件. 举个例子, 挂在一个custom-elasticsearch.yml, 通过docker run命令运行:

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

容器会用Elasticsearch用户运行, uid:gid为1000:1000, 挂在的宿主机目录和文件, 例如custom-elasticsearch.yml., 都必须可以被这个用户访问, 对于数据和日志目录, 比如/usr/share/elasticsearch/data, 还需要写入权限.

  • 自定义镜像

在某些环境中, 可能准备一个包含你的配置的镜像会更合适. 用Dockerfile, 会十分的方便.

FROM docker.elastic.co/elasticsearch/elasticsearch:6.2.4
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
  • 覆盖镜像的默认CMD
docker run <various parameters> bin/elasticsearch -Ecluster.name=mynewclustername

Elasticsearch镜像配置SSL/TLS

https://www.elastic.co/guide/en/elasticsearch/reference/6.2/configuring-tls-docker.html

生产环境注意事项

生产环境使用有一些最佳实践, 下面提到的docker参数都假设是针对于docker run的.

  • 默认情况下容器使用用户elasticsearch uid:gid 为1000:1000. 如果你挂在本地的目录或者文件, 确保此用户可读,数据和日志目录还需要写入权限, 一个好的策略是, 对本地目录授予组访问权限给1000或者0, 例子如下
mkdir esdatadir
chmod g+rwx esdatadir
chgrp 1000 esdatadir

不得已的时候, 可以强制更改用户.

  • 提高nofile和npoc的限制
  • 为了性能和稳定性, 禁用swapping
  • 镜像跑路9200和9300端口, 对于集群,建议随机暴露端口, --publish-all
  • 用ES_JAVA_OPTS来设置堆大小
  • 指定固定的版本
  • 始终挂在/usr/share/elasticsearch/data目录
    • 你的数据不会丢失
    • elasticsearch对io很敏感, docker不擅长
    • 可以使用高级的卷插件
  • 如果你使用devicemapper存储驱动, 不要用默认的loop-lvm模式. 用direct-lvm
  • 通过使用不同的日志驱动来中心化你的日志, 而且默认的json格式的日志也不是很适合生产环境

results matching ""

    No results matching ""