elasticsearch容器化部署双节点集群

Published on 2021-04-12 14:07 in 分类: 博客 with 狂盗一枝梅
分类: 博客

一、单节点运行

首先,到hub.docker.com搜索指定版本的elasticsearch,以5.3.0为例:https://hub.docker.com/_/elasticsearch?tab=tags&page=1&ordering=last_updated&name=5.3.0,确认docker镜像存在之后,使用docker pull elasticsearch:5.3.0命令拉取镜像。

然后,查看Description,里面有详细的运行方法,对于想要玩一玩的开发者,可以使用单节点运行方式

$ docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag

运行es容器。

二、集群部署

如果想要运行在生产模式,则需要参考下es官方文档的描述,以当前最新版7.5的运行来说,文档链接:https://www.elastic.co/guide/en/elasticsearch/reference/7.5/docker.html,如果想要运行其它版本的docker容器,可以通过右侧版本下拉列表选取指定的版本

选取指定版本es容器部署文档

比如这里选取5.3版本,文档链接:https://www.elastic.co/guide/en/elasticsearch/reference/5.3/docker.html

在正式使用docker部署es集群之前,一定要仔细看看文档。

1. xpack

image-20210412134120843

安装文档第一行就是这段文字,文字的大体意思就是xpack已经预先安装在了容器之中,授权30天的使用时间,可以等过期之后花钱续期,也可以现在就关闭xpack。

关于xpack,其使用文档链接如下:https://www.elastic.co/guide/en/x-pack/5.3/security-getting-started.html

当然,为了防止以后的使用麻烦,这里最佳的选择就是直接关闭xpack,但是官方比较鸡贼的是没有提供如何在docker中关闭xpack的方法。

2.docker-compose

官方提供了5.3.3版本下的docker-compose部署脚本,部署脚本如下

version: '2'
services:
  elasticsearch1:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.3.3
    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.3
    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

这份脚本我认为是有问题的,首先,它只开放了9200端口号,在java sdk中,需要使用9300端口号;其次,elasticsearch2未开放任何端口号,这意味着对外端口号随机开放,使用起来非常不方便;最后,这里并没有演示如何关闭xpack。

三、自定义镜像和docker-compose

1.安装ik分词插件和拼音插件

国人使用es肯定要使用ik分词插件或者pinyin插件,两个插件的下载地址如下:

ik分词插件:https://github.com/medcl/elasticsearch-analysis-ik/tags

pinyin插件:https://github.com/medcl/elasticsearch-analysis-pinyin/tags

安装这两个插件一定要注意:插件版本号要和es版本号完全一致,否则es启动会报错,提示使用正确的插件版本

为了方便使用,这里自定义docker镜像,并且之后在docker-compose中使用。下载好ik和pinyin插件之后将其解压到Dockerfile同级目录,然后写一个Dockerfile文件,Dockerfile文件如下

FROM docker.elastic.co/elasticsearch/elasticsearch:5.3.0
  
COPY ik /usr/share/elasticsearch/plugins/ik
COPY pinyin /usr/share/elasticsearch/plugins/pinyin

EXPOSE 9200 9300

运行以下命令生成myes:v1版本镜像

docker build . -t myes:v1

2.自定义docker-compose

目标是使用docker-compose启动双节点集群之后所有节点都要安装好ik分词和pinyin分词,还要关闭xpack,关于关闭xpack的方法,很多人想到是容器启动完成会后到容器中动态删除xpack,然后重启容器。。这种方式是行不通的,其实关闭xpack的方式很简单,只需要在docker-compose中加入两个环境变量就好了

environment:
      - xpack.security.enabled=false
      - xpack.monitoring.enabled=false

完整的docker-compose文件如下:

version: '2'
services:
  elasticsearch1:
    image: myes:v1
    container_name: elasticsearch1
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - xpack.security.enabled=false
      - xpack.monitoring.enabled=false
    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
      - 9300:9300
    networks:
      - esnet
  elasticsearch2:
    image: myes:v1
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "discovery.zen.ping.unicast.hosts=elasticsearch1"
      - xpack.security.enabled=false
      - xpack.monitoring.enabled=false
    ports:
      - 9201:9200
      - 9301:9300
    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 up -d

命令启动即可。

当然,可以先不加-d参数启动看看日志是否报错。


#elasticsearch #docker
目录