ElasticSearch(一)简介和安装

简介

Elasticsearch是由Shay Banon发起的一个开源搜索服务器项目,2010年2月发布。迄今,该项
目已发展成为搜索和数据分析解决方案领域的主要一员,广泛应用于声名卓著或鲜为人知的搜索
应用程序。此外,由于其分布式性质和实时功能,许多人把它作为文档数据库。

常见的Elastic的应用常见有

  1. 海量数据分析

  2. 数据仓库

  3. 站内搜索引擎

在介绍环境安装之前,我们先来了解下开源搜索领域有多少种选择。

开源搜索引擎

Apache Lucene

是Java世界里最流行的搜索工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,很早之前就诞生了,也正因为他仅仅是个工具包,所以与其他的技术结合后诞生了很多其他的开源搜索引擎

Apache Solr

是一个开源的搜索服务器。Java开发,简单易用,lucene的马甲,历史较ES早,成熟度较高。

ElasticSearch

lucene的另一个马甲,但是在分布式高可用有独有优势,社区活跃,在目前来说风头无二。在Elastic Stack的体系下增加了很多的插件,目前已经不仅仅像是个索引工具或者搜索引擎而有分析功能,可以说是目前选型的第一选择。

Sphinx

C++开发、快。最大特点是基于SQL实现全文搜索,可以搜Mysql、HBase等,除了Java,有各种版本的API接口,如PHP,Python,Perl,Ruby等。但是在分布式,横向扩展方面并不出色

Nutch

主要包括全文搜索和网络爬虫,商业搜索引擎(百度、谷歌)的开源替代品,致力于为用户提供更透明的互联网搜索结果

LGTE

LGTE 是基于 Lucene 提供了扩展 Lucene API 用于集成很多服务,例如片段生成、查询扩展等等,并提供了一组单元测试。

官网:https://www.elastic.co/cn/

注意:最新版本的elastic search是依赖Jdk8的,先在机器上安装好jdk8

  1. 下载压缩包(我们选择下载6.2.1版本,因为后面的中文分词器目前只支持到6.2.1)
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.1.tar.gz
  1. 解压
tar -xvf elasticsearch-6.2.1.tar.gz
  1. 启动
./bin/elasticsearch

启动正常显示

  1. 打开浏览器,访问http://localhost:9200/,出现以下返回则安装成功

配置文件

Elasticsearch有两个配置文件:

  • elasticsearch.yml 用于配置elasticsearch
  • log4j2.properties 用于配置elasticsearch的日志。

注意:默认端口为9200,如果需要更改默认端口,需要更改安装目录下的配置文件conf/elasticsearch.yml

http.port=9200

也可以在启动命令中传入端口号

./bin/elasticsearch -E http.port=9002 -E path.data=/elastic/node2

大部分参数都可以通过参数出入,但是有两个参数不可

集群名称:cluster.name

节点名称:node.name 不定义此参数每次重启,节点名称随机产生

以下是elasticsearch.yml配置文件下配置简介

cluster.name:elasticsearch
配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。

node.name:”FranzKafka”
节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt文件中,其中有很多作者添加的有趣名字。

node.master:true
指定该节点是否有资格被选举成为node,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。

node.data:true
指定该节点是否存储索引数据,默认为true。

index.number_of_shards:5
设置默认索引分片个数,默认为5片。

index.number_of_replicas:1
设置默认索引副本个数,默认为1个副本。

path.conf:/path/to/conf
设置配置文件的存储路径,默认是es根目录下的config文件夹。

path.data:/path/to/data
设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,例:
path.data:/path/to/data1,/path/to/data2

path.work:/path/to/work
设置临时文件的存储路径,默认是es根目录下的work文件夹。

path.logs:/path/to/logs
设置日志文件的存储路径,默认是es根目录下的logs文件夹

path.plugins:/path/to/plugins
设置插件的存放路径,默认是es根目录下的plugins文件夹

bootstrap.mlockall:true
设置为true来锁住内存。因为当jvm开始swapping时es的效率会降低,所以要保证它不swap,可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。同时也要允许elasticsearch的进程可以锁住内存,Linux下可以通过ulimit-l unlimited命令。

network.bind_host:192.168.0.1
设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0。

network.publish_host:192.168.0.1
设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。

network.host:192.168.0.1
这个参数是用来同时设置bind_host和publish_host上面两个参数。

transport.tcp.port:9300
设置节点间交互的tcp端口,默认是9300。

transport.tcp.compress:true
设置是否压缩tcp传输时的数据,默认为false,不压缩。

http.port:9200
设置对外服务的http端口,默认为9200。

