前言
虽然说要停更,但是有些东西还是需要记录一下的,尤其是这种,不需要动脑子,但是就是容易忘记需要注意的操作是需要进行记录的。
那么本篇博文需要做的就是使用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安装
- 卸载可能存在的版本(看你自己,非必要)
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
- 安装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来看看我们的分词效果。 效果非常不错。