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

前言

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


背景

近期公司在重构老系统,需求是要求知识库支持全文检索。

我们知道普通的数据库like方式效果及性能都不好,所以另寻出路,确定通过 Elasticsearch (下文简称「 ES 」)搜索引擎实现。


技术选型

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

① Elasticsearch 5.5.3

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

② Logstash 5.5.3

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

③ Kibana 5.5.3

开源的分析和可视化平台

④ SpringBoot 2.0.4


系统环境

  • Linux Centos 7.3
  • JDK 1.8

基本概念

1.1 集群( cluster )

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

1.2 节点( node )

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

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

1.3 索引( index )

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

1.4 类型( type )

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

1.5 文档( document )

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

1.6 分片( shards )

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

① 主分片

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

② 副本分片( replicas )

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


环境搭建

2.1 Elasticsearch

2.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"
}
2.1.2 如果提示「-bash: wget: command not found」则需要先安装 wget
$ yum -y install wget
2.1.3 ES 版本> = 5.0.0 时,是不能用超级管理员运行的,此时需要切换到普通账号或者新建 ES 账号

解决办法:

① 新建用户组 elasticsearch

$ groupadd elasticsearch

② 新建用户并指定用户组

$ useradd -g elasticsearch elasticsearch

③ 修改 ES 目录所属者

$ chown -R elasticsearch:elasticsearch elasticsearch

④ 切换用户后再次启动

$ su elasticsearch
2.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 测试成功


2.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

2.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

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

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

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


结语

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

原文地址:https://www.cnblogs.com/orzlin/p/10262393.html

时间: 2024-10-10 19:14:44

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

BootStrap之基础-1 BootStrap起步(基本概念、环境搭建)

一.基本概念 Bootstrap 简介 - 移动设备优先 - 所有的主流浏览器都支持Bootstrap 它既是由动态CSS语言Less写成 Github热门开源项目 包括NASA的MSNBC(微软全国广播公司)的Breaking News都使用了该项目 够成 Bootstrap 目录说明 - CSS目录--用于存放Bootstrap框架使用的样式文件 - bootstrap.css文件: Bootstrap框架的样式文件 - bootstrap.min.css文件:Bootstrap框架的样式压

ExtJS之基本概念、环境搭建

一.基本概念 ExtJS 简介 - ExtJS 是一个兼容各浏览器的纯 JavaScript 应用程序框架,使用它可以创建最佳跨平台互联网应用程序 为什么 ExtJS 原因 二.环境搭建 目录结构 - 推荐下面这种目录结构 使用ExtJS 动态加载 引入库的方法 发布 Containers容器 Panel Layouts布局 布局系统如何工作 组件component 别名和延迟初始化 显示和隐藏 浮动组件 数据 模型和存储(Model & Stores) 创建一个模型 Model 创建一个存储S

AngularJS之基础-1 简介(基本概念、环境搭建)

一.基本概念 软件设计原则 - 不论是桌面应用还是Web应用,在进行设计编码时应该遵守一定的设计原则 软件设计模式 - 设计模式 Design Pattern,是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.毫无疑问,设计模式用于已于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样 - 23+1中设计模式 工厂模式.抽象工厂模式.建造者模式.原型模式.单例

Elasticsearch技术解析与实战(一)基础概念及环境搭建

基础概念 Elasticsearch是一个近实时的系统,从你写入数据到数据可以被检索到,一般会有1秒钟的延时.Elasticsearch是基于Lucene的,Lucene的读写是两个分开的句柄,往写句柄写入的数据刷新之后,读句柄重新打开,这才能读到新写入的数据. 名词解释: Cluster:集群. Index:索引,Index相当于关系型数据库的DataBase. Type:类型,这是索引下的逻辑划分,一般把有共性的文档放到一个类型里面,相当于关系型数据库的table. Document:文档,

Python 2.7 GUI 编程集成开发环境的搭建 Python 2.7 + PyQt 4 + Eric 6 环境搭建

需求:搭建Python 2.7 GUI 编程集成开发环境 所需软件:Python 2.7 + PyQt 4 + Eric 6 步骤如下: 1.下载Pyhon2.7 32位安装包python-2.7.11.msi ,配置环境变量. https://www.python.org/ftp/python/2.7.11/python-2.7.11.msi 2.下载PyQt4 32位安装包PyQt4-4.11.4-gpl-Py2.7-Qt4.8.7-x32.exe http://sourceforge.ne

搭建企业级搜索服务Solr

·什么是Solr? Solr是基于lucene搭建的java搜索引擎服务端,是一个搜索中心式的程序. ·Solr的组成: Solr由一个服务端程序,若干个搜索模块core,和一套java客户端组件Solrj组成.core运行在服务端之上,可以把一个core理解成一个网站的搜索服务提供者,虽然一个core里面可以配置多个网站,但并不建议这么做.所有的core都存放在一个目录下,这个目录叫做solrHome,这是Solr安装中必须配置的一个文件夹目录. ·Solr的特性: Solr支持lucene的

Python零基础学习系列之二--Python介绍及环境搭建

1-1.Python简介: Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.像Perl语言一样, Python 源代码同样遵循 GPL(GNU General Public License)协议. Python(英国发音:/?pa?θ?n/ 美国发音:/?pa?θɑ?n/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第

从零学 spring cloud:1-1课:Spring Boot 环境搭建

要入门,是先把环境先部署起来 一.开发IDE 目前 JetBranins 的是使用最多的,下载地扯 :https://www.jetbrains.com/idea/?fromMenu,如果不习惯使用英语,汉化也很容易.当前版本是2019.1.1 ,工具更新较快.不同的版本,汉化文件不一样,要注意.至于破解,就不必要了.基于我国强大的淘宝,只要你花上15块钱,就可以买到JetBranins所有工具的激活码,这15块还是要花的,省时省力.再说说如何汉化,所有工具的汉化也简单,只要下载一个语言包,就足

Spring cloud微服务安全实战-7-11PinPoint+SpringBoot环境搭建

微服务的最后一个组件, 调用链监控,一个请求进来以后,经过N多个微服务,例如a调用了b.b又调用了c,那么在这个过程中看到,整个的调用的链路,然后每一段调用所耗费的时间,帮你去分析你的系统如果出现瓶颈以后,瓶颈到底在什么地方. pinpoint 点击看一下在线的demo 提供的一些应用的列表 选择order.这张图就是order这个服务的调用图. 出去调用的一层,分别调用了product和payment还有mysql数据库 outbound选择两层的话 图就会刷新.每一个箭头上都有数字,数字就是