基本介绍

   

 ElasticsearchCluster:

用于构建高可用和可扩展的系统。扩展的方式可以是购买更好的服务器(纵向扩展)或者购买更多的服务器(横向扩展),Elasticsearch能从更强大的硬件中获得更好的性能,但是纵向扩展也有一定的局限性。真正的扩展应该是横向的,它通过增加节点来传播负载和增加可靠 性。对于大多数数据库而言,横向扩展意味着你的程序将做非常大的改动来利用这些新添加的设备。对比来说,Elasticsearch天生是分布式的:它知道如何管理节点来提供高扩展和高可用。这意味着你的程序不需要关心这些。对于Elasticsearch集群搭建,可以把索引进行分片存储,一个索引可以分成若干个片,分别存储到集群里,而对于集群里面的负载均衡,副本分配,索引动态均衡(根据节点的增加或者减少)都是elasticsearch自己内部完成的,一有情况就会重新进行分配。  

集群和节点 

节点(node)是你运行的Elasticsearch实例。一个集群(cluster)是一组具有相同cluster.name的节点node集合,他们协同工作,共享数据并提供故障转移和扩展功能,当有新的节点加入或者删除节点,集群就会感知到并平衡数据。集群中一个节点会被选举为主节点(master),它用来管理集群中的一些变更,例如新建或删除索引、增加或移除节点等;当然一个节点也可以组成一个集群

 节点通信 :

我们能够与集群中的任何节点通信,包括主节点。任何一个节点互相知道文档存在于哪个节点上,它们可以转发请求到我们需要数据所在的节点上。我们通信的节点负责收集各节点返回的数据,最后一起返回给客户端。这一切都由Elasticsearch透明的管理

  cluster : 

        代表集群,其中有多个节点,而一个为主节点(可以通过选举产生)主从节点是对于集群内部来说的。es的一个概念就是去中心化,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的

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

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

  recovery :  
        代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复

  river : 
        代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB,RabbitMQ,Twitter,Wikipedia

  gateway : 
        代表es索引的持久化存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到硬盘。当这个es集群关闭再重新启动时就会从gateway中读取索引数据。es支持多种类型的gateway,有本地文件系统(默认)分布式文件系统,HDFS和amazon的s3云存储服务

  discovery.zen :
        代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互

  Transport : 
        代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)


部署ES环境

sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update
sudo apt-get -y install oracle-java8-installer
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch sudo apt-key add -
echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
sudo apt-get update
sudo apt-get -y install elasticsearch

测试环境集群配置

egrep -v "^$|^#" elasticsearch.yml
node1(master):
     cluster.name: elasticsearch
     node.master: true
     node.data: true  
     path.data: /data/es
     path.logs: /data/log
     node.name: "es-node1"
     network.host: 0.0.0.0
     discovery.zen.ping.timeout: 10s
     discovery.zen.ping.unicast.hosts: ["10.25.10.195""10.168.184.103"]
    index.refresh_interval: 5s
 
node2(slave):
    cluster.name: elasticsearch
    node.master: false
    node.data: true
    path.data: /data/es
    path.logs: /data/log
    node.name: "es-node2"
    network.host: 10.168.184.103
    discovery.zen.ping.timeout: 10s
    discovery.zen.ping.unicast.hosts: ["10.25.10.195""10.168.184.103"]
    index.refresh_interval: 5s
 
 
一、配置详解,以上最需要注意的是unicast与network.host的配置
    unicast概念:ES从2.0版本开始,默认的自动发现方式改为了单播(unicast)方式。配置里提供几台节点的地址,ES 将其视作 gossip router 角色,借以完成集群的自动发现。
    network.host: 同样从2.0版本开始,默认只监听本地 lo 网卡上。所以正式环境上需要修改配置为监听具体的网卡。
    discovery.zen.ping.timeout:参数仅在加入或者选举 master 主节点的时候才起作用。
    discovery.zen.ping.unicast.hosts:自动发现地址池内相关Host节点IP。
    index.refresh_interval:默认为1S,所有新建的索引都使用这个刷新频率,根据需求我们可以适当调整,设置合理的刷新时间。
 
二、合理配置主节点和数据节点:(默认情况下,节点配置是一个主节点和一个数据节点)
    1) 当master为false,而data为true时,会对该节点产生负荷,如保存数据和执行数据相关的操作,如增删改查,搜索,和聚合 
      (数据节点对cpu,内存,io要求较高)
    2) 当master为true,而data为false时,该节点作为一个协调者,有资额被选举为master协调控制集群
      (主资格节点的主要职责是和集群操作相关的内容,如创建或删除索引跟踪哪些节点是群集的一部分,并决定哪些分片分配给相关的节点,所以主机节点和数据节点分离有时候是比较好的选择)
    3) 当master为false,data也为false时,该节点就变成了一个负载均衡器,维系集群内的响应
      (客户端节点既不能保持数据也不能成为主节点,该节点可以响应用户的情况,并把相关操作发送到其他节点)
 
三、内存优化
    在bin/elasticsearch.in.sh中进行配置
    修改配置项为尽量大的内存:
    ES_MIN_MEM=1g
    ES_MAX_MEM=1g
    两者最好改成一样的,否则容易引发长时间GC(stop-the-world)
 
    elasticsearch默认使用的GC是CMS GC
    如果你的内存大小超过6G,CMS是不给力的,容易出现stop-the-world
 
    建议使用G1 GC
    注释掉:
    JAVA_OPTS=”$JAVA_OPTS -XX:+UseParNewGC”
    JAVA_OPTS=”$JAVA_OPTS -XX:+UseConcMarkSweepGC”
    JAVA_OPTS=”$JAVA_OPTS -XX:CMSInitiatingOccupancyFraction=75″
    JAVA_OPTS=”$JAVA_OPTS -XX:+UseCMSInitiatingOccupancyOnly”
    修改为:
    JAVA_OPTS=”$JAVA_OPTS -XX:+UseG1GC”
    JAVA_OPTS=”$JAVA_OPTS -XX:MaxGCPauseMillis=200″
 
按照这样的配置即可完成最简单的集群部署。

安装插件

主要安装在master node即可
 
 
head插件: (以查看集群几乎所有信息,还能进行简单的搜索查询,观察自动恢复的情况等等。)
/usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
 
kopf插件:(它提供了一个简单的方法,一个elasticsearch集群上执行常见的任务。)
/usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf/1.6
 
bigdesk插件: (集群监控插件,通过该插件可以查看整个集群的资源消耗情况,cpu、内存、http链接等等。)
/usr/share/elasticsearch/bin/plugin -install lukas-vlcek/bigdesk