docker安装配置elasticsearch,kibana和IK分词器

    • elasticsearch文章系列
    • 前置安装docker
    • 创建docker网络
    • 安装Elasticsearch
      • 运行elasticsearch
    • 安装Kibana
      • 运行kibana
      • DevTools
      • 安装IK分词器插件
      • 配置IK分词器字典
    • 推荐配置IK远程热更新字典
      • 创建配置字典位置
      • nginx配置转发到字典位置
    • 安装拼音分词器插件(也是要版本号保持一致)
      • ES如何卸载插件
      • es安装拼音分词器
        • 1.在线安装
        • 2.通过zip包安装
  • 搭建集群教程(可选)
    • 1、为什么要搭建集群?
      • 部署es集群
        • docker-compose的安装
        • 创建es集群
        • 监控ES集群
    • 结束

elasticsearch文章系列

elasticsearch安装教程大全
elasticsearch学习笔记(一)
elasticsearch学习笔记(二)
elasticsearch学习笔记(三)

前置安装docker

可参考:Debian安装docker
Centos安装docker

创建docker网络

(docker-compose可以直接互连)
因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络:

docker network create es-net

安装Elasticsearch

Elasticsearchkibana版本要一致

#版本要一致
docker pull elasticsearch:7.12.1
docker pull kibana:7.12.1
# 宿主机挂载目录
mkdir -p /docker/elasticsearch/data
mkdir -p /docker/elasticsearch/plugins

运行elasticsearch

这里默认内存是1g,最好不要少于512m
#运行es7
docker run -d \--name es7 \-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \-e "discovery.type=single-node" \-v es-data:/docker/elasticsearch/data \-v es-plugins:/docker/elasticsearch/plugins \--privileged \--network es-net \-p 9200:9200 \-p 9300:9300 \
elasticsearch:7.12.1

检查是否成功 http://ip:9200/

命令解释:

  • -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:/docker/elasticsearch/data:挂载逻辑卷,绑定es的数据目录
  • -v es-logs:/docker/elasticsearch/logs:挂载逻辑卷,绑定es的日志目录
  • -v es-plugins:/docker/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录
  • --privileged:授予逻辑卷访问权
  • --network es-net :加入一个名为es-net的网络中
  • -p 9200:9200:端口映射配置

安装Kibana

kibana可以给我们提供一个elasticsearch的可视化界面,便于我们学习。

运行kibana

#运行kibana
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es7:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1#检验
http://ip:5601/左侧Devtools中可以快速编写DSL
  • --network es-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中
  • -e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
  • -p 5601:5601:端口映射配置

kibana启动一般比较慢,需要多等待一会,可以通过命令:

docker logs -f kibana

查看运行日志,当查看到下面的日志,说明成功:

此时,在浏览器输入地址访问:http://ip:5601,即可看到结果

DevTools

kibana中提供了一个DevTools界面:

这个界面中可以编写DSL来操作elasticsearch。并且对DSL语句有自动补全功能。

安装IK分词器插件

原有默认的分词器对中文分词并不友好
可以使用IK分词器

#### 安装IK分词器插件
# 进入容器内部
docker exec -it es7 /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 es7

IK分词器包含两种模式:

  • ik_smart:最少切分

  • ik_max_word:最细切分

配置IK分词器字典

es使用通过词来分,但终究别人定义的词,我们可以自定义一些词典

# 可以进入修改字典
docker exec -it es7 /bin/bash
# 字典目录
cd /usr/share/elasticsearch/config/analysis-ik
# 修改配置文件
vi IKAnalyzer.cfg.xml
# :wq# 退回到宿主机
exit# 重启es和kibana
docker restart es7
docker restart kibana

IKAnalyzer.cfg.xml中可以配置


<properties><comment>IK Analyzer 扩展配置</comment><!--用户可以在这里配置自己的扩展字典 --><entry key="ext_dict"></entry><!--用户可以在这里配置自己的扩展停止词字典--><entry key="ext_stopwords"></entry><!--用户可以在这里配置远程扩展字典 --><entry key="remote_ext_dict">http://113.131.57.206:7090/remote.txt</entry><!--用户可以在这里配置远程扩展停止词字典--><!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

