精华内容
下载资源
问答
  • 节点类型

    千次阅读 2018-09-27 15:40:17
    节点类型 1. 候选主节点(Master-eligible node)   一个节点启动后,就会使用Zen Discovery机制去寻找集群中的其他节点,并与之建立连接。集群中会 从候选主节点中选举出一个主节点 ,主节点负责创建索引、...

    Elasticsearch天生就支持分布式部署,通过集群部署可以提高系统的可用性。本文重点谈一谈Elasticsearch的集群节点相关问题,搞清楚这些是进行Elasticsearch集群部署和拓扑结构设计的前提。关于如何配置集群的配置文件不会在本文中提及。

    节点类型

    1. 候选主节点(Master-eligible node)

      一个节点启动后,就会使用Zen Discovery机制去寻找集群中的其他节点,并与之建立连接。集群中会从候选主节点中选举出一个主节点,主节点负责创建索引、删除索引、分配分片、追踪集群中的节点状态等工作。Elasticsearch中的主节点的工作量相对较轻,用户的请求可以发往任何一个节点,由该节点负责分发和返回结果,而不需要经过主节点转发。
      正常情况下,集群中的所有节点,应该对主节点的选择是一致的,即一个集群中只有一个选举出来的主节点。然而,在某些情况下,比如网络通信出现问题、主节点因为负载过大停止响应等等,就会导致重新选举主节点,此时可能会出现集群中有多个主节点的现象,即节点对集群状态的认知不一致,称之为脑裂现象。为了尽量避免此种情况的出现,可以通过discovery.zen.minimum_master_nodes来设置最少可工作的候选主节点个数,建议设置为(候选主节点数 / 2) + 1, 比如,当有三个候选主节点时,该配置项的值为(3/2)+1=2,也就是保证集群中有半数以上的候选主节点
      候选主节点的设置方法是设置node.mater为true,默认情况下,node.mater和node.data的值都为true,即该节点既可以做候选主节点也可以做数据节点。由于数据节点承载了数据的操作,负载通常都很高,所以随着集群的扩大,建议将二者分离,设置专用的候选主节点。当我们设置node.data为false,就将节点设置为专用的候选主节点了。

    node.master = true
    node.data = false
     
    • 1
    • 2

    2. 数据节点(Data node)

      数据节点负责数据的存储和相关具体操作,比如CRUD、搜索、聚合。所以,数据节点对机器配置要求比较高,首先需要有足够的磁盘空间来存储数据,其次数据操作对系统CPU、Memory和IO的性能消耗都很大。通常随着集群的扩大,需要增加更多的数据节点来提高可用性。
      前面提到默认情况下节点既可以做候选主节点也可以做数据节点,但是数据节点的负载较重,所以需要考虑将二者分离开,设置专用的数据节点,避免因数据节点负载重导致主节点不响应。

    node.master = false
    node.data = true
     
    • 1
    • 2

    3. 客户端节点(Client node)

      按照官方的介绍,客户端节点就是既不做候选主节点也不做数据节点的节点,只负责请求的分发、汇总等等,也就是下面要说到的协调节点的角色。这样的工作,其实任何一个节点都可以完成,单独增加这样的节点更多是为了负载均衡。

    node.master = false
    node.data = false
    

    4. 协调节点(Coordinating node)

      协调节点,是一种角色,而不是真实的Elasticsearch的节点,你没有办法通过配置项来配置哪个节点为协调节点。集群中的任何节点,都可以充当协调节点的角色。当一个节点A收到用户的查询请求后,会把查询子句分发到其它的节点,然后合并各个节点返回的查询结果,最后返回一个完整的数据集给用户。在这个过程中,节点A扮演的就是协调节点的角色。毫无疑问,协调节点会对CPU、Memory要求比较高。

    分片与集群状态

      分片(Shard),是Elasticsearch中的最小存储单元。一个索引(Index)中的数据通常会分散存储在多个分片中,而这些分片可能在同一台机器,也可能分散在多台机器中。这样做的优势是有利于水平扩展,解决单台机器磁盘空间和性能有限的问题,试想一下如果有几十TB的数据都存储同一台机器,那么存储空间和访问时的性能消耗都是问题。
      默认情况下,Elasticsearch会为每个索引分配5个分片,但是这并不代表你必须使用5个分片,同时也不说分片越多性能就越好。一切都取决对你的数据量的评估和权衡。虽然跨分片查询是并行的,但是请求分发、结果合并都是需要消耗性能和时间的,所以在数据量较小的情况下,将数据分散到多个分片中反而会降低效率。如果说一定要给一个数据的话,笔者现在的每个分片数据量大概在20GB左右。
      关于多分片与多索引的问题。一个索引可以有多个分片来完成存储,但是主分片的数量是在索引创建时就指定好的,且无法修改,所以尽量不要只为数据存储建立一个索引,否则后面数据膨胀时就无法调整了。笔者的建议是对于同一类型的数据,根据时间来分拆索引,比如一周建一个索引,具体取决于数据增长速度。
      上面说的是主分片(Primary Shard),为了提高服务可靠性和容灾能力,通常还会分配复制分片(Replica Shard)来增加数据冗余性。比如设置复制分片的数量为1时,就会对每个主分片做一个备份。
      通过API(http://localhost:9200/_cluster/health?pretty)可以查看集群的状态,通常集群的状态分为三种:

    • Red,表示有主分片没有分配,某些数据不可用。
    • Yellow,表示主分片都已分配,数据都可用,但是有复制分片没有分配。
    • Green,表示主分片和复制分片都已分配,一切正常。

    部署拓扑

      最后,来看两个集群部署的拓扑图,这里我们不考虑单个节点的调优。拓扑图一是一个简单的集群部署,适用于数据量较小的场景。集群中有三个节点,三个都是候选主节点,因此我们可以设置最少可工作候选主节点个数为2。节点1和2同时作为数据节点,两个节点的数据相互备份。这样的部署结构在扩展过程中,通常是先根据需要逐步加入专用的数据节点,最后考虑将数据节点和候选主节点分离,也就发展为了拓扑图二的结构。在拓扑图二中,有三个专用的候选主节点,用来做集群状态维护,数据节点根据需要进行增加,注意只增加专用的数据节点即可。

    拓扑图一


    拓扑图二




    (全文完,本文地址:http://blog.csdn.net/zwgdft/article/details/54585644
    Bruce,2017/01/18



    展开全文
  • Elasticsearch节点类型

    千次阅读 2019-06-17 20:54:52
    Elasticsearch2.x节点类型 节点类型 中文名称 配置 作用 备注 master节点 主节点 node.master=truenode.data=false

    master节点(主节点)

    配置

    node.master:true
    node.data:false(这里也可以配置成node.data:true)
    

    node.master和node.data默认都是true, 但还是建议显式配置

    机器配置
    普通服务器即可(CPU 内存 消耗一般)

    作用

    1. 索引的创建或删除
    2. 跟踪哪些节点是集群的一部分
    3. 决定哪些分片分配给相关的节点

    说明
    稳定的主节点对集群的健康是非常重要的。
    ​ 默认情况下任何一个集群中的节点都有可能被选为主节点。索引数据和搜索查询等操作会占用大量的cpu,内存,io资源,为了确保一个集群的稳定,分离主节点和数据节点是一个比较好的选择。虽然主节点也可以协调节点,路由搜索和从客户端新增数据到数据节点,但最好不要使用这些专用的主节点。一个重要的原则是,尽可能做尽量少的工作。
    为了防止数据丢失,配置discovery.zen.minimum_master_nodes设置是至关重要的(默认为1),每个主节点应该知道形成一个集群的最小数量的主资格节点的数量。
    解释如下:
    ​ 假设我们有一个集群。有3个主资格节点,当网络发生故障的时候,有可能其中一个节点不能和其他节点进行通信了。这个时候,当discovery.zen.minimum_master_nodes设置为1的时候,就会分成两个小的独立集群,当网络好的时候,就会出现数据错误或者丢失数据的情况。当discovery.zen.minimum_master_nodes设置为2的时候,一个网络中有两个主资格节点,可以继续工作,另一部分,由于只有一个主资格节点,则不会形成一个独立的集群,这个时候当网络回复的时候,节点又会从新加入集群。
    设置这个值的原则是:

    (master_eligible_nodes / 2)+ 1
    

    这个参数也可以动态设置:

    PUT _cluster/settings
    {
    	"transient": {
    		"discovery.zen.minimum_master_nodes": 2
    	}
    }
    

    data节点(数据节点)

    配置

    node.master:false(这里也可以配置成node.master:true)
    node.data:true
    

    机器配置
    较高配置服务器, 主要消耗磁盘,内存

    作用

    1. 存储索引数据
    2. 对文档进行增删改查,聚合操作

    说明
    数据节点对cpu,内存,io要求较高,在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点。
    数据节点路径设置,每一个主节点和数据节点都需要知道分片,索引,元数据的物理存储位置,path.data默认位为 $ES_HOME/data,可以通过配置文件 elasticsearch.yml进行修改,例如:

    path.data: /data/es/data/
    

    这个设置也可以在命令行上执行,例如:

    ./bin/elasticsearch –path.data /data/es/data
    

    这个路径最好进行单独配置,这样Elasticsearch的目录和数据的目录就会分开。当删除了Elasticsearch主目录的时候,不会影响到数据。通过rpm安装默认是分开的。
    数据目录可以被多个节点共享,甚至可以属于不同的集群,为了防止多个节点共享相同的数据路径,可以在配置文件elasticsearch.yml中添加:

    node.max_local_storage_nodes: 1
    

    注意:在相同的数据目录不要运行不同类型的节点(例如:master, data, client)这很容易导致意外的数据丢失。

    client节点(客户端节点/路由节点)

    配置

    node.master:false
    node.data:false
    

    机器配置
    普通服务器即可(如果要进行分组聚合操作的话,建议这个节点内存也分配多一点)

    作用

    1. 处理路由请求
    2. 处理搜索
    3. 分发索引

    说明
    从本质上来说该客户节点表现为智能负载平衡器。
    独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求。
    警告:添加太多的客户端节点对集群是一种负担,因为主节点必须等待每一个节点集群状态的更新确认!客户节点的作用不应被夸大,数据节点也可以起到类似的作用。

    部落节点

    配置elasticsearch.yml

    tribe:
    	t1: 
    		cluster.name: cluster_one
    	t2: 
    		cluster.name: cluster_two
    

    作用

    1. 部落节点可以跨越多个集群,它可以接收每个集群的状态,然后合并成一个全局集群的状态,它可以读写所有节点上的数据

    说明
    T1和T2是任意的名字代表连接到每个集群。
    上面的示例配置两集群连接,名称分别是T1和T2。默认情况下部落节点通过广播可以做为客户端连接每一个集群。大多数情况下,部落节点可以像单节点一样对集群进行操作。
    注意:以下操作将和单节点操作不同,如果两个集群的名称相同,部落节点只会连接其中一个。由于没有主节点,当设置local为true的是,主节点的读操作会被自动的执行,例如:集群统计,集群健康度。主节点级别的写操作将被拒绝,这些应该是在一个集群进行。部落节点可以通过块(block)设置所有的写操作和所有的元数据操作,例如:

    tribe:
    	blocks:
    		write: true
    		metadata: true
    

    部落节点可以也可以在选中的索引块中进行配置,例如:

    tribe:
    	blocks:
    		write.indices: hk*,ldn*
    		metadata.indices: hk*,ldn*
    

    当多个集群有相同的索引名的时候,默认情况下,部落的节点将选择其中一个。这可以通过tribe.on_conflict setting进行配置,可以设置排除那些索引或者指定固定的部落名称。

    Ingest节点(提取节点)

    配置

    node.ingest:true
    

    作用

    1. Ingest节点和集群中的其他节点一样,但是它能够创建多个处理器管道,用以修改传入文档。类似 最常用的Logstash过滤器已被实现为处理器。
    2. Ingest节点 可用于执行常见的数据转换和丰富。 处理器配置为形成管道。 在写入时,Ingest Node有20个内置处理器,例如grok,date,gsub,小写/大写,删除和重命名
    3. 在批量请求或索引操作之前,Ingest节点拦截请求,并对文档进行处理。

    说明
    这样的处理器的一个例子可以是日期处理器,其用于解析字段中的日期。另一个例子是转换处理器,它将字段值转换为目标类型,例如将字符串转换为整数

    关于节点怎么选择

    Elasticsearch的员工 Christian_Dahlqvist解读如下:

    一个节点的缺省配置是:主节点+数据节点两属性为一身。对于3-5个节点的小集群来讲,通常让所有节点存储数据和具有获得主节点的资格。你可以将任何请求发送给任何节点,并且由于所有节点都具有集群状态的副本,它们知道如何路由请求。
    
    通常只有较大的集群才能开始分离专用主节点、数据节点。 对于许多用户场景,路由节点根本不一定是必需的。
    
    专用协调节点(也称为client节点或路由节点)从数据节点中消除了聚合/查询的请求解析和最终阶段,并允许他们专注于处理数据。 
    在多大程度上这对集群有好处将因情况而异。 通常我会说,在查询大量使用情况下路由节点更常见。
    

    建议

    1. 对于Ingest节点,如果我们没有格式转换、类型转换等需求,直接设置为false。
    2. 3-5个节点属于轻量级集群,要保证主节点个数满足((节点数/2)+1)。
    3. 轻量级集群,节点的多重属性如:Master&Data设置为同一个节点可以理解的。
    4. 如果进一步优化,5节点可以将Master和Data再分离。

    在一个生产集群中我们可以对这些节点的职责进行划分。
    建议集群中设置3台以上的节点作为master节点【node.master: true node.data: false】
    这些节点只负责成为主节点,维护整个集群的状态。

    再根据数据量设置一批data节点【node.master: false node.data: true】
    这些节点只负责存储数据,后期提供建立索引和查询索引的服务,这样的话如果用户请求比较频繁,这些节点的压力也会比较大

    所以在集群中建议再设置一批client节点【node.master: false node.data: false】, 主要是针对海量请求的时候可以进行负载均衡。
    这些节点只负责处理用户请求,实现请求转发,负载均衡等功能

    展开全文
  • 文档类型与节点类型

    千次阅读 2020-03-26 11:12:43
    文档类型 通用标记语言 标准通用标记语言 ...节点类型 节点类型 数值常量 Element(元素节点) 1 Attr(属性节点) 2 Text(文本节点) 3 Comment(注释节点) 8 Document(文档节点) ...

    文档类型

    通用标记语言标准通用标记语言超文本标记语言可扩展标记语言
    GMLSGMLHTMLXML
    (1969)(1985)(1993)(1998)

    节点类型

    节点类型数值常量
    Element(元素节点)1
    Attr(属性节点)2
    Text(文本节点)3
    Comment(注释节点)8
    Document(文档节点)9
    DocumentType(文档类型节点)10
    DocumentFragment(文档片段节点)11

    nodeName与nodeValue

    节点类型nodeNamenodeValue
    Element(元素节点)元素的标签名(div)null
    Attr(属性节点)属性的名称(id)属性的值
    Text(文本节点)#text节点所包含的文本
    Comment(注释节点)#comment注释的内容
    DocumentType(文档类型节点)doctype的名称(html)null
    DocumentFragment(文档片段节点)#document-fragmentnull
    展开全文
  • 节点类型定义

    千次阅读 2016-03-25 17:53:30
    节点类型定义
    /** 定义树节点类型 */
    	public static class TreeNode<T>
    	{
    		T data;									// 节点数据
    		TreeNode<T> parent;						// 当前节点的父节点
    		public ArrayList<TreeNode<T>> childs;	// 子节点
    		
    		public TreeNode(T data)
    		{
    			this.data = data;
    		}
    		
    		/** 向当前节点中添加子节点 */
    		public void add(TreeNode<T> child)
    		{
    			if (childs == null) childs = new ArrayList<TreeNode<T>>();
    			if (!childs.contains(child))
    			{
    				childs.add(child);
    				child.parent = this;
    			}
    		}
    		
    		/** 向当前节点中添加以data为数据的子节点 */
    		public void add(T data)
    		{
    			TreeNode<T> child = new TreeNode<T>(data);
    			add(child);
    		}
    		
    		/** 向当前节点中添加子节点 */
    		public void add(ArrayList<T> datas)
    		{
    			for (T data : datas)
    				add(data);
    		}
    		
    		/** 向当前节点中移除子节点child */
    		public void remove(TreeNode<T> child)
    		{
    			if (childs == null && !childs.contains(child)) childs.remove(child);
    		}
    		
    		// public int getChildIndex(T key)
    		// {
    		// for()
    		// }
    		
    		/** 在当前节点的所有子节点中寻找数据为key的子节点 */
    		public TreeNode<T> getChild(T key)
    		{
    			for (TreeNode<T> node : childs)
    			{
    				if (node.data.equals(key)) return node;
    			}
    			
    			return null;
    		}
    		
    		/** 定义树节点的字符串形式为数据data的字符串形式 */
    		public String toString()
    		{
    			return data.toString();
    		}
    		
    		/** 将数组转化为列表 */
    		public ArrayList<T> toList(T[] Array)
    		{
    			ArrayList<T> list = new ArrayList<T>();
    			for (T A : Array)
    				list.add(A);
    			return list;
    		}
    		
    		// /** 将列表转化为数组 */
    		// public T[] toArray(ArrayList<T> list)
    		// {
    		// if(list == null || list.size() == 0) return null;
    		// T[] Array = new T[list.size()];
    		// int i = 0;
    		//
    		// for (T A : list)
    		// Array[i++] = A;
    		// return Array;
    		// }
    	}

    展开全文
  • 07. Zookeeper 节点类型 & 节点信息

    千次阅读 2019-08-27 16:22:09
    Zookeeper 节点类型 &amp; 节点信息
  • Zookeeper 节点类型整理

    千次阅读 2018-05-08 13:23:04
    不同的节点类型用途也是不一样的。 持久节点 持久节点是一种非常有用的节点,可以通过持久类型的znode为应用保存一些数据,即使znode的创建者补数据应用系统时,数据也可以保存下来而不丢失。持久节点的删除只能...
  • 先介绍一下节点类型都有哪些:一、节点类型节点类型 属性nodeType返回值 元素节点1属性节点2文本节点3注释节点(comment)8document9DocumentFragment11所以一般我们获取节点类型用 nodeType二、遍历节点树这种...
  • DOM常用节点类型

    千次阅读 2016-08-04 21:00:55
    DOM常用节点类型 Node Types 文档、元素、属性以及 HTML 或 XML 文档的其他方面拥有不同的节点类型。 存在 12 种不同的节点类型,其中可能会有不同节点类型的子节点: 节点类型 描述 子节点 ...
  • ZooKeeper 节点类型

    万次阅读 2014-08-21 23:31:48
    在 ZooKeeper 中,节点类型可以分为持久节点(PERSISTENT )、临时节点(EPHEMERAL),以及时序节点(SEQUENTIAL ),具体在节点创建过程中,一般是组合使用,可以生成以下 4 种节点类型。 持久节点...
  • DOM节点信息包括节点类型(nodeType)、节点名称(nodeName)和节点值(nodeValue)。 节点类型 DOM节点中,每个节点都拥有不同的类型。 W3C规范中常用的 DOM节点类型有以下几种: 节点类型 说明...
  • (十)、ZNode节点类型

    千次阅读 2016-10-13 19:17:10
    ZooKeeper节点类型: ZooKeeper 节点是有生命周期的,这取决于节点的类型。在 ZooKeeper 中,节点类型可以分为持久节点(PERSISTENT )、临时节点(EPHEMERAL),以及时序节点(SEQUENTIAL ),具体在节点创建过程中...
  • Neo4j Spring动态起始节点类型实现

    千次阅读 2018-06-08 19:31:46
    Neo4j Spring Data动态起始节点类型实现 Neo4j Spring Data动态起始节点类型实现 neo4j-spring-data创建节点和关系 基于NodeEntity 基于RelationshipEntity 基于RelationshipEntity的动态节点类型 一切只有...
  • dom树的节点类型

    千次阅读 2018-02-27 23:39:10
    DOM树中有4中节点类型 元素节点 属性节点 文本节点 注释节点 节点的属性 nodeType nodeName nodeValue 元素节点 nodeType 1 nodeName 大写标签名 nodeValue null 属性节点 nodeType 2 nodeName 属性名 ...
  • ZooKeeper的四种节点类型

    千次阅读 2020-02-23 10:00:40
    ZooKeeper的四种节点类型 PERSISTENT:持久化节点 PERSISTENT_SEQUENTIAL:持久化有序节点 PHEMERAL:临时节点 EPHEMERAL_SEQUENTIAL:临时有序节点 注:临时节点下不能创建子节点,临时节点的声明周期不是永久,...
  • JavaScript中所有HTML DOM节点类型都继承自Node类型,因此所有类型的节点都有...返回节点类型:nodeType返回节点名:nodeName返回或设置节点值:nodeValue节点间的关系节点操作 1. 返回节点类型nodeType no
  • XML 节点类型

    千次阅读 2008-10-27 15:55:00
    基本的节点类型:文档、原始、属性和文本 XML 中最常见的节点类型包括:元素:元素是 XML 的基本构造模块。通常,元素拥有子元素、文本节点,或两者的组合。元素节点也是能够拥有属性的唯一节点类型。 属性:属性...
  • 2.Elasticsearch节点类型

    万次阅读 2017-01-03 15:01:06
    Elasticsearch节点类型当我们启动Elasticsearch的实例,就会启动至少一个节点。相同集群名的多个节点的连接就组成了一个集群。在默认情况下,集群中的每个节点都可以处理http请求和集群节点间的数据传输,集群中所有...
  • activiti中几种常见的节点类型

    千次阅读 2019-07-16 17:35:01
    开始节点:StartEvent 任务节点: UserTask SequenceFlow:流转线条 ExclusiveGateway:排他网关 EndEvent:结束节点 可以根据FlowElement instanceOf 判断节点类型做相应判断
  • Node节点类型的判断。

    千次阅读 2017-11-08 21:37:33
    我是html,重点看js</div>window.onload=function(){ var div=getElementById("div1"); //判断div节点类型 if(div.nodeType==1){ alert("我是元素节点") } if(div.childNodes[0].nodeType==
  • zookeeper节点类型

    千次阅读 2019-01-09 08:33:55
    1)Znode有两种类型: 短暂(ephemeral):客户端和服务器端断开连接后,创建的节点自己删除 持久(persistent):客户端和服务器端断开连接后,创建的节点不删除 2)Znode有四种形式的目录节点(默认是...
  • javascript中12种DOM节点类型概述

    千次阅读 2016-08-18 20:42:37
    javascript中12种DOM节点类型概述
  • zookeeper节点类型详解

    千次阅读 2019-05-31 11:16:25
    znode创建类型(CreateMode),有以下四种: PERSISTENT 持久化节点 PERSISTENT_SEQUENTIAL 顺序自动编号持久化节点,这种节点会根据当前已存在的节点数自动加 1 EPHEMERAL 临时节点, 客户端session超时这类节点就...
  • zookeeper节点类型,zookeeper JAVA API
  • 【ZooKeeper 节点类型】 ZooKeeper 节点是有生命周期的,这取决于节点的类型。 在 ZooKeeper 中,节点类型可以分为 持久节点(PERSISTENT ) 是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点 ...
  • Zookeeper节点类型

    千次阅读 2014-11-12 15:01:22
    public enum CreateMode { /** * 持久节点节点创建后,会一直存在,... * 持久顺序节点:基本特性与持久节点一致,创建节点的过程中,zookeeper会在其名字后自动追加一个单调增长的数字后缀,作为新的节点名;
  • XPath的数据类型和节点类型

    千次阅读 2020-02-17 12:10:03
    其它类型的数据不能转换为节点集。 2、布尔值(boolean):由函数或布尔表达式返回的条件匹配值,与一般语言中的布尔值相同,有true和 false两个值。布尔值可以和数值类型、字符串类型相互转换。 3、字符串(stri.....
  • javascript DOM节点类型(nodeType)

    千次阅读 2011-09-30 11:20:58
    DOM节点类型,在遍历处理中非常有用,可以过滤掉不关心的节点。 如: function showPageAttr(){ var divImgShowArea = document.getElementById('divImgShowArea'); var nodes =

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 956,565
精华内容 382,626
关键字:

节点类型