Elasticsearch环境快速搭建以及注意点

mengyue 2020-03-06

本文主要说明使用docker搭建开发用Elasticsearch的相关要点,包含有:

搭建Elasticsearch集群docker环境

搭建Kibana的docker环境

一、搭建Elasticsearch环境

docker下存在两个标准的Elasticsearch镜像,分别为elasticsearch:latest 和 docker.elastic.co/elasticsearch/elasticsearch ,前者目前的Elasticsearch版本为5.*,版本略微落后;后者最新版本为 7.6.0 。

本文使用后者,部署为单节点的集群,并且通过内置x-pack开通SSL安全加密和Basic账号密码登录。

1,首先,创建cert证书,并存储于本地docker volume中备用。

[~/docker-compose/elasticsearch]$ cat create_certs.yaml
version: "3"
services:
  create_certs:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.0
    command: >
      bash -c ‘
        yum install -y -q -e 0 unzip;
        if [[ ! -f /certs/bundle.zip ]]; then
          bin/elasticsearch-certutil cert --silent --pem --in config/certificates/instances.yml -out /certs/bundle.zip;
          unzip /certs/bundle.zip -d /certs;
        fi;
        chown -R 1000:0 /certs
      ‘
    user: "0"
    working_dir: /usr/share/elasticsearch
    volumes:
      - certs:/certs
      - .:/usr/share/elasticsearch/config/certificates
volumes:
  certs:

执行上述一次性命令(执行过程中,所需要的instances.yml文件参见下文),并妥善保管该volume(certs)

1 docker-compose -f create_certs.yaml run --rm create_certs

执行成功后,应该可以看见如下结果

1 [~/docker-compose/elasticsearch]$ docker volume ls
2 DRIVER              VOLUME NAME
3 local               elasticsearch_certs

执行过程中,所需要的instances.yml文件如下:

[~/docker-compose/elasticsearch]$ cat instances.yml
instances:
  - name: es01
    dns:
      - es01
      - localhost
    ip:
      - 127.0.0.1%

注意,其中的es01,应该对应部署es集群节点的服务器的主机名,此处由于是docker环境,因此应该为docker-compose的service的名字(以在docker container中可以正常ping通该字符串到对应container为标准),若集群存在多个节点,则应该列出多个主机名

然后正式启动Elasticsearch集群:

[~/docker-compose/elasticsearch]$ cat docker-compose.yaml
version: "3"
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.0
    environment:
      # - "discovery.type=single-node"
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01
      - cluster.initial_master_nodes=es01
      - cluster.max_shards_per_node=10000
      - bootstrap.memory_lock=true
      - action.destructive_requires_name=false
      - ELASTIC_PASSWORD=abc
      # - ELASTIC_PASSWORD_FILE=/run/secrets/bootstrapPassword.txt
      - xpack.security.enabled=true
      - xpack.security.http.ssl.enabled=true
      - xpack.security.http.ssl.key=/usr/share/elasticsearch/config/certs/es01/es01.key
      - xpack.security.http.ssl.certificate_authorities=/usr/share/elasticsearch/config/certs/ca/ca.crt
      - xpack.security.http.ssl.certificate=/usr/share/elasticsearch/config/certs/es01/es01.crt
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.verification_mode=none
      - xpack.security.transport.ssl.certificate_authorities=/usr/share/elasticsearch/config/certs/ca/ca.crt
      - xpack.security.transport.ssl.certificate=/usr/share/elasticsearch/config/certs/es01/es01.crt
      - xpack.security.transport.ssl.key=/usr/share/elasticsearch/config/certs/es01/es01.key
      - reindex.remote.whitelist=10.20.1.*:9200,127.0.10.*:9200, localhost:*
      - "http.cors.enabled=true"
      - "http.cors.allow-origin=*"
      - "http.cors.allow-headers=Authorization,X-Requested-With,Content-Length,Content-Type"
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ports:
      - "9200:9200"
      - "9300:9300"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./data01:/usr/share/elasticsearch/data
      - certs:/usr/share/elasticsearch/config/certs
      - ./plugins:/usr/share/elasticsearch/plugins
volumes:
  certs:
    driver: local

此处挂载前面步骤创建的certs volume进行使用;

注意:

1)若在前面的步骤中,不创建volume而是直接将证书生成在本地目录,则此地挂在本地目录时,应该妥善处理目录以及其中文件的属主和权限;

2)certs卷必须挂载到路径 /usr/share/elasticsearch/config 下,否则启动时报错,原因为ES安全规则不允许;但若直接挂载为 /usr/share/elasticsearch/config 目录则会覆盖该目录中的其他默认配置文件,因此此处挂载为其子目录

3)对于ES标准配置文件中支持的配置,均可以在environment节中通过环境变量的方式进行配置,当然,也可以提供自己的完整的配置文件(对于docker镜像elasticsearch:latest,提供这些配置的方式为提供command段,以- -Exxxx: xxxx的方式处理)

至此,ES成功启动,可在浏览器中通过  https://localhost:9200 地址进行访问,默认的用户名为  elastic  ,密码在上述配置文件中配置,为 abc  。

注意:

1)在Firefox浏览器和Safari中,需要按照页面提示忽略证书警告

2)在Chrome内核系列浏览器,则根据不同环境和版本而不同,部分可以按照页面提示忽略证书警告,部分需要将浏览器地址栏前报警的SSL证书导入信任证书列表

启动kibana

使用如下docker-compose.yaml启动kibana

kibana:
    image: docker.elastic.co/kibana/kibana:7.6.0
    environment:
      # SERVER_HOST: "0.0.0.0"
      ELASTICSEARCH_HOSTS: "https://es01:9200"
      ELASTICSEARCH_SSL_VERIFICATIONMODE: none
      ELASTICSEARCH_USERNAME: elastic
      ELASTICSEARCH_PASSWORD: abc
      I18N_LOCALE: zh_CN
    links:
      - "es01"
    ports:
      - 5601:5601

注意点:

1)kibana的镜像版本需要与ES的版本保持一致;若不一致,不保证不出问题

2)标准kibana的配置文件kibana.yml中的配置,均可以使用Spring的标准配置项的环境变量映射方式在 environment 段进行配置;具体标准简述:字母一律转换为大写,分割用的 . 号和中划线 - 一律转换为下划线 _ 

至此,部署完毕。

相关推荐