ElasticSearch Docker 部署实例

5,232 阅读7分钟

前言

虽然说要停更,但是有些东西还是需要记录一下的,尤其是这种,不需要动脑子,但是就是容易忘记需要注意的操作是需要进行记录的。

那么本篇博文需要做的就是使用docker容器部署ElasticSearch,如何从0开始进行搭建,同时设置账户和密码。 这里先说明一下的是,这里部署的是单节点的ElasticSearch,实话实话,之所以搞这个还是为了完成WhiteHole的一个搜索功能,但是考虑到服务成本的问题,所以还是考虑单节点。实际上,我们是完全可以考虑使用Mysql(>=5.7) 的分词来实现类似的效果的,因为数据量并不多的情况下,使用这个也是可以考虑的,但是为了考虑到以后扩展,还是打算先把Es给做进去,同时提供两套实现方案,后期通过nacos注册中心进行灵活调配,我使用哪一种方案。

不过也确实,脱离场景谈技术都是扯犊子,这套技术栈很好,但是对于当前的WhiteHole来说,属于是典型的堆技术栈,只能说面试唬唬人,从此以后我们具备了搭建分布式架构,并基于java微服务技术完成这一架构的开发能力,同时具备了多语言开发能力。

OK,吐槽归吐槽,我们还是来说一说,我们如何搭建。这里我使用的服务器是centos8,4核8GB。这里请注意你的系统版本。

基本环境构建

那么在开始之前,我们需要做的就是搭建好我们的环境。

Java安装

sudo yum -y install java-11-openjdk-devel

或:

sudo yum -y install java-11-openjdk

这两个都可以,上面那个把Java的一些额外的东西都会给你搞好。

docker安装

  1. 卸载可能存在的版本(看你自己,非必要)
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

  1. 安装docker

2.1 首先安装依赖:

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

2.2 然后设置镜像

yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache --refresh

2.3 最后安装社区版本

yum install -y docker-ce

到此docker安装完毕。

es部署

这个可以去docker 镜像那里去拉取,我这里也有一个7.12的 链接:pan.baidu.com/s/1tmBP7RHV… 提取码:6666

我在服务器这边创建了一个目录,然后上传了这个tar包 在这里插入图片描述 要的小伙伴自取。

之后我们加载一下镜像。

为了测试,我们先做单节点部署,看看行不行。

安装ES

我们先运行一下我们的docker

systemctl start docker

然后切换到 es.tar 的目录,我的目录是 /elastic

然后加载镜像

 docker load -i es.tar 

之后我们创建一个容器:

docker run -d \
	--name es \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network es-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.12.1

命令解释:

  • -e "cluster.name=es-docker-cluster":设置集群名称

  • -e "http.host=0.0.0.0":监听的地址,可以外网访问

  • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":内存大小

  • -e "discovery.type=single-node":非集群模式

  • -v es-data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定es的数据目录

  • -v es-plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录

  • --privileged:授予逻辑卷访问权

  • --network es-net :加入一个名为es-net的网络中

  • -p 9200:9200:端口映射配置

安装kibana

这个是咱们联调elastic用的。

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1

运行这个命令会自动帮助我们安装。

  • --network es-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中
  • -e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
  • -p 5601:5601:端口映射配置

可以看到有两个了 在这里插入图片描述 之后在浏览器打开 5601端口

由于一个DevTool 在这里插入图片描述

设置密码

之后的话,我们需要去设置密码,因为,现在是已经可以正常运行了,但是,没有设置密码,那么就意味,任何人都可以访问,那么这样做显然是不太OK的。(这里的话,为了安全,建议再做一个端口映射,如果需要公开暴露的话)

那么这里设置密码的话也是分别设置es的和kibabana的。这里不太一样的就是,我们需要去容器里面去修改配置。

进入es容器

首先我们需要找到,我们的容器。

docker container ls

在这里插入图片描述 当然如果你的容器没有在线运行,那么就是

docker ps -a

查看所有的 容器。

然后我们需要进入到容器里面

docker exec -it 容器ID /bin/bash

安装Vim

我们待会需要去修改配置文件,但是对于这个原始镜像来说,是没有vim,同时yum也无法正常使用。因此,我们需要麻烦一点去安装。

这里的话按照顺序输入如下指令即可:

cd /etc/yum.repos.d/
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

yum makecache
yum update -y
yum -y install vim

那么这个时候的话,我们的vim就是安装好了。

修改es容器配置文件

之后的话,我们就可以正常使用vim去修改我们的配置文件了。

那么此时进入到我们的config目录

cd config

在这里插入图片描述 然后我们编辑 elasticsearch.yml配置文件 然后添加如下命令:

xpack.security.transport.ssl.enabled: true
xpack.security.enabled: true
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization"

在这里插入图片描述

之后退出容器,重启

docker restart 容器ID

设置es访问密码

此时你再次刷新刚刚9200的那个端口应该是会提示你要密码登录的,但是还没完,我们此时再次进入到我们的容器,然后进入bin目录,输入如下指令:

elasticsearch-setup-passwords interactive

然后会让你设置各种密码,你可以选择统一,随便你。 在这里插入图片描述 之后再次访问: 在这里插入图片描述 我们输入密码即可。用户名为 elastic

设置Kibana密码

理想状态

首先通过同样的方式,我们进入到Kibana的容器当中。 在这里插入图片描述 然后就好办了嘛, 在这里插入图片描述 然后修改Kibana的配置文件 同样的没有vim需要再来一下。之后我们在编辑这个文件然后添加:

elasticsearch.username: "elastic"
elasticsearch.password: "xxxx"

即可,但是遗憾的是,通过我们刚刚安装的docker 容器来说,你也看到了,当前用户并不是root,实际上是kibana,这个就比较蛋疼了,不过条条大路通罗马,实际上,我们还有另一个方案。

方案二修改挂载

本来是打算去挣扎一下,去看看人家官方是咋说的,突然想到,刚刚我们应该是有挂载我的配置文件的。所以,我就直接修改本地文件其实就可以了。是的修改es的时候其实也可以这样干,如果不是因为vim问题的话,这种方式是更慢的。为啥呢,原因在这儿:

首先我们先找到挂载,由于我也不知道在哪,所以我们找一下位置:

find / -name  kibana.yml

最后我们找到有这几个东西: 在这里插入图片描述

这个是我们挂载的,其实到底是哪一个我也不确定,于是我就全部看了一下,最后,我对这两个文件进行了修改。 在这里插入图片描述 第一个文件是一堆注释,第四个文件当我把前面的改好了,这个也就改好了,可能是个链接吧。

之后的话加入刚刚的那两句话:

elasticsearch.username: "elastic"
elasticsearch.password: "xxxx"

在这里插入图片描述

安装IK分词器

OK,最后的话,就是来安装一下我们的分词器,就是我们的 KunKun分词器主要是因为中文分词嘛。其实作用和jieba类似嘛,要做关键词搜索呗。

安装ik分词器

安装的话两种方案:

在线安装

这个比较慢。

执行如下指令就好了:

# 进入容器内部
docker exec -it containerName /bin/bash

# 在线下载并安装
./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip

#退出
exit
#重启容器
docker restart elasticsearch

离线安装

那么我们这边选择离线安装,所以先到ik官网,去搞到压缩包。

我们可以在docke看到有两个数据卷正在被使用。 在这里插入图片描述

并且可以看到具体信息 在这里插入图片描述

然后的话我们直接进入那个目录,然后上传ik分词器。

在这里插入图片描述

然后重启容器。

docker restart  容器ID/名

最后我们来到Kibana来看看我们的分词效果。 在这里插入图片描述 效果非常不错。