Elasticsearch 学习

一、Elasticsearch 介绍

1.什么是ES?

Elasticsearch:分布式全文检索,基于lucene开发而来
ElasticSearch是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索搜索、支持分布式可实现高可用、提供API接口,可以处理大规模日志数据,比如Nginx、Tomcat、系统日志等功能。

#ES不能完全代替数据库
1.ES的库不可修改,表修改属性困难,容易出错
2.ES没有用户验证和权限控制

2.ES原理

#全文检索和倒排索引
#全文检索:
    将一个完整的信息源的全部内容转化为计算机可以识别、处理的信息单元而形成的数据集合

#倒排索引:
    1.分词
    2.语言处理
    3.排序

#全文检索过程:
    1.分词
    2.找到关键词
    3.搜索索引
    4.计算命中率(相关性)
    5.进行排序,根据算法给出结果

https://www.cnblogs.com/ajianbeyourself/p/11280247.html

3.ES功能

1.分布式搜索引擎
2.全文检索,结构化检索,数据分析
    全文检索:相当于  select * from table;
    结构化检索:相当于  select * from table where id > 100 and id < 1000;
    数据分析:相当于  select count(*) from biao where id > 100 and id < 1000;

4.使用场景

1.大量数据存储
2.搜索数据
3.分析数据(ELK)
4.搜索引擎高亮显示

5.ES特点

1.可以部署集群或者单点,服务于不同数据量的公司
2.高性能,分布式
3.不需要会JAVA语言
4.功能丰富,可以安装插件解决问题
5.部署简单

6.ES与mysql的区别

mysql ES
库(database) 索引(index)
表(table) 类型(type)
列(字段) 项(filter)
行数据 文档(doc)

二、安装ES

1.服务器时间同步

#同步时间
[root@redis01 ~]# yum install -y ntpdate
[root@redis01 ~]# ntpdate time1.aliyun.com

2.安装java环境

1.上传rpm包
[root@redis01 ~]# rz jdk-8u181-linux-x64.rpm

2.安装rpm包
[root@redis01 ~]# rpm -ivh jdk-8u181-linux-x64.rpm

3.查看版本
[root@redis01 ~]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

3.安装ES

1.上传或下载包
#下载地址:https://www.elastic.co/cn/downloads
[root@redis01 ~]# rz elasticsearch-6.6.0.rpm

2.安装es
[root@redis01 ~]# rpm -ivh elasticsearch-6.6.0.rpm 

3.根据提示配置system管理
安装时不启动,请执行以下语句来配置elasticsearch服务,使其使用systemd自动启动
sudo systemctl daemon-reload
sudo systemctl启用elasticsearch.service
您可以通过执行来启动elasticsearch服务
sudo systemctl启动elasticsearch.service
在/etc/elasticsearch中创建了elasticsearch密钥库

4.验证启动
[root@redis01 ~]# netstat -lntp | grep 9200
[root@redis01 ~]# curl 127.0.0.1:9200
{
  "name" : "g2wt0qF",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "bYHD6vqBSoOdCvMhj_wlKA",
  "version" : {
    "number" : "6.6.0",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "a9861f4",
    "build_date" : "2019-01-24T11:27:09.439740Z",
    "build_snapshot" : false,
    "lucene_version" : "7.6.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

4.ES相关配置文件

[root@redis01 ~]# rpm -qc elasticsearch
/etc/elasticsearch/elasticsearch.yml                #ES主配置文件
/etc/elasticsearch/jvm.options                        #jvm虚拟机配置
/etc/elasticsearch/log4j2.properties                #日志的配置
/etc/init.d/elasticsearch                            #启动程序
/etc/sysconfig/elasticsearch                        #系统配置
/usr/lib/sysctl.d/elasticsearch.conf                #配置参数
/usr/lib/systemd/system/elasticsearch.service        #system启动程序

5.配置ES

[root@redis01 ~]# vim /etc/elasticsearch/elasticsearch.yml
#集群名称(单点暂时不需要配置)
#cluster.name: es-cluster

#节点名称
node.name: es01
#es的数据存放目录
path.data: /var/lib/elasticsearch
#es的日志存放目录
path.logs: /var/log/elasticsearch
#内存锁
bootstrap.memory_lock: true
#ES监听地址
network.host: 10.0.0.91,127.0.0.1
#ES端口
http.port: 9200

#集群中主机地址
#discovery.zen.ping.unicast.hosts: ["host1", "host2"]

[root@redis01 ~]# grep "^[a-z]" /etc/elasticsearch/elasticsearch.yml 
node.name: es01
path.data: /server/es/data
path.logs: /server/es/logs
bootstrap.memory_lock: true
network.host: 10.0.0.91,127.0.0.1
http.port: 9200



[root@elkstack01 ~]# vim /etc/elasticsearch/elasticsearch.yml
#添加如下两行,开启跨域访问支持(添加在配置文件最后即可)
http.cors.enabled: true
http.cors.allow-origin: "*"

6.跟配置文件创建目录

#创建数据目录  #创建日志目录
[root@redis01 ~]# mkdir /server/es/{data,logs} -p

#千万别忘了授权
[root@redis01 ~]# chown -R elasticsearch.elasticsearch /server/es

7.重新启动ES

#重新启动
[root@redis01 ~]# systemctl restart elasticsearch.service

#注意,进程重启起不来,查看日志
[root@redis01 ~]# less /server/es/logs/elasticsearch.log
[2020-05-15T10:40:47,787][ERROR][o.e.b.Bootstrap          ] [es01] node validation exception
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked

#需要配置启动文件中的内存锁
[root@redis01 ~]# vim /usr/lib/systemd/system/elasticsearch.service
#在Service下面
[Service]
LimitMEMLOCK=infinity

#重新加载启动程序,再次启动
[root@redis01 ~]# systemctl daemon-reload
[root@redis01 ~]# systemctl start elasticsearch.service



echo "* soft nofile 65536\n* hard nofile 65536">>/etc/security/limits.conf
"* soft memlock unlimited\n* hard memlock unlimited"
"vm.max_map_count=262144">>/etc/sysctl.conf

8.访问页面

#浏览器访问  http://10.0.0.91:9200/
{
  #节点名称
  "name" : "es01",
  #集群名称
  "cluster_name" : "elasticsearch",
  #集群的uuid
  "cluster_uuid" : "vNBGo-DMTdO4yStFGXJ6-g",
  #版本信息
  "version" : {
    "number" : "6.6.0",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "a9861f4",
    "build_date" : "2019-01-24T11:27:09.439740Z",
    "build_snapshot" : false,
    "lucene_version" : "7.6.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

三、跟ES交互的方式

1.curl命令的方式

1)特点

1.使用不方便,命令复杂,容易出错
2.不需要安装任何服务,只需要curl命令

2)使用方式

#创建一个索引(库)
[root@redis01 ~]# curl -XPUT 'localhost:9200/student?pretty'
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "student"
}

#添加一条数据
[root@redis01 ~]# curl -XPUT 'localhost:9200/student/user/1?pretty' -H 'Content-Type: application/json' -d '{"name": "lhd","sex":"man","age":"18","about":"good good study","interests":["chinese","english"]}'
{
  "_index" : "student",
  "_type" : "user",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

#查看数据
[root@redis01 ~]# curl -GET 'localhost:9200/student/user/1?pretty'
{
  "_index" : "student",
  "_type" : "user",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "lhd",
    "sex" : "man",
    "age" : "18",
    "about" : "good good study",
    "interests" : [
      "chinese",
      "english"
    ]
  }
}

2.使用es-head插件的方式

插件是为了完成不同的功能,官方提供了一些插件但大部分是收费的,另外也有一些开发爱好者提供的插件,可以实现对elasticsearch集群的状态监控与管理配置等功能,我们现在要安装的是Elasticsearch的head插件,此插件提供elasticsearch的web界面功能。

1)特点