上面两个是本地的额外字典额外禁止词位置,可以自己添加xml文件同目录的文件如,xxx.dic

下面两个是远程的

推荐配置IK远程热更新字典

每次都要进入容器内部修改很麻烦, 而且vi编写也麻烦, 可以通过远程字典来热更新词典

创建配置字典位置

先在宿主机的目录创建字典文件

## 宿主机的目录
cd /docker/elasticsearch/IK/## 创建字典文件
touch remote.txt

创建完后, 可以通过MobaXterm等远程连接工具, 然后用VSCode打开编辑
remote.txt

nginx配置转发到字典位置

安装nginx可以参考这里的unbuntu安装nginx部分(Debian也可以用)
通过apt-get安装的nginx的目录

#安装好的nginx相关文件位置:/usr/sbin/nginx:主程序/etc/nginx:存放配置文件/usr/share/nginx:存放静态文件/var/log/nginx:存放日志

修改nginx配置

cd /etc/nginx# 修改conf.d目录下的,没有可以自己创建一个
# 主配置已经默认引入这目录下所有配置文件
cd /conf.d
# 创建
touch http.conf

http.conf加入以下内容:

# 根据约定,URL 尾部的 / 表示目录,没有 / 表示文件。所以访问 /some-dir/ 时,服务器会自动去该目录下找对应的默认文件。
# 如果访问 /some-dir 的话,服务器会先去找 some-dir 文件,找不到的话会将 some-dir 当成目录,重定向到 /some-dir/# 每次更改后重启nginx
# cd /usr/sbin
# ./nginx -s reloadserver {listen       7090;server_name  localhost;server_name  113.131.57.206; #你的ipcharset 'utf-8';default_type 'text/html';# 端口直接指向那个目录location / {root /docker/elasticsearch/IK; }}

修改后重启nginx

# 每次更改后重启nginx
cd /usr/sbin
./nginx -s reload

检验访问输入
http://113.131.57.206:7090/remote.txt

然后再去kibanadevtols就会按照我们自定义的词汇分词

安装拼音分词器插件(也是要版本号保持一致)

ES如何卸载插件

#进入容器
docker exec -it es7 /bin/bash#查看安装了哪些插件
./bin/elasticsearch-plugin list#3、卸载x-pack插件
#a. 卸载x-pack插件
./bin/elasticsearch-plugin remove x-pack#exit
#重启容器

es安装拼音分词器

1.在线安装

#进入容器
docker exec -it es7 /bin/bash
#安装拼音分词器插件
./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.12.1/elasticsearch-analysis-pinyin-7.12.1.zip#exit
#重启容器

github地址:https://github.com/medcl/elasticsearch-analysis-pinyin

2.通过zip包安装

也可以先下载好https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.12.1/elasticsearch-analysis-pinyin-7.12.1.zip这个包,然后上传到对应的挂载目录,例如/var/lib/docker/volumes/es-plugins/_data
然后重启容器就可以。
可以通过docker inspect es7 查看挂载位置
例如

"Source": "/var/lib/docker/volumes/es-plugins/_data",
"Destination": "/docker/elasticsearch/plugins",

搭建集群教程(可选)

1、为什么要搭建集群?

单机的elasticsearch做数据存储,必然面临两个问题:海量数据存储问题、单点故障问题。

  • 海量数据存储问题:将索引库从逻辑上拆分为N个分片(shard),存储到多个节点
  • 单点故障问题:将分片数据在不同节点备份(replica )

ES集群相关概念:

  • 集群(cluster):一组拥有共同的 cluster name 的 节点。

  • 节点(node) :集群中的一个 Elasticearch 实例

  • 分片(shard):索引可以被拆分为不同的部分进行存储,称为分片。在集群环境下,一个索引的不同分片可以拆分到不同的节点中

    解决问题:数据量太大,单点存储量有限的问题。

此处,我们把数据分成3片:shard0、shard1、shard2

  • 主分片(Primary shard):相对于副本分片的定义。

  • 副本分片(Replica shard)每个主分片可以有一个或者多个副本,数据和主分片一样。

数据备份可以保证高可用,但是每个分片备份一份,所需要的节点数量就会翻一倍,成本实在是太高了!

