一、Elasticsearch的由来
许多年前,一个叫Shay Banon的待业工程师跟随他的新婚妻子来到伦敦,他的妻子想在伦敦学习做一名厨师。而他在伦敦寻找工作的期间,接触到了Lucene的早期版本,他想为自己的妻子开发一个方便搜索菜谱的应用。
直接使用Lucene构建搜索会有很多的坑以及重复性的工作,所以Shay便在Lucene的基础上不断进行抽象来让Java程序嵌入搜索变得更容易一些,经过一段时间的打磨,就诞生了他的第一个开源作品,他给自己的这个作品起了个名字,叫 “Compass”,中文即“指南针”的意思。之后,Shay找到了一份新工作,新工作是处在一个高性能分布式的开发环境中。他在工作中渐渐发现,越来越需要一个易用的高性能、实时、分布式搜索服务,于是他决定重写Compass,将它从一个库打造成了一个独立的server,并将其改名为Elasticsearch。
Elasticsearch发布的第一个版本是在2010年的二月份,从那之后,Elasticsearch便成了Github上最受人瞩目的项目之一,并且很快就有超过300名开发者加入进来贡献了自己的代码。后来Shay和另一位合伙人成立了公司专注打造Elasticsearch,他们对Elasticsearch进行了一些商业化的包装和支持。但是,Elasticsearch承诺,永远都将是开源并且免费的。
不过悲剧的是,Shay承诺为妻子开发的菜谱搜索应用,到现在还没做出来……
Elasticsearch是基于Apache Lucene构建的开源搜索引擎,采用java编写,提供简单易用的RestFul API,简单明了的实现搜索功能,而不必如面对Lucene的复杂性,elasticSearch目标就是屏蔽复杂性,让全文搜索变得相对简单。同时ElasticSearch能够进行大规模的横向扩展,支持PB级的结构化和非结构化数据的处理。
简单地说,当我们存储机器不够的时候,或者说存储容量不足的时候,我们可以通过不断的横向加节点,也就是加机器来解决存储容量的问题,通过这种方式可以让我们的存储从GB到TB甚至于PB级的转化。
三、应用场景
假设你有海量的日志数据,每天有几百GB或者TB甚至PB级别的日志数据,当你要分析一些指标数据的时候就可以使用ES的聚合搜索功能,来分析解决。而不用花费大量的人力精力来设计一个新的系统。这样不仅节省大量的成本,还能有不错的使用效果。
当你想搭建一站内搜索的时候,不用花费大量的成本,去开发,只需要简单的继承,并进行一些简单的封装,即可使用。
可以利用elasticsearch强大的分布式存储能力,可以作为数据仓库来使用。存储PB级别的结构化或者非结构化数据,为上层应用提供强大的数据存储能力。
英国卫报:实时分析公众对文章的回应
百度:实时日志监控平台
维基百科,GitHub,站内实时搜索
阿里,腾讯,小米,京东,Google 等公司都在使用。
四、elasticsearch安装
4.1 elasticsearch安装包下载(选择版本6.4.0)
Window系统下载zip版本,linux系统下载tar版本
下载指定版本的安装包:
linux 系统下载: elasticsearch-6.4.0.tar.gz
Windows系统下载:elasticsearch-6.4.0.zip
4.2 Elasticsearch安装
为了模拟真实场景,我们将在linux下安装Elasticsearch。
第一步:创建新的用户
[Shell] 纯文本查看 复制代码
[root@quanyi ~]# useradd quanyi
[root@quanyi ~]# passwd quanyi
Changing password for user quanyi.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
注:Elasticsearch出于安全考虑,禁止使用root账户操作Elasticsearch。当我们在使用elasticsearch的时候,如果是以root权限来执行elasticsearch:
./elasticsearch
则会有以下报错:
Exception in thread "main" java.lang.RuntimeException: don't run elasticsearch as root.
所以我们要创建新的用户。
第二步:切换用户
[Shell] 纯文本查看 复制代码
[root@quanyi lib]# su quanyi
第三步:规划安装目录,上传安装文件到指定目录
[Shell] 纯文本查看 复制代码
#规划安装目录:
/home/quanyi
打开FTP文件传输工具,上传安装文件到安装目录
第四步:解压安装包 重命名解压文件名称
[AppleScript] 纯文本查看 复制代码
[quanyi@quanyi ~]$ tar -zxvf elasticsearch-6.4.0.tar.gz
[quanyi@quanyi ~]$ mv elasticsearch-6.4.0 elasticsearch
第五步:查看安装目录
五、elasticsearch配置
进入到 cd elasticsearch/config/ 需要修改的配置文件有两个:
elasticsearch.yml
jvm.options
扩展:[YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的。
它的基本语法规则如下:
1.大小写敏感
2.使用缩进表示层级关系
3.缩进时不允许使用Tab键,只允许使用空格。
4.缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
5.表示注释,从这个字符一直到行尾,都会被解析器忽略]
第一步:修改 elasticsearch.yml 文件
[Shell] 纯文本查看 复制代码
#配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,
#如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
cluster.name: my-es
#当前节点的名称
node.name: quanyi
# 添加日志目录和数据存放目录:
path.data: /home/yunwu/elasticsearch/data # 数据目录位置
path.logs: /home/yunwu/elasticsearch/logs # 日志目录位置
# 设置当前的ip地址,通过指定相同网段的其他节点会加入该集群中
network.host: 192.168.57.101
#设置对外服务的http端口,默认9200
http.port: 9200
#设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
discovery.zen.ping.unicast.hosts: ["quanyi"]
扩展:
[Shell] 纯文本查看 复制代码
#主机名映射
[root@quanyi ~]# vim /etc/hosts
[root@quanyi ~]# source /etc/hosts
192.168.57.101 quanyi
第二步:修改jvm.options
Elasticsearch基于Lucene的,而Lucene底层是java实现,因此我们需要配置jvm参数,Jvm.options默认配置是:
-Xms1g
-Xmx1g
教学需要默认配置参数太大了,我们调小一些(在实际生产中根据需要增加或者减少jvm大小的配置):
-Xms512m
-Xmx512m
第三步:创建data目录和logs的目录
刚才我们修改配置,把data和logs目录修改指向了elasticsearch的安装目录。但是这两个目录并不存在,因此我们需要创建出来。如果存在就不用创建。
进入Elasticsearch的根目录,然后创建:
[Shell] 纯文本查看 复制代码
mkdir data
mkdir logs
到此Elasticsearch安装配置已经完成,可以进入elasticsearch/bin 目录使用 ./elasticsearch 启动。但是会报错。我们下面解决启动报错的问题。
六、解决启动报错
第一个报错(内核过低):
我们使用的是centos6,其linux内核版本为2.6。而Elasticsearch的插件要求至少3.5以上版本。不过没关系,我们禁用这个插件即可。
解决方案:
修改elasticsearch.yml文件,在最下面添加以后配置:
[Shell] 纯文本查看 复制代码
bootstrap.system_call_filter: false
重启这个错误解决。
第二个报错(文件权限不足):
我们用的是quanyi用户,而不是root,所以文件权限不足。
解决方案:
首先用root用户登录。
修改配置文件limits.conf
[Shell] 纯文本查看 复制代码
[root@quanyi /]# vim /etc/security/limits.conf
添加如下配置:
[Shell] 纯文本查看 复制代码
* soft nofile 65536
* hard nofile 131072
* soft nproc 4096
* hard nproc 4096
扩展:
nofile 是针对用户打开最大文件数的限制的一个设置,nproc是操作系统级别对每个用户创建的进程数的限制,在Linux下运行多线程时,每个线程的实现其实是一个轻量级的进程,对应的术语是:light weight process(LWP)。
soft nproc: 可打开的文件描述符的最大数(软限制)
hard nproc:可打开的文件描述符的最大数(硬限制)
soft nofile:单个用户可用的最大进程数量(软限制)
hard nofile:单个用户可用的最大进程数量(硬限制)
第三个报错(线程数不够):
[Shell] 纯文本查看 复制代码
[2]: max number of threads [1024] for user [quanyi] is too low, increase to at least [4096]
[Shell] 纯文本查看 复制代码
[root@quanyi /]# vim /etc/security/limits.d/90-nproc.conf
第四个报错(进程中内存映射区域的最大数量过小):
[Shell] 纯文本查看 复制代码
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
继续修改配置:sysctl.conf
[Shell] 纯文本查看 复制代码
vim /etc/sysctl.conf
添加下面内容:
[Shell] 纯文本查看 复制代码
vm.max_map_count = 655360
然后执行命令:-p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载
[Shell] 纯文本查看 复制代码
sysctl -p
从启终端窗口,所有错误修改完毕,一定要重启你的 Xshell终端,否则配置在当前Xshell窗口无效。
重新启动Elasticsearch。
浏览器访问elasticsearch服务: