ElasticSearch 初识与安装

一. 初识

1. 什么是ElasticSearch?

  • 基于Apache Lucene构建的开源搜索引擎
  • 采用Java编写,提供简单易用的RESTFul API
  • 轻松的横向扩展,可支持PB级的结构化和非结构化数据处理

2. 可用应用场景

  • 海量数据分析引擎(例如分析海量的日志数据)
  • 站内搜索引擎
  • 数据仓库(利用其分布式存储能力,可存储PB级的结构化和非结构化数据 )

3. 一些公司实际应用场景

  • 英国卫报——实时分析公众对文章的回应
  • 维基百科、GitHub——站内实时搜索
  • 百度——试试日志监控平台

二. 安装

1. 单实例安装:

打开官网,下载ElasticSearch压缩包,解压以后运行bin目录中的elasticsearch.bat文件html

如上图所示时,ElasticSearch启动成功,浏览器访问:127.0.0.1:9200便可看到ElasticSearch的相关信息node

注意:如果在Linux中安装会遇到意料不到的不少问题,这里我作一下在centos7中安装es的踩坑记录linux

步骤:git

Ⅰ. es 规定 root 用户不能启动 es,因此须要建立一个用户来启动 esgithub

# 建立用户名为 es 的用户
useradd es
# 设置 es 用户的密码
passwd es

# 建立 es 的 data 和 logs 目录
mkdir elasticsearch-6.2.2/data
mkdir elasticsearch-6.2.2/logs 

#将elasticsearch文件夹拷贝到其余目录,如:/usr/local/elasticsearch-6.2.2下,由于新建的es用户
对root目录没有访问权限,放在/root下当切换为es用户时没法去启动elasticsearch。

# 将 /usr/local/elasticsearch/elasticsearch-6.2.2 的拥有者设置为 es
chown -R es:es /usr/local/elasticsearch/elasticsearch-6.2.2

Ⅱ. 编辑配置文件 config/elasticsearch.yml,绑定服务器ip以便其余机器访问web

network.host: 你本身的服务器ip
http.port: 9200

Ⅲ. 防火墙中开启9200端口(这一步容易被忽视,致使其余机器访问时出现问题)npm

vi /etc/sysconfig/iptables  #打开配置文件加入以下语句:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 9200 -j ACCEPT   #以后重启防火墙,修改完成

Ⅳ. 切换到 es 用户,启动 esbootstrap

su es

sh bin/elasticsearch

# -d是后台启动,第一次不建议后台启动,前台启动能够直观的看到日志信息
#bin/elasticsearch -d

Ⅴ. 启动以后,其余机器浏览器输入10.2.1.155:9200(ip是安装es的服务器ip),出现久违的画面vim

这过程当中遇到的错误centos

Ⅰ. ERROR: [1] bootstrap checks failed...

解决方法:在配置文件 elasticsearch.yml 加一句:

bootstrap.system_call_filter: false

Ⅱ. max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

解决方法

#切换到root用户修改
vim /etc/security/limits.conf

# 在最后面追加下面内容
es hard nofile 65536
es soft nofile 65536

修改后从新登陆es用户,使用以下命令查看是否修改为功

ulimit -Hn
65536

Ⅲ. max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决方法:提升 vm.max_map_count 的大小

# 切换到root用户
vim /etc/sysctl.conf
# 在最后面追加下面内容
vm.max_map_count=262144
# 使用 sysctl -p 查看修改后的结果
sysctl -p

Ⅳ. 参考资料:

http://www.cnblogs.com/xxoome/p/6663993.html(文中包含更多可能出现的错误以及解决办法,详细全面,实践中主要参考了此文)

http://www.imooc.com/article/20336(文中介绍了一些可能出现的问题,还介绍了产生问题的缘由)

 

2. head插件安装:

安装head插件,head插件提供了友好的web页面,帮咱们解决了界面的问题,同时他还实现了基本信息的查看,REST请求的模拟,以及数据的基本检索。

注意:使用此方法须要先安装node环境,关于linux如何安装node环境请参考:

http://www.javashuo.com/article/p-mmlnbmud-kz.html

项目地址:https://github.com/mobz/elasticsearch-head

Ⅰ. 先将zip包下载到linux本地:

wget https://github.com/mobz/elasticsearch-head/archive/master.zip

