ElasticSearch入门之环境搭建

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: ElasticSearch是基于Apache Lucene构建的开源搜索引擎 采用Java编写,提供了简单易用的RESTFul API 轻松的横向扩展,可支持PB级的结构化或非结构化的数据处理

著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

ElasticSearch简介

什么是ElasticSearch:

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

应用场景:

海量数据分析引擎 站内搜索引擎 作为数据仓库

一线公司实际应用场景:

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

单实例安装ElasticSearch

在安装ElasticSearch之前,首先准备好Java环境:

[root@localhost /usr/local/jdk1.8]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
[root@localhost /usr/local/jdk1.8]# 

到ElasticSearch官网上复制ElasticSearch的下载链接:www.elastic.co/cn/

复制ElasticSearch 5.x版本的下载地址,到命令行上进行下载:

[root@localhost ~]# cd /usr/local/src/
[root@localhost /usr/local/src]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.2.tar.gz

下载好后,解压到相应的目录中:

[root@localhost /usr/local/src]# ls
elasticsearch-5.5.2.tar.gz
[root@localhost /usr/local/src]# tar -zvxf elasticsearch-5.5.2.tar.gz -C /usr/local
[root@localhost /usr/local/src]# ls /usr/local/elasticsearch-5.5.2/
bin  config  lib  LICENSE.txt  modules  NOTICE.txt  plugins  README.textile
[root@localhost /usr/local/src]#

安装完成后,我们需要新建一个普通用户,因为ElasticSearch不允许在root用户下运行,所以我们需要创建独立的用户来运行es。创建elsearch用户组及elsearch用户:

[root@localhost ~]# groupadd elsearch
[root@localhost ~]# useradd elsearch -g elsearch -p elasticsearch
[root@localhost ~]# passwd elsearch  # 设置密码

更改elasticsearch安装目录及其内部文件的所属用户及组为elsearch:elsearch,如下:

[root@localhost ~]# cd /usr/local/
[root@localhost /usr/local]# chown -R elsearch:elsearch elasticsearch-5.5.2/
[root@localhost /usr/local]# ll |grep elasticsearch-5.5.2
drwxr-xr-x. 8 elsearch elsearch 143 6月  19 10:46 elasticsearch-5.5.2
[root@localhost /usr/local]#

由于在CentOS7下,elasticsearch 5.x 设置了ip后,启动会有些问题导致启动报错,我们需要设置如下系统参数来解决这个问题:

[root@localhost /usr/local/elasticsearch-5.5.2]# vim /etc/security/limits.conf
*                hard    nofile          65536
*                soft    nofile          131072
*                soft    nproc           2048   
*                hard    nproc           4096
[root@localhost /usr/local/elasticsearch-5.5.2]# vim /etc/security/limits.d/90-nproc.conf
*                soft    nproc           2048
[root@localhost /usr/local/elasticsearch-5.5.2]# vim /etc/sysctl.conf
vm.max_map_count=655360
[root@localhost /usr/local/elasticsearch-5.5.2]# sysctl -p
vm.max_map_count = 655360
[root@localhost /usr/local/elasticsearch-5.5.2]# 

关于这个问题可以参考如下issues:

github.com/elastic/ela…

Elasticsearch5.5.1安装问题汇总:

github.com/DimonHo/DH_…

完成以上的配置后,我们从root用户切换到elsearch用户:

[root@localhost ~]# su elsearch
[elsearch@localhost root]$

在启动es前先设置一下绑定的ip,设置为可被外部访问的ip,以及设置bootstrap相关的参数:

[elsearch@localhost root]$ cd /usr/local/elasticsearch-5.5.2/
[elsearch@localhost elasticsearch-5.5.2]$ vim config/elasticsearch.yml
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0  # 找到该项,设置为可被外部访问的ip
[elsearch@localhost elasticsearch-5.5.2]$ 

启动ElasticSearch服务的命令:

[elsearch@localhost elasticsearch-5.5.2]$ sh bin/elasticsearch

加上-d参数表示后台启动,一般我们都采用后台启动的方式:

[elsearch@localhost elasticsearch-5.5.2]$ sh bin/elasticsearch -d

ElasticSearch服务启动成功后,可看到如下进程信息:

