elasticsearch学习笔记(九)——shard&replica机制以及ES集群节点的问题

无分号教派
• 阅读 3464

1、shard和replica知识归纳梳理

(1)一个index包含多个shard
(2)每个shard都是一个最小工作单元,承载部分数据,可以说就是一个lucene实例,拥有完整的建立索引和处理请求的能力
(3)每当ES集群增加节点时,shard会自动在nodes中实现负载均衡
(4)对于primary shard和replica shard,每个document肯定只存在于某一个primary shard以及其对应的replica shard中,不可能存在于多个primary shard中
(5)replica shard时primary shard的副本,主要负责容错,以及承担读请求的负载
(6)primary shard的数量在创建索引的时候就已经固定了,但是replica shard的数量可以随时修改
(7)primary shard的默认数量是5个,replica默认是1,也就是在默认的情况下,有5个primary shard和5个replica shard
(8)primary shard不能和自己的replica shard放在同一个节点上(否则节点宕机,primary shard和副本都丢失,也就起不到容错的作用了),但是可以和其它primary shard的replica shard放在同一个节点上

2、对于单节点ES集群存在的问题

假设我们创建一个索引test_index

PUT /test_index
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  }
}

(1)单node环境下,创建一个index叫test_index,有5个primary shard,5个replica shard
(2)集群的status是yellow

GET /_cat/health?v
epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1555495650 10:07:30  elasticsearch yellow          1         1      8   8    0    0        6             0                  -                 57.1%

(3)这个时候,只会将5个primary shard分配到仅有的一个node上去,另外5个replica shard是无法分配的
(4)此时集群是可以正常工作的,但是一旦出现节点宕机,数据就会全部丢失,此时节点也不可用,无法承担任何请求
结构如下:elasticsearch学习笔记(九)——shard&replica机制以及ES集群节点的问题

3、对于两个节点ES集群

上面test_index索引的shard分配的结构就会变成:
elasticsearch学习笔记(九)——shard&replica机制以及ES集群节点的问题

此时即使存放primary shard的节点挂掉了,ES的shard allocation 会被触发,此时对应的primary shard的一个副本会变成primary shard

在什么场景下会触发Shard的Allocation:

创建/删除一个Index;
加入/离开一个Node;
手动执行了Reroute命令;
修改了Replica设置;

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
K8S基础概念
一、核心概念1、NodeNode作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。Node上运行着Kubernetes的Kubelet、kubeproxy服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁、以及实现软件模式的负载均衡。Node包含
Wesley13 Wesley13
3年前
MongoDB 删除,添加副本集,并修改副本集IP等信息
MongoDB删除,添加副本集,并修改副本集IP等信息添加副本,在登录到主节点下输入rs.add("ip:port");删除副本rs.remove("ip:port");新增仲裁节点rs.addArb("ip:port");修改副本host:shard1:PRIMARYcfgrs.c
Stella981 Stella981
3年前
Kubernetes集群部署之五node节点部署
Node节点是Kubernetes集群中的工作负载节点.每个node都会被master分配一些工作负载,每个node节点都运行以下关键服务进程.Kubelet:负责pod对应的容器的创建、启停等任务,同时与master节点密切协作,实现集群管理的基本功能.Kubeproxy:实现kubernetesservice的通信与负载均衡机制的重要
Stella981 Stella981
3年前
CentOS 7下 部署Redis
redis集群是一个无中心的分布式redis存储架构,可以在多个节点之间进行数据共享,解决了redis高可用、可扩展等问题,redis集群提供了以下两个好处:1)将数据自动切分(split)到多个节点2)当集群中的某一个节点故障时,redis还可以继续处理客户端的请求一个Redis集群包含16384个哈希槽(hashslot
Stella981 Stella981
3年前
MongoDB Sharding 分片集群配置理论
分片集群  MongoDB的分片集群由以下部分组成:_shard_(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fdocs.mongodb.com%2Fmanual%2Fcore%2Fshardedclustershards%2F): 用来存储数据,为这个分片
Wesley13 Wesley13
3年前
ELK
一、基本概念1Node与ClusterElastic本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个Elastic实例。单个Elastic实例称为一个节点(node)。一组节点构成一个集群(cluster)。2IndexElastic会索引所有字段,经过处理后写入一个反向索引
Stella981 Stella981
3年前
Mongodb 分片与副本集
测试搭建192.168.3.110mongos30000,30001,30002config40000,40001,40002shard150001,50002,50003shard250004,50005,50006,shard350007,50008,50009\root@mysqlslave10
Stella981 Stella981
3年前
ElasticSearch学习笔记(二)
了解以下几个概念1\.索引index简单的可以理解为关系型数据库的中库或者表。一个elasticsearch集群中可以有多个索引。2\.文档docment可以理解为表中的行数据,表示一个对象。每个文档有一个唯一标识\_id,相当于关系数据库的主键。一个索引中可以有多个结构相同的文档。3\.域
Wesley13 Wesley13
3年前
ES 源代码阅读(二)
1基本概念集群:一个集群有一个或多个节点组织在一起,并将数据组织在一起,提供索引和搜索服务.节点:一个节点是一个集群中的服务器,提供存储数据,提供搜索服务.索引:文档的逻辑的集合分片:一个逻辑索引有若干分片,其中一个分片被设置为主分片.分片为索引的存储位置.会涉及到分布式问题.类型:文档的类型文档:与lucene中的d
3A网络 3A网络
2年前
数据库系统设计:分区
数据库系统设计:分区术语澄清分区(partition),对应MongoDB、ES中的shard,HBase的Region,Bigtable的tablet,Cassandra的vnode,Couchbase的vBucket。但分区(partitioning)是最普遍的。定义每条数据(或每条记录,每行或每个文档)属于且仅属于某特定
ElasticSearch集群灾难:别放弃,也许能再抢救一下 | 京东云技术团队
1前言Elasticsearch作为一个分布式搜索引擎,自身是高可用的;但也架不住一些特殊情况的发生,如:集群超过半数的master节点丢失,ES的节点无法形成一个集群,进而导致集群不可用;索引shard的文件损坏,分片无法被正常恢复,进而导致索引无法正常