elasticsearch-集群健康-横向扩展-故障转移

学习思路:

  1. 名词解释
  2. 集群健康状况
  3. 集群扩展、故障转移

一、名词解释

  1. 集群(cluster):一个或多个cluster.name相同的节点(node)形成一个集群
  2. 节点(node):每启动一台elasticsearch实例就是一个节点,常用配置的节点有:master节点、data节点、client节点,默认配置node.master: true(可以被选举为主节点) ;node.data: true(可以存储数据);也就是传说中的主节点和数据节点混用
  3. 主节点(master):需要配置node.master: true ;node.data: false;这种节点不会存储数据,有被选举为master节点的资格,一旦选举为master其主要作用有:
    1. 索引的创建、删除
    2. 跟踪管理集群节点
    3. 分配分片对应的节点
  4. 数据节点(data):需要配置node.master: false;node.data: true;这种节点只存取数据,没有被选举为master的权限,其主要作用:
    1. 对数据的CRUD
    2. 聚合查询结果
  5. 客户端节点(client):需要配置node.master: false;node.data: false;这种节点不能被选举为master,也不能存储数据,其主要作用:
    1. 请求路由,分发索引进行搜索
  6. 分片:跟数据库分片概念类似,将数据按照一定的算法分配到不同的分片(机器),实现大规模数据的分布式存储,分为主分片和副本分片

总结:

  1. 节点默认配置node.master: true;node.data: true;生产中能用到elasticsearch那么足矣说明数据量已经不小,各节点功能应该隔离(主节点、数据节点、客户端节点应该分别部署)
  2. 主节点对CPU、内存等消耗一般,普通机器即可;数据节点需要CRUD,对查询结果聚合,对磁盘IO和内存要求较高;客户端节点主要是路由功能,普通机器即可;
  3. 主分片数量是在新建索引的时候确定的,一旦确定不可改变(数据分片算法默认是对主分片取模),因此要根据自己业务适当确定(7.0版本以下主分片默认5个),副本分片可以随时改变数量
  4. 分片数量过多:浪费资源影响性能;分片数量过少:单分片数据量过大,横向扩展时受阻,如果新增分片数量需要重新建立索引,重新洗数据

二、集群健康状况

实际中我们可以通过请求查看集群健康状况

GET /_cluster/health

集群健康状态分为3中:green、yellow、red;上图的status代表健康状态

三、集群扩展-故障转移

当我们要往elasticsearch里放数据时,需要先创建索引,创建索引时即指定了主分片数量,这个时候我们的集群虽然只有一个master但仍然能正常工作,但要遇到机器故障,那么整个集群将会瘫痪

因此我们要做的就是创建复制分片,做横向扩展,首先我们给megacorp指定3个主分片,1个复制分片

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

因为我们只启动了一个节点,所以我们的三个分片都被分配到了一个节点上

图片

 

我们现在启动第二个节点,注意cluster.name要保持一致

图片

 

启动后我们的复制分片在节点2上创建,这就意味着如果其中一个Node挂机,数据还是完整的;

随着数据量的不断增长,单个node节点的资源(IO、内存)已成为瓶颈,我们来启动第三个节点

图片

 

可见我们的分片已被重新分片,满足负载,实现故障转移

这里我们看到,如果一直横向扩展,最终实现每个node只有一个分片,并且数据量达到一定程度,再继续增加复制分片访问速度仍达不到我们要求,这也就达到了我们的扩展极限,那么只能从单机硬件或者重新修改主分片数量来解决,如果修改主分片数量那么要牵扯到重新创建索引,将数据重新清洗到分片存储,成本很高,所以我们在初期确定主分片数量时一定要根据业务预估好

公众号主要记录各种源码、面试题、微服务技术栈,帮忙关注一波,非常感谢

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值