[elsearch@localhost elasticsearch-5.5.2]$ ps aux |grep elasticsearch
elsearch  13353  107 83.1 4697512 1550164 pts/0 Sl   11:04   0:03 /usr/local/jdk1.8/bin/java -Xms2g -Xmx2g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -server -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -Djdk.io.permissionsUseCanonicalPath=true -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j.skipJansi=true -XX:+HeapDumpOnOutOfMemoryError -Des.path.home=/usr/local/elasticsearch-5.5.2 -cp /usr/local/elasticsearch-5.5.2/lib/* org.elasticsearch.bootstrap.Elasticsearch -d
elsearch  13372  0.0  0.0 112720   988 pts/0    S+   11:05   0:00 grep --color=auto elasticsearch
[elsearch@localhost elasticsearch-5.5.2]$ 

查看ElasticSearch服务所监听的端口:

[elsearch@localhost elasticsearch-5.5.2]$ netstat -lntp |grep java
tcp6       0      0 :::9200                 :::*                    LISTEN      14849/java          
tcp6       0      0 :::9300                 :::*                    LISTEN      14849/java          
[elsearch@localhost elasticsearch-5.5.2]$ 

设置防火墙规则,开放ElasticSearch服务所监听的端口:

[elsearch@localhost elasticsearch-5.5.2]$  sudo firewall-cmd --zone=public --add-port=9200/tcp --permanent
success
[elsearch@localhost elasticsearch-5.5.2]$  sudo firewall-cmd --zone=public --add-port=9300/tcp --permanent
success
[elsearch@localhost elasticsearch-5.5.2]$  sudo firewall-cmd --reload
success
[elsearch@localhost elasticsearch-5.5.2]$ 

开放了相应的端口后,从浏览器中访问,看看能否访问成功,如下则是访问成功的:

“ name ”“:“ XltSgulM ”,
“ cluster _ name ”:“ elasticsearch ”,
” cluster _ uid ”:“tgF78nzdSfqtywaVeMmY9Q”,” version ”:{
“ rumber :“5.5.2”,
“ build hash ”:“b2f0c09”,
“ build _ date ”:“2017-08-14 T 12:33:14.154Z”,“ build _ snapshot ”: false ,
“ lucene _ version ”:“6.6.0”
“ tagline ”:“ You Know , for Search ”

关于关闭及重启elasticsearch服务,elasticsearch没有直接的关闭或重启命令,关闭elasticsearch服务只能通过kill命令来杀掉服务的进程,如下:

[elsearch@localhost elasticsearch-5.5.2]$ ps aux |grep es  # 查看进程id
[elsearch@localhost elasticsearch-5.5.2]$ kill -8 193460  # 通过进程id来杀掉服务

重启:

[elsearch@localhost elasticsearch-5.5.2]$ ps aux |grep es  # 查看进程id
[elsearch@localhost elasticsearch-5.5.2]$ kill -8 193460  # 通过进程id来杀掉服务
[elsearch@localhost elasticsearch-5.5.2]$ sh bin/elasticsearch -d

也可以编写一个服务脚本,以此来方便的启动或关闭elasticsearch服务。

插件安装

本小节我们来安装es的实用插件elasticsearch-head,这个插件可以提供一个图形化的界面,能让我们直观的查看节点数据以及集群健康状态等。github地址如下:

github.com/mobz/elasti…

进入elasticsearch-head的github地址,复制其.zip的下载链接,到命令行上进行下载:

[root@localhost /usr/local/src]# wget https://github.com/mobz/elasticsearch-head/archive/master.zip

注:切换成root用户

解压下载好的.zip压缩包:

[root@localhost /usr/local/src]# unzip master.zip
[root@localhost /usr/local/src]# mv elasticsearch-head-master/ /usr/local/
[root@localhost /usr/local/src]# ls /usr/local/elasticsearch-head-master/
Dockerfile         elasticsearch-head.sublime-project  grunt_fileSets.js  LICENCE       plugin-descriptor.properties  README.textile  src
Dockerfile-alpine  Gruntfile.js                        index.html         package.json  proxy                         _site           test
[root@localhost /usr/local/src]#

elasticsearch-head是一个提供图形化的插件,其图形化是基于node.js的,所以我们需要先准备好node.js环境,node.js官网下载地址如下:

nodejs.org/en/download…

在命令行中下载并解压安装包:

[root@localhost /usr/local/src]# wget https://nodejs.org/dist/v8.11.3/node-v8.11.3-linux-x64.tar.xz
[root@localhost /usr/local/src]# tar -Jxvf node-v8.11.3-linux-x64.tar.xz -C /usr/local/
[root@localhost /usr/local/src]# mv /usr/local/node-v8.11.3-linux-x64/ /usr/local/node-8.11.3

配置环境变量:

[root@localhost /usr/local/src]# vim /etc/profile
export NODE_HOME=/usr/local/node-8.11.3
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$NODE_HOME/bin
[root@localhost /usr/local/src]# source /etc/profile
[root@localhost /usr/local/src]# node -v  #
输出版本号则代表配置成功
v8.11.3
[root@localhost /usr/local/src]#

进入es-head的安装目录,执行npm install命令安装所需的模块:

[root@localhost /usr/local/src]# cd /usr/local/elasticsearch-head-master/
[root@localhost /usr/local/elasticsearch-head-master]# npm install phantomjs-prebuilt@2.1.14 --ignore-scripts  #
因为有墙,phantomjs-prebuilt需要单独安装,不然会失败
[root@localhost /usr/local/elasticsearch-head-master]# npm install

es-head使用的是grunt server作为服务器,而grunt server默认监听的是localhost,所以我们需要修改Gruntfile.js文件,增加一段配置,不然外部是无法访问的,如下:

[root@localhost /usr/local/elasticsearch-head-master]# vim Gruntfile.js
connect: {
        server: {
                options: {
                        hostname: '0.0.0.0',  # 增加这段
                        port: 9100,
                        base: '.',
                        keepalive: true
                }
        }
}
[root@localhost /usr/local/elasticsearch-head-master]#

设置防火墙规则,开放9100端口:

[root@localhost /usr/local/elasticsearch-head-master]# firewall-cmd --zone=public --add-port=9100/tcp --permanent
success
[root@localhost /usr/local/elasticsearch-head-master]# firewall-cmd --reload
success
[root@localhost /usr/local/elasticsearch-head-master]# 

es与es-head是两个独立的进程,当es-head访问es服务时,会存在一个跨域问题。所以我们需要修改es的配置文件,增加一些配置项来解决这个问题,如下:

[root@localhost /usr/local/elasticsearch-head-master]# cd ../elasticsearch-5.5.2/config/
[root@localhost /usr/local/elasticsearch-5.5.2/config]# vim elasticsearch.yml  # 文件末尾加上如下配置
http.cors.enabled: true
http.cors.allow-origin: "*"
[root@localhost /usr/local/elasticsearch-5.5.2/config]# 

注:修改完配置文件后需切换到elsearch用户中重启es服务。

接着再次进入es-head的安装目录,使用如下命令,启动es-head:

[root@localhost /usr/local/elasticsearch-head-master]# npm run start

使用浏览器访问如下:

16635e85ee874a77_tplv-t2oaga2asx-zoom-in-crop-mark_4536_0_0_0.png

伪分布式安装ElasticSearch

以上我们介绍了es单实例的安装以及es-head的安装,本小节我们来介绍如何在单机情况下安装伪分布式的es服务。首先配置之前已安装好的es服务的配置文件,如下:

[root@localhost ~]# cd /usr/local/elasticsearch-5.5.2/config/
[root@localhost /usr/local/elasticsearch-5.5.2/config]# vim elasticsearch.yml   # 在文件末尾加入如下内容
cluster.name: es
node.name: master
node.master: true
[root@localhost /usr/local/elasticsearch-5.5.2/config]# 

参数说明:

  • cluster.name 集群的名称,可自定义
  • node.name 节点的名称,可自定义
  • node.master 是否指定为master角色 新建一个存放slave的目录,拷贝es压缩包到该目录中并解压,然后再 拷贝多一份slave,最后还需要更改es_slave目录的所属用户及用户组为elsearch:
[root@localhost ~]# mkdir /usr/local/es_slave
[root@localhost ~]# cp /usr/local/src/elasticsearch-5.5.2.tar.gz /usr/local/es_slave/
[root@localhost ~]# cd /usr/local/es_slave/
[root@localhost /usr/local/es_slave]# tar -zxvf elasticsearch-5.5.2.tar.gz
[root@localhost /usr/local/es_slave]# mv elasticsearch-5.5.2 ./es_slave1
[root@localhost /usr/local/es_slave]# cp -r ./es_slave1/ es_slave2/
[root@localhost /usr/local]# cd ../
[root@localhost /usr/local]# chown -R elsearch:elsearch es_slave/

逐个修改slave的配置文件:

[root@localhost /usr/local/es_slave]# vim es_slave1/config/elasticsearch.yml
cluster.name: es
node.name: slave1
network.host: 127.0.0.1
http.port: 8200
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
[root@localhost /usr/local/es_slave]# vim es_slave1/config/elasticsearch.yml
cluster.name: es
node.name: slave2
network.host: 127.0.0.1
http.port: 7200
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
[root@localhost /usr/local]# 

开放端口:

[root@localhost /usr/local/elasticsearch-head-master]# firewall-cmd --zone=public --add-port=8200/tcp --permanent
success
[root@localhost /usr/local/elasticsearch-head-master]# firewall-cmd --zone=public --add-port=7200/tcp --permanent
success
[root@localhost /usr/local/elasticsearch-head-master]# firewall-cmd --reload
success
[root@localhost /usr/local/elasticsearch-head-master]# 

切换到elsearch用户中重启master节点,并启动其他两个slave节点:

[elsearch@localhost elasticsearch-5.5.2]$ ps aux |grep elastic
[elsearch@localhost elasticsearch-5.5.2]$ kill -8 16410
[elsearch@localhost elasticsearch-5.5.2]$ sh bin/elasticsearch -d
[elsearch@localhost elasticsearch-5.5.2]$ cd
[elsearch@localhost root]$ sh /usr/local/es_slave/es_slave1/bin/elasticsearch -d
[elsearch@localhost root]$ sh /usr/local/es_slave/es_slave1/bin/elasticsearch -d

启动es-head:

[root@localhost ~]# cd /usr/local/elasticsearch-head-master/
[root@localhost /usr/local/elasticsearch-head-master]# npm run start

16635eb947b9f425_tplv-t2oaga2asx-zoom-in-crop-mark_4536_0_0_0.png

本文来源 blog.51cto.com/zero01/2130…


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
6月前
|
安全 Linux 开发工具
Elasticsearch 搜索入门技术之一
Elasticsearch 搜索入门技术之一
257 1
|
6月前
|
JSON 自然语言处理 数据库
数据库-ElasticSearch入门(索引、文档、查询)
数据库-ElasticSearch入门(索引、文档、查询)
386 0
|
1月前
|
存储 Java API
Elasticsearch 7.8.0从入门到精通
这篇文章详细介绍了Elasticsearch 7.8.0的安装、核心概念(如正排索引和倒排索引)、RESTful风格、各种索引和文档操作、条件查询、聚合查询以及在Spring Boot中整合Elasticsearch的步骤和示例。
121 1
Elasticsearch 7.8.0从入门到精通
|
2月前
|
数据可视化 Java Windows
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
本文介绍了如何在Windows环境下安装Elasticsearch(ES)、Elasticsearch Head可视化插件和Kibana,以及如何配置ES的跨域问题,确保Kibana能够连接到ES集群,并提供了安装过程中可能遇到的问题及其解决方案。
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
|
2月前
|
存储 关系型数据库 MySQL
浅谈Elasticsearch的入门与实践
本文主要围绕ES核心特性:分布式存储特性和分析检索能力,介绍了概念、原理与实践案例,希望让读者快速理解ES的核心特性与应用场景。
|
3月前
|
JSON 搜索推荐 数据挖掘
ElasticSearch的简单介绍与使用【入门篇】
这篇文章是Elasticsearch的入门介绍,涵盖了Elasticsearch的基本概念、特点、安装方法以及如何进行基本的数据操作,包括索引文档、查询、更新、删除和使用bulk API进行批量操作。
ElasticSearch的简单介绍与使用【入门篇】
|
2月前
|
JSON 监控 Java
Elasticsearch 入门:搭建高性能搜索集群
【9月更文第2天】Elasticsearch 是一个分布式的、RESTful 风格的搜索和分析引擎,基于 Apache Lucene 构建。它能够处理大量的数据,提供快速的搜索响应。本教程将指导你如何从零开始搭建一个基本的 Elasticsearch 集群,并演示如何进行简单的索引和查询操作。
209 3
|
3月前
|
JSON 测试技术 API
黑马商城 Elasticsearch从入门到部署 RestClient操作文档
这篇文章详细介绍了如何使用Java的RestHighLevelClient客户端与Elasticsearch进行文档操作,包括新增、查询、删除、修改文档以及批量导入文档的方法,并提供了相应的代码示例和操作步骤。
|
3月前
|
JSON 自然语言处理 Java
Elasticsearch从入门到部署 文档操作 RestAPI
这篇文章详细介绍了Elasticsearch中文档的增删改查操作,并通过Java的RestHighLevelClient客户端演示了如何通过REST API与Elasticsearch进行交云,包括初始化客户端、索引库的创建、删除和存在性判断等操作。
|
3月前
|
JSON 自然语言处理 数据库
Elasticsearch从入门到项目部署 安装 分词器 索引库操作
这篇文章详细介绍了Elasticsearch的基本概念、倒排索引原理、安装部署、IK分词器的使用,以及如何在Elasticsearch中进行索引库的CRUD操作,旨在帮助读者从入门到项目部署全面掌握Elasticsearch的使用。