为了在高可用和成本间寻求平衡,我们可以这样做:

  • 首先对数据分片,存储到不同节点
  • 然后对每个分片进行备份,放到对方节点,完成互相备份

这样可以大大减少所需要的服务节点数量,如图,我们以3分片,每个分片备份一份为例:

现在,每个分片都有1个备份,存储在3个节点:

  • node0:保存了分片0和1
  • node1:保存了分片0和2
  • node2:保存了分片1和2

部署es集群

我们会在单机上利用docker容器运行多个es实例来模拟es集群。不过生产环境推荐大家每一台服务节点仅部署一个es的实例。

部署es集群可以直接使用docker-compose来完成,但这要求你的Linux虚拟机至少有4G的内存空间

docker-compose的安装

可以参考:docker-compose的安装

创建es集群

首先编写一个docker-compose.yml文件,内容如下:

version: '2.2'
services:es01:image: elasticsearch:7.12.1container_name: es01environment:- node.name=es01- cluster.name=es-docker-cluster- discovery.seed_hosts=es02,es03- cluster.initial_master_nodes=es01,es02,es03- "ES_JAVA_OPTS=-Xms512m -Xmx512m"volumes:- data01:/usr/share/elasticsearch/dataports:- 9200:9200networks:- elastices02:image: elasticsearch:7.12.1container_name: es02environment:- node.name=es02- cluster.name=es-docker-cluster- discovery.seed_hosts=es01,es03- cluster.initial_master_nodes=es01,es02,es03- "ES_JAVA_OPTS=-Xms512m -Xmx512m"volumes:- data02:/usr/share/elasticsearch/dataports:- 9201:9200networks:- elastices03:image: elasticsearch:7.12.1container_name: es03environment:- node.name=es03- cluster.name=es-docker-cluster- discovery.seed_hosts=es01,es02- cluster.initial_master_nodes=es01,es02,es03- "ES_JAVA_OPTS=-Xms512m -Xmx512m"volumes:- data03:/usr/share/elasticsearch/datanetworks:- elasticports:- 9202:9200
volumes:data01:driver: localdata02:driver: localdata03:driver: localnetworks:elastic:driver: bridge
  • cluster.name 集群名称
  • discovery.seed_hosts=es02,es03 集群另外两个节点的地址,docker-compose可以用服务名称直接互联
  • cluster.initial_master_nodes=es01,es02,es03 初始化的主节点,主节点是选出来的,这三个都可以参与选举
  • - “ES_JAVA_OPTS=-Xms512m -Xmx512m” 最小内存,最大内存

es运行需要修改一些linux系统权限,修改/etc/sysctl.conf文件

vi /etc/sysctl.conf

添加下面的内容:

vm.max_map_count=262144#:wq
#保存

然后执行命令,让配置生效:

sysctl -p

通过docker-compose启动集群:
上传docker-compose.yml

# 去到docker-compose.yml所在的目录
docker-compose up -d

部署后,如果docker和docker-compose同时部署导致所有docker容器都访问不了,也可以看里面的解决方案docker-compose部署

监控ES集群

kibana可以监控es集群,不过新版本需要依赖es的x-pack 功能,配置比较复杂。

这里推荐使用cerebro来监控es集群状态,官方网址:https://github.com/lmenezes/cerebro


解压后的目录如下

进入bin目录点击cerebro.bat即可启动

访问http://localhost:9000 即可进入管理界面:

输入你的elasticsearch的任意节点的地址和端口,点击connect即可:

结束

至此, 安装完成, 也是博主踩坑慢慢安装过来的, 有任何问题也可以留言与博主交流, 希望对你有帮助!

