首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

搭建Elasticsearch 5.4分布式集群阶段一

一.简介

ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。支持通过HTTP使用JSON进行数据索引。

我们建立一个网站或应用程序,并要添加搜索功能,令我们受打击的是:搜索工作是很难的。我们希望我们的搜索解决方案要快,我们希望有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP的索引数据,我们希望我们的搜索服务器始终可用,我们希望能够一台开始并扩展到数百,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。Elasticsearch旨在解决所有这些问题和更多的。

1.基于Lucene构建ES

怎样在Lucene之上构建一个分布式、高度伸缩、接近实时的搜索引擎呢?让我们回顾一下在搜索引擎(基于lucene)伸缩性这条路上都做了那些尝试,并且elasticsearch是如何尝试并去解决这些挑战的。

首先我们了解下最基础的理论知识building blocks(这些理论基础是构建分布式近实时搜索引擎的基础)。接着我们研究一下到底哪种才是最佳的分区策略partitioning(将lucene索引文档分割到多个分布式的分片中去)。 然后我们同样需要决定使用哪种分区复制方式replication(复制能够保证系统的高可用以及提高搜索的吞吐)。最后,我们再看一下事务日志transaction log(事务日志在elasticsearch里面是一个保证数据一致性的非常酷的功能)。

二.ElasticSearch概念1.Cluster(集群)

代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举

产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。

2.Node(节点)

一个节点是你集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引和搜索功能。和集群类似,一个节点也是由一个名字来标识的,默认情况下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点。这个名字对于管理工作来说挺重要的,因为在这个管理过程中,你会去确定网络中的哪些服务器对应于Elasticsearch 集群中的哪些节点。

一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做“elasticsearch”的集群中,这意味着,如果你在你的网络中启动了若干个节点,并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做“elasticsearch”的集群中。

在一个集群里,只要你想,可以拥有任意多个节点。而且,如果当前你的网络中没有运行任何Elasticsearch节点,这时启动一个节点,会默认创建并加入一个叫做“elasticsearch”的集群。

3.index(索引)

一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,如果你想,可以定义任意多的索引。索引相当于数据库

4.Type(类型)

在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。类型相当于数据库中的表

5.Document(文档)

一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以 JSON(Javascript Object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。

在一个index/type 里面,只要你想,你可以存储任意多的文档。注意,尽管一个文档,物理上存在于一个索引之中,文档必须被索引/赋予一个索引的type。文档相当于表中的一行记录。

6.Shards(分片)

代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。

7.Replicas(副本分片)

代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

总之,每个索引可以被分成多个分片。一个索引也可以被复制 0 次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你事后不能改变分片的数量。默认情况下,Elasticsearch 中的每个索引被分片5个主分片和1个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝),这样的话每个索引总共就有10个分片。

三.集群搭建1.es安装

1.下载并解压即可

官网https://github.com/elastic/elasticsearch下载Elasticsearch6.0.tar(版本5.4以上)

在home文件夹下新建es文件夹,把压缩包放在es文件夹中,命令解压。

2.进入elasticsearch的bin目录

3.执行./elasticsearch命令即可运行

4.浏览器中运行:http://ip:9200/如果出现以下画面表示运行成功

2.es配置

1.以本人为例,在三台机器上安装了es,来搭建集群

2进入elasticsearch的config目录,打开并编辑elasticsearch.yml

# ======================== Elasticsearch Configuration =================

# NOTE: Elasticsearch comes with reasonable defaults for most settings.

# Before you set out to tweak and tune the configuration, make sure you

# understand what are you trying to accomplish and the consequences.

# The primary way of configuring a node is via this file. This template lists

# the most important settings you may want to configure for a production cluster.

# Please see the documentation for further information on configuration options:

#

# ---------------------------------- Cluster -----------------------------

# Use a descriptive name for your cluster:

#三台电脑cluster.name:保持一致cluster.name: my-askingdata

# ------------------------------------ Node ------------------------------

# Use a descriptive name for the node:

#三台电脑的node.name不能一样node.name: node-1

# Add custom attributes to the node:

# node.rack: r1

# ----------------------------------- Paths ------------------------------

# Path to directory where to store the data (separate multiple locations by comma):

# path.data: /path/to/data

# Path to log files:

# path.logs: /path/to/logs

# ----------------------------------- Memory -----------------------------

# Lock the memory on startup:

# bootstrap.mlockall: true

# Make sure that the `ES_HEAP_SIZE` environment variable is set to about half the memory

# available on the system and that the owner of the process is allowed to use this limit.

# Elasticsearch performs poorly when the system is swapping the memory.

# ---------------------------------- Network -----------------------------

# Set the bind address to a specific IP (IPv4 or IPv6):

# ipnetwork.host: 192.168.1.106

# Set a custom port for HTTP:

#端口http.port: 9200

# For more information, see the documentation at:

#

# --------------------------------- Discovery ----------------------------

# Pass an initial list of hosts to perform discovery when new node is started:

# The default list of hosts is ["127.0.0.1", "[::1]"]

#写入三台电脑的ipdiscovery.zen.ping.unicast.hosts: ["192.168.1.106", "192.168.1.108","192.168.1.109"]

# Prevent the "split brain" by configuring the majority of nodes (total number of nodes / 2 + 1):

四.集群管理1.elasticsearch-head插件安装

elasticsearch-head是一个elasticsearch的集群管理工具,它是完全由html5编写的独立网页程序,你可以通过插件把它集成到es。

安装

1.在es的plugin目录下新建head目录

2.下载head并解压进plugin/head目录即可

3.分别启动三台 机器的es

4. 打开http://192.168.1.106:9200/_plugin/head/

2.elasticsearch-head插件索引的操作

1、索引文档的创建

将如下一条歌曲信息的数据提交到ES中创建索引:

url:http://127.0.0.1:9200/song001/list001/1

data:

{

"number":32768,

"singer":"杨坤",

"size":"5109132",

"song":"今夜二十岁",

"tag":"中国好声音",

"timelen":319

}

索引名字是: song001;

索引的类型是: list001;

本记录的id是:1

返回的信息可以看到创建是成功的,并且版本号是1;ES会对记录修改进行版本跟踪,第一次创建记录为1,同一条记录每修改一次就追加1。至此一条记录就提交到ES中建立了索引,注意HTTP的方法是PUT,不要选择错了。

2、索引文档的查询

根据索引时的ID查询的文档的RESTful接口如下

url:http://127.0.0.1:9200/song001/list001/1

HTTP方法采用GET的形式。

3、索引文档的更新

根据索引时的ID更新的文档的内容其RESTful接口如下

url:http://127.0.0.1:9200/song001/list001/1

HTTP方法采用PUT的形式。

将歌手名由“杨坤”改成“杨坤独唱”;

结果中的version字段已经成了2,因为我们这是是修改,索引版本递增;created字段是false,表示这次不是新建而是更新。

更新接口与创建接口完全一样,ES会查询记录是否存在,如果不存在就是创建,存在就是更新操作。

4、索引文档的删除

根据索引时的ID更新的文档的内容其RESTful接口如下

url:http://127.0.0.1:9200/song001/list001/1

HTTP方法采用DELETE的形式。

删除过后,再通过查询接口去查询将得不到结果。

Java社区

本文属于原创,如有疑问请后台留言,如有转载请标注原作 者,版权归本公众号所有。如果你喜欢我写的文章请关注 java资源社区,欢迎大家继续关注本公众号的技术博文。如果您觉得本文章对你有所帮助的话,不妨点个赞,您的支持就是我坚持原创的动力。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180111G02INS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券