1.ES集群的几个核心概念

    cluster集群:
    为了处理大量数据,实现容错和高可用,会把ES部署在多个相互关联的服务器上,这个服务器集合就叫做集群,节点属于哪个集群通过集群名确认。

    Node节点:
    组成集群的每个服务器就叫做节点。
    节点的分类是用过配置来确认node.master=true 是否是主节点,node.data=true是否存储数据
    1.主节点
    node.master=true,node.data=false
    主节点主要是用来做索引的增删,追踪哪些节点是集群的一部分,以及相关集群的操作。

    2.数据节点
    node.master=false,node.data=true
    用来存放数据的节点。主要就是对文档的增删改查操作,聚合等。也就是说我们平常的操作ES都会到数据节点来。这也造成了数据节点的IO和内存要求高,做节点优化的话,应该优先考虑扩充数据节点。

    3.负载均衡节点
    node.master=false,node.data=false
    该节点只作请求转发,处理搜索,分发索引等操作,在主节点和数据节点之间承上启下,起到一个将请求负载均衡到数据节点的作用。

    shard分片
    当有大量的文档时,受内存,磁盘处理能力等限制,一个节点可能不够。
    这种情况下,可以将一个索引中的数据做水平切割,分成多个分片,部署到不同的服务器上,这样也提高了我们ES的吞吐量,并能存放更多数据。
    当查询涉及到多个分片,ES会将查询发送给对应的分片,并将结果进行合并处理。
    分片对应的存储实体是索引,一个分片就是一个Lucene实例。

    replia复制品
    replia其实也是也是一个分片,只是它只是作为副本。
    这里就有点类似于我们redis中主从的概念,主分片用来做写操作,replia用来读,实现了读写分离,自然也就提高了吞吐量和性能。并且当主分片挂掉的话,replia将升级为新的主分片,也保障了高可用。
    ES默认配置一个索引对应10的分片,5个主分片以及每个主分片对应一个复制品。

    分片机制(补充)
    1.主分片不能和自己的副本分片在一个节点上,否则会出现节点故障导致全部丢失的情况。一般来说我们都是和其他分片的副本进行交叉部署。
    2.主分片的数量在创建索引的时候就要确定,副本分片的数量可以随时修改。
    3.某个document只能存在于一个主分片及其对应的副本分片中,不能存在于多个主分片。
    4.添加document时,ES是根据id,默认是document id进行hash运行得到散列值,并跟分片数量进行取模,来确定将其存放于哪个分片中。

    2.集群的健康状态说明
    GREEN
    主分片和副本都可用
    YELLOW
    主分片可用,有部分副本不可用
    RED
    至少有一个主分片不可用

    3.ES集群和Redis集群的相同点
    1.同样的使用了Hash运算并取模的方式来计算存放位置
    2.ES的分片机制十分类似Redis的主从和哨兵,同样是主从实现读写分裂,主节点挂掉从节点升级为主节点。0