一、前言

本系列文章最终目标是为了快速搭建一个简易可用的搜索服务。方案并不一定是最优,但实现难度较低。


二、背景

近期公司在重构老系统,需求是要求知识库支持全文检索。
我们知道普通的数据库 like 方式效果及性能都不好,所以另寻出路,确定通过 Elasticsearch (下文简称「 ES 」)搜索引擎实现。


三、技术选型

因公司之前购买了阿里云的ES服务且版本为 5.5.3 ,下文选用的技术框架均基于此版本。

① Elasticsearch 5.5.3

一个基于Lucene的搜索服务器,提供了分布式的全文搜索引擎

② Logstash 5.5.3

开源的服务器端数据处理管道

③ Kibana 5.5.3

开源的分析和可视化平台

④ Spring Boot 2.0.4


四、系统环境

  • Linux Centos 7.3
  • JDK 1.8

五、基本概念

5.1 集群( cluster )

集群是由一个或者多个拥有相同 cluster.name 配置的节点组成,共同承担数据和负载压力,当节点数量发生变化时集群将会重新平均分布所有数据。

5.2 节点( node )

一个运行中的 ES 实例称为一个节点

  • 主节点负责管理集群范围内的所有变更,例如增加/删除索引,或者增加/删除节点等,且不需要涉及到文档级别的变更和搜索等操作
  • 任何节点都能成为主节点
  • 当集群只有一个主节点,即使流量增加也不会成为瓶颈

5.3 索引( index )

  • 名词;类似于传统关系数据库中的一个数据库
  • 动词;索引一个文档就是存储一个文档到一个索引(名词)中以便它可以被检索和查询到。类似于 SQL 语句中的 INSERT 关键词
  • 倒排索引;类似于传统关系型数据库中的索引概念,可以提升数据检索速度

5.4 类型( type )

一个索引包含一个或多个 type ,相当于传统关系型数据库中的表

5.5 文档( document )

相当于传统关系型数据库中的数据行

5.6 分片( shards )

  • 是一个底层的「工作单元」,仅保存了全部数据的一部分
  • 是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里
  • 当集群规模扩大或者缩小时, ES 会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里
  • 分为「主分片」「副本分片」
  • 在索引建立的时候就已经确定了主分片数,但是副本分片数可以随时修改;默认情况下会被分配「 5 」个主分片和「 1 」份副本(每个主分片拥有一个副本分片)
  • 相同主分片的副本分片不会放在同一个节点

① 主分片 ( Primary shard )

索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量

② 副本分片( Replica shard )

只是一个主分片的拷贝,作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务


六、环境搭建

6.1 Elasticsearch

6.1.1 安装步骤

① 下载安装包:

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.3.tar.gz

② 解压并移动到 local 目录下

$ tar -zxvf elasticsearch-5.5.3.tar.gz
$ mv elasticsearch-5.5.3 /usr/local/elasticsearch

③ 修改 config 目录下的 elasticsearch.yml 文件

$ vim elasticsearch.yml
// 去掉行开头的 # 并重命名集群名,这里命名为 compass
cluster.name: compass
// 去掉行开头的 # 并重命名节点名,这里命名为 node-1
node.name: node-1

④ 进入 bin 目录启动 ES 并在后台运行

$ ./elasticsearch -d

⑤ 启动之后测试是否正常运行

$ curl 127.0.0.1:9200

返回结果:

{"name" : "node-1","cluster_name" : "compass","cluster_uuid" : "Zuj5FBMUTjuHQXlAHreGvA","version" : {"number" : "5.5.3","build_hash" : "9305a5e","build_date" : "2017-09-07T15:56:59.599Z","build_snapshot" : false,"lucene_version" : "6.6.0"},"tagline" : "You Know, for Search"
}
6.1.2 如果提示「-bash: wget: command not found」则需要先安装 wget
$ yum -y install wget
6.1.3 ES 版本> = 5.0.0 时,是不能用超级管理员运行的,此时需要切换到普通账号或者新建 ES 账号

解决办法:

① 新建用户组 elasticsearch

$ groupadd elasticsearch

② 新建用户并指定用户组

$ useradd -g elasticsearch elasticsearch

③ 修改 ES 目录所属者

$ chown -R elasticsearch:elasticsearch elasticsearch

