概述
接上一篇《ElasticSearch 学习笔记(一)-----Lucene的简介以及索引原理》,这一篇我们接着来学习ElasticSearch。我们将从分别介绍ElasticSearch的概念,工作原理,以及简单应用 。
ElasticSearch 简介
ElasticSearch 是一个基于Apache Lucene™的开源搜索引擎。无论是开源开始专有领域,Lucene 可以被认为是迄今为止最先进,性能最好的,功能最全的搜索引擎库。
但是,Lucene 只是一个库,想要使用它,必须使用Java语言将其集成到应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。
ElasticSearch 也使用Java开发并使用Lucene 作为其核心来实现所有的索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene 的复杂性。从而让全文搜索变得简单。
基本概念
索引
含有相同属性的文档集合,如果有关系型数据库模型对比,索引(index)的地位与数据库实例(database)相当。索引存放和读取的基本单元是文档。
文档
文档是可以索引的基本单位。文档(Document)由一个或者多个域(Field)组成,每个域(Field)由一个域名(此域名非彼域名)或者多个值组成(有多个值的值称为多值域(multi-valued))。从客户端的角度来看,文档(Document)就是 一个JSON对象。
参数映射(Mapping)
在 1.1节 认识Apache Lucene 中已经提到,所有的文档(Document)在存储之前都必须经过分析(analyze)流程。用户可以配置输入文本分解成Token的方式;哪些Token应该被过滤掉;或者其它的的处理流程,比如去除HTML标签。此外,ElasticSearch提供的各种特性,比如排序的相关信息。保存上述的配置信息。
文档类型
每个文档在ElasticSearch中都必须设定它的类型。文档类型使得同一个索引中在存储结构不同文档时,只需要根据文档类型就可以找到对应的参数映射(Mapping)信息。方便文档的存取。
节点
单独一个ElasticSearch服务器实例称为一个节点。
集群
集群是多个ElasticSearch节点的集合。
分片索引
集群能够存储超出单机容量的信息,为了实现这种需求,ElasticSearch把数据分发到多个存储Lucene索引的物理机上。
ElasticSearch 安装
1.前提,首先要安装jdk,首先我们使用的是Oracle的JDK,通过java -version
2.下载安装包
将ElasticSearch 的安装包下载下来,然后解压。我们可以通过网页下载,然后上传的 CentOS服务器上,也可以通过wget 命令来下载,此处我将安装包放在/root/opt/
下面
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz
3.解压安装包。
tar -zxvf elasticsearch-6.4.3.tar.gz -C /root/opt
4.解压之后,转到elasticsearch-6.4.3 文件夹下
然后执行./bin/elasticsearch
启动elasticsearch,但是在root 用户下执行会报错
5.所以,我们需要创建一个普通用户
#新增一个用户 useradd estest #授权 chown -R estest /opt/elasticsearch-* #切换到这个用户 su estest
6. 此处我们还需要检查下 该用户是否有java 的访问权限,如果没有,则通过如下命令赋予权限。
su root [root@ elasticsearch-6.4.3]# sudo chmod -R 755 /root/ [root@ elasticsearch-6.4.3]# sudo chown -R estest /root/ [root@ elasticsearch-6.4.3]# sudo chmod -R 755 /root/opt/java/ [root@ elasticsearch-6.4.3]# sudo chown -R estest /root/opt/java/
7.权限赋完之后,我们可以通过java -version查看下
8.最后我们在 elasticsearch-6.4.3 文件夹下通过./bin/elasticsearch 启动elasticsearch
如图,没有报错的话,则启动成功。
9.再开一个命令窗口,我们访问curl 'http://localhost:9200'。如果出现如下结果,这表示elasticsearch启动成功。
启动elasticsearch 时可能会出现如下两个问题。
问题一、文件描述符太低
解决办法:
切换到root用户修改/etc/security/limits.conf。
su root vim /etc/security/limits.conf
在文末加入:
* soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * hard nproc 4096
退出当前用户,从新进入
问题二 、
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
max_map_count 的值是指一个进程最多可用于的内存映射区(memory map areas),在调用malloc会用到,由mmap/mprotect生成。
解决办法
切换到root 用户,修改/etc/sysctl.conf
su root vim /etc/sysctl.conf
加入
vm.max_map_count=655360
使其生效
sysctl -p
有时候启动elasticsearch时候会提示内存不足,然后启动不了,这时候可以改小jvm最小内存
cat config/jvm.options
问题三 、
有时候启动es时,会提示内存不足,导致启动失败。错误提示如下:
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f4152000000, 33554432, 0) failed; error='Cannot allocate memory' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 33554432 bytes for committing reserved memory. # An error report file with more information is saved as: # logs/hs_err_pid29872.log
这时候我们可以修改 jvm.options 中的内存设置,通过命令vim config/jvm.options 打开文件,然后修改:
如果需要外网访问的话,我们还需要在 config/elasticsearch.yml 加入如下配置:
vim config/elasticsearch.yml
network.host: 0.0.0.0 #允许跨域访问,方便后面可视化工具elasticsearch-head http.cors.enabled: true http.cors.allow-origin: "*"
特别说明:如果使用的是阿里云服务器,在需要在安全组中将端口放开
云服务器ECS----->网络和安全----->安全组---->配置规则。
至此, 我们单机版的ElasticSearch 就安装完成。接下来我们配置一下ElasticSearch 集群。
首先在主节点上添加如下配置:
vim elasticsearch.yml
#添加一下配置 cluster.name: kobe node.name: master node.master: true
然后重启服务
然后,配置从节点1
解压elasticsearch-6.4.3.tar.gz 到elasticsearch-slave1
tar -zxvf elasticsearch-6.4.3.tar.gz -C /root/opt/elasticsearch-slave1
然后,在从节点1 的elasticsearch.yml中加入如下配置:
##允许跨域访问,方便后面可视化工具elasticsearch-head http.cors.enabled: true http.cors.allow-origin: "*" cluster.name: kobe node.name: slave1 http.port: 9800 network.host: 0.0.0.0 #设置主动发现主节点地址 discory.zen.ping.unicast.hosts: ["172.16.148.129"]
其中,172.16.148.129 对应主节点的启动ip。 然后启动从节点,至此我们主从节点都配置完毕。
elasticsearch-head安装
git clone git://github.com/mobz/elasticsearch-head.git cd elasticsearch-head npm install 或者cnpm install(需要安装淘宝镜像) npm run start
启动成功之后访问http://localhost:9100
总结
本文,我们详细介绍了ElasticSearch的安装,以及一些注意事项。然后说到了主从节点的配置。