首先需要使用属性discovery.zen.ping.unicast.hosts指定一组通信主机。方便起见,在集群中的所有主机上为该属性设置相同的值,使用集群节点的名称来定义主机列表。
属性discovery.zen.minimum_master_nodes决定了有资格作为master的节点的最小数量,即一个应当“看见”集群范围内运作的节点。如果集群中有2个以上节点,建议设置该值为大于1。一种计算方法是,假设集群中的节点数量为N,那么该属性应该设置为N/2+1。
Data和master节点以两种不同方式互相探测:
通过master节点ping集群中的其他节点以验证他们处于运行状态通过集群中的其他节点ping master节点以验证他们处于运行状态或者是否需要初始化一个选举过程
节点探测过程通过discover.zen.fd.ping_timeout属性控制,默认值是30s,决定了节点将会等待响应多久后超时。当运行一个较慢的或者拥堵的网络时,应该调整这个属性;如果在一个慢速网络中,将该属性调大;其值越大,探测失败的几率就越小。
Loggly的discovery.zen相关属性配置如下:
discovery.zen.fd.ping_timeout: 30s discovery.zen.minimum_master_nodes: 2 discovery.zen.ping.unicast.hosts: [“esmaster01″,”esmaster02″,”esmaster03″]以上属性配置表示节点探测将在30秒内发生,因为设置了discovery.zen.fd.ping_timeout属性。另外,其他节点应当探测到最少两个master节点(我们有3个master)。我们的单播主机是esmaster01、 esmaster02、esmaster03。
小贴士5:当心DELETE _all
必须要了解的一点是,ES的DELETE API允许用户仅仅通过一个请求来删除索引,支持使用通配符,甚至可以使用_all作为索引名来代表所有索引。例如:
curl -XDELETE ‘:9200/*/’这个特性非常有用,但也非常危险,特别是在生产环境中。在我们的所有集群中,已通过设置action.destructive_requires_name:true来禁用了它。
这项配置在1.0版本中开始引用,并取代了0.90版本中使用的配置属性disable_delete_all_indices。
小贴士6:使用Doc Values
2.0及以上版本默认开启Doc Values特性,但在更早的ES版本中必须显式地设置。当进行大规模的排序和聚合操作时,Doc Values相比普通属性有着明显的优势。本质上是将ES转换成一个列式存储,从而使ES的许多分析类特性在性能上远超预期。
为了一探究竟,我们可以在ES里比较一下Doc Values和普通属性。
当使用一个普通属性去排序或聚合时,该属性会被加载到属性数据缓存中。一个属性首次被缓存时,ES必须分配足够大的堆空间,以便能保存每一个值,然后使用每个文档的值逐步填充。这个过程可能会耗费一些时间,因为可能需要从磁盘读取他们的值。一旦这个过程完成,这些数据的任何相关操作都将使用这份缓存数据,并且会很快。如果尝试填充太多的属性到缓存,一些属性将被回收,随后再次使用到这些属性时将会强制它们重新被加载到缓存,且同样有启动开销。为了更加高效,人们会想到最小化或淘汰,这意味着我们的属性数量将受限于此种方式下的缓存大小。
相比之下,Doc Values属性使用基于硬盘的数据结构,且能被内存映射到进程空间,因此不影响堆使用,同时提供实质上与属性数据缓存一样的性能。当这些属性首次从硬盘读取数据时仍然会有较小的启动开销,但这会由操作系统缓存去处理,所以只有真正需要的数据会被实际读取。
Doc Values因此最小化了堆的使用(因为垃圾收集),并发挥了操作系统文件缓存的优势,从而可进一步最小化磁盘读操作的压力。
小贴士7:ElasticSearch配额类属性设置指南
分片分配就是分配分片到节点的过程,可能会发生在初始化恢复、副本分配、或者集群再平衡的阶段,甚至发生在处理节点加入或退出的阶段。
属性cluster.routing.allocation.cluster_concurrent_rebalance决定了允许并发再平衡的分片数量。这个属性需要根据硬件使用情况去适当地配置,比如CPU个数、IO负载等。如果该属性设置不当,将会影响ES的索引性能。
cluster.routing.allocation.cluster_concurrent_rebalance:2
默认值是2,表示任意时刻只允许同时移动2个分片。最好将该属性设置得较小,以便压制分片再平衡,使其不影响索引。