介绍
基于Lucene构建的开源、分布式、ResufulApi全文搜索引擎。是一个分布式文档数据库,其中每个字段均是可以被索引的数据且可被搜索,它能够扩展至数以百计的服务器存储以及处理PB级的数据。可以在很短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。
elasticsearch需要比较大的内存,启动比较慢,高可用和可扩展,可以通过购置性能更强的服务器来完成。
优势
- 横向扩展性:只需要增加台服务器,做一点配置,就可以并入集群。
- 分片机制提供更好的分布性:同一个索引分为多个分片(sharding),这点类似于HDFS的块机制;分而治之的方式可提升处理效率。
- 高可用:提供复制(replica)机制,一个分片可以设置多个复制,使得某台服务器在宕机的情况下,集群仍旧可以照常运行,并会把服务器宕机丢失的数据信息复制恢复到其它可用节点上。
- 使用简单:只需一条命令就可以下载文件,然后很快就能搭建一个站内搜索引擎。
应用场景
大型分布式日志分析系统ELK(elasticsearch存储日志+logstash收集日志+kibana展示数据)
大型电商商品搜索系统、网盘搜索引擎等。
存储结构
用的是文件存储,是面向文档型数据库,一条数据就是一个文档,用JSON作为文档序列化的格式。
关系数据库存储结构是: 数据库-->表-->行-->列
elasticsearch存储结构: 索引-->类型-->文档-->字段
安装(linux)
需求先安装jdk
Jdk下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
1.将jdk复制到linux服务器
2.解压
3.设置环境变量:
sudo vi /etc/profile
在文件最后添加以下内容
#Java Env
export JAVA_HOME=/usr/jdk1.8.0_121
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
4.保存退出vi编辑器,执行 source /etc/profile使设置生效
5.查看jdk安装是否成功 java -version
安装elasticsearch
1.下载
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.2.tar.gz
用迅雷下载速度比较快,然后复制到linux服务器
2.解压
3.修改配置文件elasticsearch.yml
network.host: 192.168.45.128 #linux服务器ip地址
http.port: 9200
4.启动(切换到es目录执行启动命令)
./bin/elasticsearch
启动有可能出现的错误:
1.启动报can not run elasticsearch as root
原因是不能用root的权限去启动es,避免es用过高的权限去执行一些操作,可以新增一个用户解决
2.启动之后进程自己kill掉了
原因可能是因为内存不足导致的,可以通过修改配置文件解决
3.报bootstrap checks failed错误
4.报max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
5.报max number of threads [3895] for user [elk] is too low, increase to at least [4096]
解决方法:root用户修改:vi /etc/security/limits.d/90-nproc.conf
* soft nproc 2048
修改为:
* soft nproc 4096
6.如果是centos6系统的话,有可能会出现system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk。
原因是Centos6不支持SecComp,而ES默认bootstrap.system_call_filter为true
解决办法:修改elasticsearch.yml,在一行注释为Memory的下面添加:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
如果以上解决办法还是不行的话,可以尝试重启一下服务器。
访问elasticsearch需要关闭服务器防火墙
systemctl stop firewalld.service
说明安装并且启动成功了。
需要注意的是,elasticsearch有两个端口9300和9200
9300端口: ES节点之间通讯使用
9200端口: ES节点 和 外部 通讯使用