1.查看数方便,操作简单
2.需要安装nodejs环境,安装时间长

2)安装方法一

#安装npm(只需要在一个节点安装即可,如果前端还有nginx做反向代理可以每个节点都装)
[root@elkstack01 ~]# yum install -y nodejs openssl
#从GitHub上克隆代码到本地
[root@redis01 ~]# git clone git://github.com/mobz/elasticsearch-head.git
#克隆完成后,进入elasticsearch插件目录
[root@redis01 ~]# cd elasticsearch-head/
#清除缓存
[root@redis01 elasticsearch-head]# npm cache clean -f
#使用npm安装n模块(不同的项目js脚本所需的node版本可能不同,所以就需要node版本管理工具)
[root@redis01 elasticsearch-head]# npm install -g n
#安装最新版本n模块
[root@redis01 elasticsearch-head]# n stable
#生成grunt
[root@redis01 elasticsearch-head]# npm install grunt -save
#确认生成grunt文件
[root@redis01 elasticsearch-head]# ll node_modules/grunt
#执行安装grunt
[root@redis01 elasticsearch-head]# npm install
#后台启动head插件(切记,必须在插件目录下执行启动命令)
[root@redis01 elasticsearch-head]# npm run start &
#验证端口是否启动成功
[root@redis01 elasticsearch-head]# netstat -lntup
tcp        0      0 0.0.0.0:9100                0.0.0.0:*                   LISTEN      11293/grunt

#启动成功后,修改elasticsearch配置文件
[root@redis01 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
#添加如下两行,开启跨域访问支持(添加在配置文件最后即可)
http.cors.enabled: true
http.cors.allow-origin: "*"
#重启elasticsearch
[root@elkstack01 elasticsearch-head]# /etc/init.d/elasticsearch restart

3)安装插件方法二

1.在电脑上解压es-head-0.1.4_0.crx.zip
2.谷歌浏览器,右上角三个杠或三个点
3.点击扩展程序
4.打开开发者模式
5.加载已解压的扩展程序,选择解压的目录
6.右上角会多出一个放大镜,点击及进入es-head页面
7.修改连接地址为ES地址

3.kibana方式

1)安装kibana

#上传或者下载安装包
[root@redis01 ~]# rz kibana-6.6.0-x86_64.rpm

#安装
[root@redis01 ~]# rpm -ivh kibana-6.6.0-x86_64.rpm

2)配置kibana

[root@redis01 ~]# vim /etc/kibana/kibana.yml 
#进程的端口
server.port: 5601
#主机地址(为了可以访问,配置外网地址)
server.host: "10.0.0.91"
#指定ES的地址
elasticsearch.hosts: ["http://localhost:9200"]
#kibana的数据也存储在ES,指定存储的索引名
kibana.index: ".kibana"

3)启动kibana

[root@redis01 ~]# systemctl start kibana.service
#查看进程
[root@redis01 ~]# netstat -lntp | grep 5601
tcp        0      0 10.0.0.91:5601          0.0.0.0:*               LISTEN      30640/node          
[root@redis01 ~]# ps -ef | grep kibana
kibana    30640      1 89 12:16 ?        00:00:25 /usr/share/kibana/bin/../node/bin/node --no-warnings /usr/share/kibana/bin/../src/cli -c /etc/kibana/kibana.yml

4)访问页面

#在浏览器页面输入   http://10.0.0.91:5601

kib页面.png

Copyright © 高程程 all right reserved,powered by Gitbook修订于: 2021-05-18 21:14:52

results matching ""

    No results matching ""