Ⅱ. 再使用“unzip master.zip” 命令将其解压,解压后以下图:

Ⅲ. 使用"node-v"检查node版本是否知足要求:

Ⅳ. 进入解压后的文件夹,执行 npm install注意是在 elasticsearch-head-master 目录中执行该命令,而不是在node的安装目录中执行,本身试验的时候由于搞错了目录出现了一堆的问题

npm是node的包安装工具,若 npm install 执行到最后报错/安装失败,可使用淘宝的cnpm来代替

npm install -g cnpm --registry=https://registry.npm.taobao.org

包安装成功后,运行 npm run start ,出现以下结果,证实插件启动成功了

Ⅴ. 从图上能够看出服务启动在9100端口,咱们在浏览器中输入"10.2.1.48:9100" (ip为服务器当前ip),能够看到以下界面:

(360浏览器显示异常的,把核心切换到“极速模式”就正常了,若仍是不能显示,多是linux的9100端口未打开,须要修改一下iptables的规则)

Ⅵ. 由于es和head插件自己是属于两个独立的进程,它们之间的访问是有跨域的问题,所以这里须要进行一些跨域问题的配置修改:

首先用ctr+c结束掉head插件的进程,而后进入到elasticsearch的目录中(注意不是head插件的目录,不要进错了;而且须要注意此时当前的用户不能为root,由于root用户没法启动es

使用 vim config/elasticsearch.yml,在配置文件的末尾加上下面两句,注意冒号后面的空格:

http.cors.enabled: true
http.cors.allow-origin: "*"

保存退出后,在后台启动elasticsearch:bin/elasticsearch -d 

接着就从新启动head插件,在head插件目录内运行:npm run start 

在图中的地址栏填入ip+端口 点链接,右上角就变绿了,这就证实es服务在正常的运行。

3. 分布式安装:

Ⅰ. head插件保持开启,进入es目录编辑配置文件:

vim config/elasticsearch.yml

#在配置文件末尾添加下面三行
cluster.name: xzf  #集群的名字
node.name: master  #指挥官的名字
node.master: true  #是否为指挥官,此处单词不要错拼成了ture

Ⅱ. 杀掉es的进程,从新启动es

ps -ef | grep elastic   #查找进程
kill 1551               #杀掉进程
./bin/elasticsearch -d   #后台启动es

Ⅲ. 刷新head界面

节点名字已经变成了master,接下来按照类似的步骤配置随从节点

Ⅳ. 将es的安装包复制到/usr/local/es_slave,并解压,以后将解压出来的安装包分别复制一份到/usr/local/es_slave1和/usr/local/es_slave2中,就像这样:

Ⅴ. 使用 chown -R es:es es_slave1 将es_slave1的用户和用户组改为普通用户es,而后修改其配置文件

vim ./config/elastisearch.yml

#在配置文件中添加以下
cluster.name: xzf   #此处和master一致
node.name: slave1   #给节点起名字

network.host: 10.2.1.31
http.port: 8200     #默认es监听端口为9200,此处为防止和master冲突,改成8200

discovery.zen.ping.unicast.hosts: ["10.2.1.31"]   #用于找到master,不然处于集群以外

保存并退出。

Ⅵ. 后台启动es服务,在head页面刷新后,便可看到如下效果,能够看出slave1已经加入到集群中了

同理,slave2也按照上面的步骤进行(误,可能出现问题,具体往下看)。

注:有时候es服务启动过程当中可能会出现一些错误,而在后台启动的模式中是看不到错误信息的,若实践过程当中出现了异常,能够经过 ps -ef | grep elastic 查看es服务是否启动,也可结合es的前台启动模式查看具体报错信息

踩过的坑:

通过屡次实验发现,一台主机中好像只能同时开启两个es服务,当要开启第三个es服务的时候(如上面的“一主两从”),发现会随机挤掉某个已经开启的服务,被挤掉的服务立即下线,使用ip+端口访问浏览器会返回“拒绝访问”的错误信息。

若挤掉的是master节点,head界面中的节点列表都会消失。

缘由

如图示,提示内存不足,如果在虚拟机中运行的linux,能够关闭虚拟机后调大内存

es的更多配置项详解能够参看:http://www.cnblogs.com/hupengcool/p/4028685.html

相关文章
相关标签/搜索