服务器安装配置elasticsearch,kibana,IK分词器和拼音分词器,集群搭建教程相关推荐

  1. elasticsearch集群搭建及springboot集成使用

    elasticsearch集群搭建及springboot集成使用 1. ES介绍 2. 原理 2.1 核心概念 2.2 索引功能 2.3 ES特性 3. 分词器(analyzer) 4. 集群搭建 4 ...

  2. elasticsearch系列八:ES 集群管理(集群规划、集群搭建、集群管理)

    一.集群规划 搭建一个集群我们需要考虑如下几个问题: 1. 我们需要多大规模的集群? 2. 集群中的节点角色如何分配? 3. 如何避免脑裂问题? 4. 索引应该设置多少个分片? 5. 分片应该设置几个 ...

  3. ES安装的详细步骤、ES的集群搭建以及ElasticSearch安装时可能出现的问题

    目录 什么是es? 正排索引和倒排索引 安装 ElasticSearch的简单步骤 环境需求 安装ES 下载 设置虚拟机内存 创建用户 安装 ES的目录结构及其作用 配置文件以及作用 修改配置文件el ...

  4. Centos7+Elasticsearch7.4.2+Kibana+IK分词+ElasticHD 安装配置以及集群搭建

    Centos7+Elasticsearch7.4.2+Kibana+IK分词+ElasticHD 安装配置以及集群搭建 1. elasticSearch 7.4.2 安装 1.1 关于jdk 1.2 ...

  5. Elasticsearch生产实战(ik分词器、拼音分词、自动补全、自动纠错)

    目录 一.IK分词器 1.IK分词器介绍 2.安装 3.使用 4.自定义词库 二.拼音分词器 1.拼音分词器介绍 2.安装 三.自动补全 1.效果演示 2.实战 四.自动纠错 1.场景描述 2.DSL ...

  6. mac下ElasticSearch 集群搭建,使用Kibana配置和管理集群

    Elasticsearch如果做集群的话Master节点至少三台服务器或者三个Master实例加入相同集群,三个Master节点最多只能故障一台Master节点,如果故障两个Master节点,Elas ...

  7. elasticsearch 集群搭建 + kibana配置

    elasticsearch 集群搭建 + kibana配置 一.elasticsearch 集群搭建 1.下载并解压elasticsearch 2.ES集群搭建 2.1 打开防火墙9200,9300端 ...

  8. es拼音分词 大帅哥_SpringBoot集成Elasticsearch 进阶,实现中文、拼音分词,繁简体转换...

    Elasticsearch 分词 分词分为读时分词和写时分词. 读时分词发生在用户查询时,ES 会即时地对用户输入的关键词进行分词,分词结果只存在内存中,当查询结束时,分词结果也会随即消失.而写时分词 ...

  9. Solr集群搭建,zookeeper集群搭建,Solr分片管理,Solr集群下的DataImport,分词配置。...

    1   什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候 ...

最新文章

  1. sqlServer MD5
  2. JSP中应用MVC架构
  3. DDD~领域事件中使用分布式事务
  4. 美团知识图谱问答技术及在商家推荐回复场景中的实践与探索
  5. 使用docker安装fastDFS
  6. 关于代理服务器的原理及用法
  7. 实验二:运算器数据通路
  8. numpy简单快速安装教程
  9. 屏幕缩放比例 html,css如何自适应屏幕大小?
  10. 教你itunes电脑版怎么下载
  11. SQL 数据库学习路线推荐
  12. 【解决】Jupyter Notebook 内核似乎挂掉了,它很快将自动重启。
  13. Java--JSON嵌套JSON中带‘\‘字符的解决方式
  14. 数学 余式定理 简介
  15. 架构师之路(七)之五视图方法论
  16. 云上办公便捷、安全,就用华为云桌面
  17. 视频批量剪辑:如何给视频添加特效,比如:色彩变幻效果特效,怎么制作?
  18. 胆囊息肉,需要切除吗
  19. 2020年前端安全综述-填坑记
  20. 「镁客早报」屠呦呦入选“20世纪最伟大人物”;四部门联合治理APP违法收集使用个人信息... 1

热门文章

  1. 从SAP中查找BADI
  2. 计算机图形学——二维卡通人物交互设计
  3. uniapp,video视频播放不了,页面显示不完整
  4. 【脑电数据处理】小波变换
  5. 我是如何诱骗你的-高级钓鱼技术
  6. 移动端GPGPU 架构
  7. 洛谷题单1-7 搜索题解
  8. 机械革命旷世水冷游戏本 评测
  9. Python将excel或者csv表格中的空行删除
  10. java hgetall_详解Java使用Pipeline对Redis批量读写(hmsethgetall)