Elasticsearch分布式搜索引擎的介绍与安装

Posted Cafune936

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch分布式搜索引擎的介绍与安装相关的知识,希望对你有一定的参考价值。

用户访问我们的首页,一般都会直接搜索来寻找自己想要购买的商品。

而商品的数量非常多,而且分类繁杂。如果能正确的显示出用户想要的商品,并进行合理的过滤,尽快促成交易,是搜索系统要研究的核心。

面对这样复杂的搜索业务和数据量,使用传统数据库搜索就显得力不从心,一般我们都会使用全文检索技术 Elasticsearch。

简介

Elastic Stack

Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”,也就是我们常说的ELK技术栈。

Elasticsearch

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用 Elasticsearch 的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到 Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。


如上所述,Elasticsearch具备以下特点:

  • 分布式,无需人工搭建集群
  • Restful风格,一切API都遵循Rest原则,容易上手
  • 近实时搜索,数据更新在Elasticsearch中几乎是完全同步的

安装和配置

1. 安装Elasticsearch

(1)新建用户

su root
useradd bigdata

(2)设置密码:

passwd 123456

出于安全考虑,elasticsearch默认不允许以root账号运行

可以在启动文件:bin/elasearch中加如下面一段就可以用root启动了:

ES_JAVA_OPTS="-Des.insecure.allow.root=true"

(3)安装jdk

yum -y install java-1.8.0-openjdk*

(4)上传安装包,并解压

上传Elasticsearch相关的安装包

解压缩:

su bigdata
tar -zxvf elasticsearch-7.6.1-linux-x86_64.tar.gz

重命名目录:

mv elasticsearch-7.6.1-linux-x86_64 elasticsearch

(5)进入目录

cd elasticsearch

(6)新建两个目录

mkdir data
mkdir logs

(7)修改配置

我们进入config目录:cd config

需要修改的配置文件有两个:


修改jvm配置
Elasticsearch基于Lucene的,而Lucene底层是java实现,因此我们需要配置jvm参数

vim jvm.options

默认配置如下:

-Xms1g
-Xmx1g

内存占用太多了,我们调小一些:

-Xms512m
-Xmx512m

修改elasticsearch.yml

vim elasticsearch.yml
添加内容
path.data: /usr/local/elasticsearch/data # 数据目录位置
path.logs: /usr/local/elasticsearch/logs # 日志目录位置
修改绑定的ip
network.host: 0.0.0.0 # 绑定到0.0.0.0,允许任何ip来访问

目前我们是做的单机安装,如果要做集群,只需要在这个配置文件中添加其它节点信息即可

elasticsearch.yml的其它可配置信息

属性名说明
cluster.name配置elasticsearch的集群名称,默认是elasticsearch。建议修改成一个有意义的名称。
node.name节点名,es会默认随机指定一个名字,建议指定一个有意义的名称,方便管理
path.conf设置配置文件的存储路径,tar或zip包安装默认在es根目录下的config文件夹,rpm安装默认在/etc/ elasticsearch
path.data设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开
path.logs设置日志文件的存储路径,默认是es根目录下的logs文件夹
path.plugins设置插件的存放路径,默认是es根目录下的plugins文件夹
bootstrap.memory_lock设置为true可以锁住ES使用的内存,避免内存进行swap
network.host设置bind_host和publish_host,设置为0.0.0.0允许外网访问
http.port设置对外服务的http端口,默认为9200。
transport.tcp.port集群结点之间通信端口
discovery.zen.ping.timeout设置ES自动发现节点连接超时的时间,默认为3秒,如果网络延迟高可设置大些
discovery.zen.minimum_master_nodes主结点数量的最少值 ,此值的公式为:(master_eligible_nodes / 2) + 1 ,比如:有3个符合要求的主结点,那么这里要设置为2

运行Elasticsearch

./bin/elasticsearch

可能的错误:

错误1:内核过低

在elasticsearch.yml下面添加配置:

bootstrap.system_call_filter: false 

禁用这个插件,然后重启

错误2:文件权限不足


[1]max file descriptors…是文件权限不足

用root登录,然后修改配置文件:

vim /etc/security/limits.conf

添加下面的内容:

* soft nofile 65536
* hard nofile 131072
* soft nproc 4096
* hard nproc 4096

错误3:线程数不足
[2]: max number of threads … 是线程数不足
修改配置:

vim /etc/security/limits.d/20-nproc.conf

修改下面的内容:

* soft nproc 1024
改为:
* soft nproc 4096

