Elasticsearch tutorial(四)Elasticsearch集群基本原理浅析

概述

  Elasticsearch用于构建高可用和可扩展的搜索系统。其扩展的方式有两种:

  1. 纵向扩展(提示硬件性能,比如购买更好的服务器);
  2. 横向扩展(购买更多的服务器,共同搭建一个集群);

集群的基本原理

1.集群中节点的职责

  Elasticsearch虽然能从更强大的硬件中获得更好的性能,但是纵向扩展有它的局限性。真正的扩展应该是横向的,它通过增加节点来均摊负载和增加可靠性。如果我们启动一个单独的节点,它还没有数据和索引,这个集群看起来就像下图。

Elasticsearch集群中的节点有候选主节点(Master-eligible node)、数据节点(Data node)、客户端节点(Ingest node)、部落节点(Tribe node)等角色/类型:

  1. node.master: true; (默认值true)Master-eligible node,表示这个节点既有成为主节点的资格。
  2. node.data: true; (默认值true)Data node,数据节点主要工作是数据的CRUD、索引和数据的整合。
  3. node.ingest: true; (默认值true) Ingest node,客户端节点主要协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求。
  4. 在elasticsearch.yml中的新增tribe.*相关配置; Tribe node部落节点可以跨越多个集群,它可以接收每个集群的状态,然后合并成一个全局集群的状态,它可以读写所有节点上的数据,部落节点。
2. 如何设置节点的职责
创建一个专用的候选主节点:
node.master: true
node.data: false
node.ingest: false
cluster.remote.connect: false
Note: 为了防止数据丢失,配置discovery.zen.minimum_master_nodes设置是至关重要的
(默认为1),每个主节点应该知道形成一个集群的最小数量的主资格节点的数量,discovery.zen.minimum_master_nodes: (master_eligible_nodes / 2) + 1
 
创建一个专用的数据节点:
node.master: false
node.data: true
node.ingest: false
cluster.remote.connect: false
 
创建一个专用的客户端节点:
node.master: false
node.data: false
node.ingest: true
cluster.remote.connect: false

创建一个部落节点:
在节点的elasticsearch.yml中新增如下配置
tribe:
    t1:
        cluster.name:   cluster_one
    t2:
        cluster.name:   cluster_two

集群中的一个节点(node.master: true)会被选举为主节点(master),它将临时管理集群级别的一些变更,例如创建或删除索引,跟踪哪些节点是群集的一部分,并决定哪些分片分配给相关的节点。

3. 集群节点上的分片

  当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整。接下来我们在集群中唯一一个空节点上创建一个叫做 people 的索引。默认情况下,一个索引会分配5个主分片,但是为了演示的目的,我们只分配3个主分片和一个复制分片(每个主分片都有一个复制分片):

PUT /people
{
    "settings" : {
        "number_of_shards" : 3,
        "number_of_replicas" : 1
    }
}


在单一节点上运行意味着有单点故障的风险:没有数据备份。幸运的是,要防止单点故障,我们唯一需要做的就是启动另一个节点。如下图:

第二个节点已经加入集群,三个复制分片(replica shards)也已经被分配了,分别对应三个主分片,这意味着在丢失任意一个节点的情况下依旧可以保证数据的完整性。

4. 索引在集群中的存储及扩展

  文档的索引将首先被存储在主分片中,然后并发复制到对应的复制节点上。这可以确保我们的数据在主节点和复制节点上都可以被检索。随着应用需求的增长,我们该如何扩展?如果我们启动第三个节点,我们的集群会自我感知,这时便成为了三节点集群。分片已经被重新分配以平衡负载:

从 Node 1 和 Node 2 来的分片已经被移动到新的 Node 3 上,这样每个节点就有两个分片(主分片和其副本分片不能在同一个节点),以代替之前的三个。这意味着每个节点的硬件资源(CPU、RAM、I/O)被较少的分片共享,这样每个分片就会有更好的表现。分片本身就是一个完整成熟的搜索引擎,它可以使用单一节点的所有资源。


<<  上一篇:Java API

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值