④ 切换用户后再次启动

$ su elasticsearch
6.1.4 只能使用127.0.01或者localhost访问,使用ip地址无法访问?

解决办法:

① 修改 elasticsearch.yml 中的「network.host」

network.host: 0.0.0.0

② 重启 ES 出现如果如下报错,请依次按下面的步骤解决

ERROR: [3] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: max number of threads [3818] for user [elasticsearch] is too low, increase to at least [4096]
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

每个进程最大同时打开文件数太小

修改 /etc/security/limits.conf 文件,增加如下配置,用户退出后重新登录生效

* soft nofile 65536
* hard nofile 65536

[2]: max number of threads [3818] for user [es] is too low, increase to at least [4096]

最大线程个数太低

同上修改 /etc/security/limits.conf 文件,增加如下配置,用户退出后重新登录生效

* soft nproc 4096
* hard nproc 4096

[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

一个进程能拥有的最多的内存区域

修改 /etc/sysctl.conf 文件,增加如下配置,执行命令「 sysctl -p 」生效

vm.max_map_count=262144

③ 切换到 elasticsearch 用户并重启, curl 测试成功

[root@db-develop-01 ~]$ curl 192.168.1.192:9200
{"name" : "node-1","cluster_name" : "compass","cluster_uuid" : "mFL_a6WDTUaWbB4jKA8cWg","version" : {"number" : "5.5.3","build_hash" : "9305a5e","build_date" : "2017-09-07T15:56:59.599Z","build_snapshot" : false,"lucene_version" : "6.6.0"},"tagline" : "You Know, for Search"
}

6.2 Logstash

① 下载安装包:

$ wget https://artifacts.elastic.co/downloads/logstash/logstash-5.5.3.tar.gz

② 解压并移动到 local 目录下

$ tar -zxvf logstash-5.5.3.tar.gz
$ mv logstash-5.5.3 /usr/local/logstash

6.3 Kibana

① 下载安装包:

$ wget https://artifacts.elastic.co/downloads/kibana/kibana-5.5.3-linux-x86_64.tar.gz

② 解压并移动到 local 目录下

$ tar -zxvf kibana-5.5.3-linux-x86_64.tar.gz
$ mv kibana-5.5.3-linux-x86_64 /usr/local/kibana

③ 修改 config 目录下的 kibana.yml 文件

// 去掉当前行开头的 #
server.port: 5601
// 去掉当前行开头的#并将localhost修改为具体IP
server.host: "192.168.1.191"
// 去掉当前行开头的#并将localhost修改为具体IP
elasticsearch.url: "http://192.168.1.191:9200"

④ 启动 Kibana ,浏览器访问 http://192.168.1.191:5601

$ ./kibana

6.4 elasticsearch-head 插件(浏览器版)

① 「 Chrome 浏览器网上应用商店」或者「 Firefox 附加组件」搜索 elasticsearch head

② 安装插件后点击浏览器地址栏右侧「放大镜图标」,顶部输入框中的 localhost 修改为服务器地址即可查看 ES 服务状态


七、结语

至此 ELK 环境搭建完毕,下一篇具体介绍如何实现基础搜索服务。

转载于:https://www.cnblogs.com/orzlin/p/10262393.html

从零搭建ES搜索服务(一)基本概念及环境搭建相关推荐

  1. 从零搭建 ES 搜索服务(四)拼音搜索

    一.前言 上篇介绍了 ES 的同义词搜索,使我们的搜索更强大了,然而这还远远不够,在实际使用中还可能希望搜索「fanqie」能将包含「番茄」的结果也罗列出来,这就涉及到拼音搜索了,本篇将介绍如何具体实 ...

  2. Linux常用命令下,以及再CentOS7下搭建apache网站服务,以及同一服务器上搭建第二个网站

    Linux常用命令下,以及再CentOS7下搭建apache网站服务,以及同一服务器上搭建第二个网站 Linux 常用命令ls -l 以长格式显示-a 显示.. 和 .-A 不显示 . 和 ..-d ...

  3. 谷粒商城项目篇1_分布式基础篇_分布式基础概念、环境搭建、创建项目

    写在前面 为丰富项目经验,特此学习B站开源视频<全网最强电商教程<谷粒商城>对标阿里P6/P7,40-60万年薪>希望通过此学习能巩固所学,将技术栈串接起来. 此项目三个阶段 ...

  4. vscode+django 搭建自己的个人网站(一) ——环境搭建与配置

    vscode+django 搭建自己的个人网站(一) --环境搭建与配置 前言 ​ 相对于pycharm,vscode更加的灵活快速,对于小型的项目来说算是一个很好的选择,所以笔者选择使用vscode ...

  5. 基于 next.js + mdx 搭建组件库文档项目(一) -- 开发环境搭建

    说明 之前使用过 Docz 来作为组件库文档搭建工具,它基于 gatsby , 提供了高度的定制化能力,但是截止 2021-06-22, Docz 停留在 v2.3.1(2020-04-05) 已经一 ...

  6. 数据分发服务 (DDS)及Fast DDS环境搭建

    1. 数据分发服务 (DDS) 数据分发服务 (DDS)是一种以 数据为中心的通信协议,用于分布式软件应用程序通信.它描述了支持数据提供者和数据消费者之间通信的通信应用程序编程接口 (API) 和通信 ...

  7. 史上最简SLAM零基础解读(10.1) - g2o(图优化)→简介环境搭建(slam十四讲第二版为例)

    本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始   文末正下方中心提供了本人联系方式,点击本人照片即可显示WX→官方认证{\color{blue}{文末正下方中心}提供了本人 \co ...

  8. 2019零基础学Android第1课——Android开发环境搭建

    Android开发工具主要是以AndroidStudio为主,注意如果你在网上还看到有人在介绍eclipse去开发android,那么你可以直接忽略那个介绍了,因为eclipse现在很少有人用了.无论 ...

  9. Vue 3 组件开发:搭建基于SpreadJS的表格编辑系统(环境搭建)

    Vue是一套用于构建用户界面的渐进式框架,与其它大型 JS 框架不同,Vue 被设计为可以自底向上逐层应用,更易上手,还便于与第三方库或既有项目整合,因此,Vue完全能够为复杂的单页应用提供驱动. 2 ...

最新文章

  1. 存储库访问被拒绝。通过部署密钥进行访问是只读的
  2. 文档过期打不开怎么办_4 个超实用金山文档小技巧,很强大也很简单,赶紧收藏!...
  3. UC浏览器怎么清除缓存
  4. 鸿蒙os开发者大会的时间,华为开发者大会2020时间已确定,鸿蒙2.0和EMUI 11即将到来...
  5. PyTorch入门(一)--PyTorch基础
  6. android 字母索引三方,Android 字母索引动态自定义布局
  7. Symfony1.4.11学习笔记(三):设置虚拟机
  8. win10电脑一开机提示拒绝访问怎么办
  9. uni-app(vue小程序)学习笔记
  10. 视频教程-JSP+Servlet实战视频课程-Java
  11. C语言学生档案表设计——作业
  12. 简单理解时间同步和时钟同步
  13. java中以yyyyMMddHHmmss格式取得系统时间
  14. 处理各种压力(情绪、家庭)时,需要注意什么!
  15. java数据集导出excel_使用Apache Poi将结果集从Java数据库导出到Excel
  16. 使用教育网邮箱学生验证Microsoft Imagine 微软开发者 获取window server 2016正版密钥教程
  17. 我遇见了一个问题求帮助
  18. (无人驾驶之一)无人驾驶系统的软件架构
  19. 比赛时间到提示音_2020第七届“吟飞”国际电子管风琴比赛章程 (专业院校组)...
  20. github 上Go项目使用Travis CI和Docker Hub实现持续集成

热门文章

  1. contentprovider java_ContentProvider和数据库的区别
  2. r语言pls分析_零基础学习R语言分析GEO
  3. mysql主祝福hi_MySql - GROUP BY 和 HAVING关键字
  4. java 斗地主_java 斗地主
  5. install anttweakbar on ubuntu
  6. DE29 Matrix Exponentials
  7. 计算机专业英语问卷调查,调查问卷英文版.doc
  8. 深度学习根据文字生成图片教程(附python代码)
  9. 像科学家一样思考python_像计算机科学家一样思考Python (第2版) 中文pdf完整版
  10. java 重定向到某个页面并弹出消息_前端面试100问之浏览器从输入URL到页面展示发生了什么...