http.max_content_length:100mb
设置内容的最大容量,默认100mb

http.enabled:false
是否使用http协议对外提供服务,默认为true,开启。

gateway.type:local
gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,Hadoop的HDFS,和amazon的s3服务器,其它文件系统的设置方法下次再详细说。

gateway.recover_after_nodes:1
设置集群中N个节点启动时进行数据恢复,默认为1。

gateway.recover_after_time:5m
设置初始化数据恢复进程的超时时间,默认是5分钟。

gateway.expected_nodes:2
设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复。

cluster.routing.allocation.node_initial_primaries_recoveries:4
初始化数据恢复时,并发恢复线程的个数,默认为4。

cluster.routing.allocation.node_concurrent_recoveries:2
添加删除节点或负载均衡时并发恢复线程的个数,默认为4。

indices.recovery.max_size_per_sec:0
设置数据恢复时限制的带宽,如入100mb,默认为0,即无限制。

indices.recovery.concurrent_streams:5
设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5。

discovery.zen.minimum_master_nodes:1
设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)

discovery.zen.ping.timeout:3s
设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错。

discovery.zen.ping.multicast.enabled:false
设置是否打开多播发现节点,默认是true。

discovery.zen.ping.unicast.hosts:[“host1”, “host2:port”,”host3[portX-portY]”]
设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点

  • 节点和集群

Elasticsearch可以作为一个独立的单个搜索服务器。不过,为了能够处理大型数据集,实现容错和高可用性,Elasticsearch可以运行在许多互相合作的服务器上。这些服务器称为集群(cluster),形成集群的每个服务器称为节点(node)。cluster.name一致的实例会组成一个集群,每个集群都会有一个主节点,当主节点挂掉,会重新选举一个主节点

  • 分片

当有大量的文档时,由于内存的限制、硬盘能力、处理能力不足、无法足够快地响应客户端请求等,一个节点可能不够。在这种情况下,数据可以分为较小的称为分片(shard)的部分(其 中每个分片都是一个独立的Apache Lucene索引)。每个分片可以放在不同的服务器上,因此,数 据可以在集群的节点中传播。当你查询的索引分布在多个分片上时,Elasticsearch会把查询发送给每个相关的分片,并将结果合并在一起,而应用程序并不知道分片的存在。此外,多个分片可 以加快索引。

  • 副本

为了提高查询吞吐量或实现高可用性,可以使用分片副本。副本(replica)只是一个分片的精确复制,每个分片可以有零个或多个副本。换句话说,Elasticsearch可以有许多相同的分片, 其中之一被自动选择去更改索引操作。这种特殊的分片称为主分片(primary shard),其余称为副 本分片(replica shard)。在主分片丢失时,例如该分片数据所在服务器不可用,集群将副本提升 为新的主分片。

如果是在局域网中运行elasticsearch集群也是很简单的,只要cluster.name设置一致,并且机器在同一网段下,启动的es会自动发现对方,组成集群。

还有第二种方式,通过在配置文件中discovery.zen.ping.unicast.hosts设置主节点地址列表,来找到主节点并组成集群

discovery.zen.ping.unicast.hosts:["host1", "host2:port","host3[portX-portY]"]

安装插件*Elastic*search-head

ES有强大的插件系统,为了让ES有个好用简单的前端显示维护界面,下面我们安装个前端显示插件

因为head插件是用需要前端nodejs环境安装部署,所以我们先需要安装nodejs环境,参照以下:

http://www.runoob.com/nodejs/nodejs-install-setup.html

安装好nodejs后,有了npm 命令后,我们开始吧。

  1. 下载插件源码,
wget  https://github.com/mobz/elasticsearch-head/archive/master.zip
  1. 解压,进入目录,运行
npm install

如果你遇到网络慢问题,可以尝试用淘宝的镜像加快下载速度

npm install -g cnpm --registry=https://registry.npm.taobao.org
  1. 安装完毕后,得到
npm run start

  1. 浏览器访问http://localhost:9100,发现未连接,离成功很近了,但是我们还需要再做些工作

  1. 修改ES安装目录下的配置文件elasticsearch.yml在最后增加以下配置,这是为了解决header访问的跨域问题,然后重启。
http.cors.enabled: true
http.cors.allow-origin: "*"
  1. 再次刷新localhost:9100试试,是不是连接上了,完成。

安装插件中文分词

ES的默认的中文分词并不好用,推荐需要安装中文分词插件ik,官方的安装文档已经足够详尽,直接参考即可:

https://github.com/medcl/elasticsearch-analysis-ik

需要注意的是需要选择与你ES相匹配的版本。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值