错误4:进程虚拟内存不足

[3]: max virtual memory… 进程虚拟内存不足

修改配置文件:

vim /etc/sysctl.conf

添加下面内容:

vm.max_map_count=655360

然后执行命令:

sysctl -p

错误5:
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

修改elasticsearch.yml配置文件,将下面的配置加入到该配置文件中

#[discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] #配置以下三者,最少其一
cluster.initial_master_nodes: ["node-1"] #这里的node-1为node-name配置的值

最后重启终端窗口

注意:所有错误修改完毕,一定要重启你的 CRT 终端,否则配置无效

再次启动Elasticsearch


可以看到有两个端口:
9300:集群节点间通讯接口
9200:客户端访问接口

我们在浏览器中访问

2. 安装Kibana

什么是Kibana?

Kibana是一个基于Node.js的Elasticsearch索引库数据统计工具,可以利用Elasticsearch的聚合功能,生成各种图表,如柱形图,线状图,饼图等。

而且还提供了操作Elasticsearch索引数据的控制台,并且提供了一定的API提示,非常有利于我们学习Elasticsearch的语法。

安装Kibana

(1)安装Node.js

Kibana是ES的客户端工具
需要先安装Node.js

tar -vxf node-v12.18.2-linux-x64.tar.xz
mv node-v12.18.2-linux-x64 nodejs
ln -s /usr/local/nodejs/bin/node /usr/local/bin
ln -s /usr/local/nodejs/bin/npm /usr/local/bin
node -v

(2)解压kibana

tar -vxf kibana-7.6.1-linux-x86_64.tar.gz
mv kibana-7.6.1-linux-x86_64 kibana

(3)修改 config/kibana.yml 添加

server.host: "0.0.0.0"
elasticsearch.url: "http://localhost:9200"
或者
elasticsearch.hosts: ["http://localhost:9200"]

(4)启动

./bin/kibana

kibana的端口是5601,在浏览器打开后,可以测试查询

可能的错误:

错误1:

FATAL Error: [config validation of [elasticsearch].url]: definition for this key is missing

需要将 url 换成 hosts,在config/kibana.yml进行修改

elasticsearch.hosts: ["http://localhost:9200", "http://本机IP:9200"]
# elasticsearch.url: "http://localhost:9200"

错误2:

[warning][savedobjects-service] Unable to connect to Elasticsearch. Error: Request Timeout after 30000ms

修改kibana.yml配置文件,将requestTimeout设置大一点

elasticsearch.requestTimeout: 40000

错误3

[savedobjects-service] Unable to connect to Elasticsearch. Error: [master_not_discovered_exception] null

修改config/elasticsearch.yml配置文件,将以下内容取消注释

node.name: node-1
cluster.initial_master_nodes: [“node-1”]

3. 安装ik分词器

分词器能把一个字符串拆分成多个单词,搜索时再按每个单词分别索引,这样能大大提高搜索效率。
如:“我是中国人"拆分为"我”、“是”、“中国”、“国人”、“中国人”。

安装步骤:
(1)下载分词器安装包,版本和ES版本一致

如: elasticsearch-analysis-ik-6.2.4.zip

(2)上传到elasticsearch/plugins目录中,然后解压

unzip elasticsearch-analysis-ik-6.2.4.zip

(3)使用kibana测试

4. Elasticsearch基本操作

创建索引

PUT /test


创建类型并进行映射

PUT /test/_mapping/student

  "properties": 
    "name" :
      "type": "text",
      "analyzer": "ik_max_word"
    ,
    "gender":
      "type": "keyword"
    ,
    "age":
      "type": "integer"
    
  

添加数据

POST /test/student

    "name":"张三三",
    "gender":"男",
    "age":"20"


修改数据

PUT /test/student/B6eRR3cBeDxKxs3sWYow

  "name":"张三",
  "age":"33",
  "gender":"F"


删除数据

GET /test/student/_search/B6eRR3cBeDxKxs3sWYow-


查询数据

GET /test/student/_search

以上是关于Elasticsearch分布式搜索引擎的介绍与安装的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch-基础介绍及索引原理分析

Elasticsearch 分布式搜索引擎 -- elasticsearch-analysis-pinyin 拼音分词器的安装和介绍

Elasticsearch-基础介绍及索引原理分析

Elasticsearch-基础介绍及索引原理分析

Elasticsearch系统学习-elasticsearch简单介绍和核心概念

elasticsearch 介绍