文章目录
- 前言
- Elasticsearch 索引的分片和副本是什么意思,如何扩展分片
- 示例:
- 1. 设置 5个分片,每个分片一个副本的命令
- 2. 将5个分片扩展到10个分片
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
Elasticsearch 索引的分片和副本是什么意思,如何扩展分片
当你在 Elasticsearch 中创建一个索引时,你可以指定该索引被分成多个分片(Shard)。分片是索引的基本构建块,每个分片都是一个独立的 Lucene 索引,它包含了一部分你的数据。分片允许你水平扩展你的索引以处理更大的数据量。
副本(Replica)是分片的备份。副本的存在提供了数据的冗余,增加了系统的可用性和容错性。当主分片不可用时,副本可以被提升为主分片,从而保证数据的可用性。
例如,如果你有一个索引,其中包含了 5 个分片和每个分片有 1 个副本,那么你实际上有 5 个主分片和 5 个副本,共计 10 个分片。这意味着你的索引数据会被分成 10 份,每份数据被存储在一个主分片和一个副本中。
分片和副本的数量需要根据你的数据量、负载和可用性要求来进行合理的设置。通常情况下,可以通过增加分片数量来扩展索引的容量和吞吐量,通过增加副本数量来提高系统的可用性和容错性。然而,分片和副本的增加也会带来一些额外的开销,因此需要在设计时进行权衡和优化。
示例:
假设你正在构建一个电子商务网站的搜索引擎,用于存储商品信息。你创建了一个名为 “products” 的索引来存储所有商品数据。
你决定将 “products” 索引分成 5 个主分片和每个主分片创建一个副本,以确保数据的高可用性和容错性。这样,你的索引会有 5 个主分片和 5 个副本,共计 10 个分片。
现在假设你的网站经历了快速增长,商品数量激增,导致原先的 5 个主分片无法满足查询需求和索引更新的吞吐量。为了处理更大的数据量和更高的负载,你决定增加主分片数量。
你可以通过修改索引的设置来增加主分片的数量,比如将主分片数量增加到 10。这样,每个原先的主分片将被拆分成两个新的主分片,并且每个主分片仍保持一个副本。最终,你的索引会有 10 个主分片和 10 个副本,共计 20 个分片。
通过增加主分片数量,你可以水平扩展你的索引以处理更大的数据量和更高的负载,同时保持系统的可用性和容错性。
1. 设置 5个分片,每个分片一个副本的命令
PUT /my_index
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
}
}
下面是我们刚刚建的索引:
设置 5个分片,每个分片一个副本。
2. 将5个分片扩展到10个分片
测试之前插入一条数据:
PUT /my_index/_doc/yzy100001
{
"title": "jstat命令查看jvm的GC信息",
"content": "jstat命令查看jvm的GC信息999999999999",
"author": "糖炒栗子",
"publish_date": "2024-04-23",
"tags": ["Elasticsearch", "Search", "Tutorial"]
}
1、创建新索引:修改主分片数量后,需要重新创建索引,并指定新的主分片数量。
创建新索引:
PUT /my_index_new
{
"settings": {
"number_of_shards": 10, // 将主分片数量增加到 10
"number_of_replicas": 1 // 根据需要设置副本数量
}
}
通过上面的请求创建一个新的索引 “my_index_new”,并将主分片数量设置为 10,副本数量根据需要进行设置。
2、重新索引数据:重新创建索引后,你需要重新索引你的数据,以便数据能够被正确地分配到新的主分片中。
POST /_reindex
{
"source": {
"index": "my_index"
},
"dest": {
"index": "my_index_new"
}
}
通过上面的请求重新索引数据,将原先索引 “my_index” 中的数据重新索引到新创建的索引 “my_index_new” 中。
完成以上步骤后,你的索引 “my_index” 的主分片数量就从 5 增加到了 10,并且数据已经被正确地重新索引到了新的索引中。
在新索引中查询我们刚刚插入一条文档,看看数据是否转移过去
GET /blog_new/_doc/yzy100001
之前的哪个索引就可以干掉了
DELETE /my_index