• Elasticsearch索引数量限制


    Elasticsearch的索引可以无限创建吗?

    版本环境

    Elasticsearch 7.9.1

    验证

    Elasticsearch启动

    Elasticsearch启动采用默认配置
    在这里插入图片描述

    代码

    使用SpringBoot编写测试代码,对ES进行索引创建测试。

    SpringBoot连接配置

    es:
      host: 127.0.0.1
      port: 9200
      scheme: http
    
    • 1
    • 2
    • 3
    • 4

    测试类代码

    单机测试,设置每个索引占用4个分片,0个副本,先创建1000个索引进行测试,是否能创建成功。

    @SpringBootTest
    @Slf4j
    class ElasticsearchApplicationTests {
    
        @Autowired
        RestHighLevelClient restHighLevelClient;
    
        @Test
        public void test() {
            for (int i = 1; i <= 1000; i++) {
                createIndex("data_" + i);
                log.info("创建索引:data_" + i + ", 完成。");
            }
        }
    
        /**
         * 创建索引
         * @param idxName
         */
        public void createIndex(String idxName){
            try {
                if (!this.indexExist(idxName)) {
                    log.error(" idxName={} 已经存在",idxName);
                    return;
                }
                CreateIndexRequest request = new CreateIndexRequest(idxName);
                buildSetting(request);
    //            request.mapping(idxSQL, XContentType.JSON);
    //            request.settings() 手工指定Setting
                CreateIndexResponse res = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
                if (!res.isAcknowledged()) {
                    throw new RuntimeException("初始化失败");
                }
            } catch (Exception e) {
                e.printStackTrace();
                System.exit(0);
            }
        }
    
        /**
         * 判断索引是否存在
         * @param idxName
         * @return
         * @throws Exception
         */
        public boolean indexExist(String idxName) throws Exception {
            GetIndexRequest request = new GetIndexRequest(idxName);
            request.local(false);
            request.humanReadable(true);
            request.includeDefaults(false);
            request.indicesOptions(IndicesOptions.lenientExpandOpen());
            return restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
        }
    
        /**
         * 索引设置4个分片,0个副本
         * @param request
         */
        public void buildSetting(CreateIndexRequest request){
            request.settings(Settings.builder().put("index.number_of_shards",4)
                    .put("index.number_of_replicas",0));
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    运行结果

    直接运行测试类,运行结果:
    在这里插入图片描述
    当创建至250个索引后报错,创建失败,也就是在创建第251个索引时失败,具体报错内容如下:

    ElasticsearchStatusException[Elasticsearch exception [type=validation_exception, reason=Validation Failed: 1: this action would add [4] total shards, but this cluster currently has [1000]/[1000] maximum shards open;]]
    	at org.elasticsearch.rest.BytesRestResponse.errorFromXContent(BytesRestResponse.java:177)
    	at org.elasticsearch.client.RestHighLevelClient.parseEntity(RestHighLevelClient.java:1793)
    	...
    
    • 1
    • 2
    • 3
    • 4

    报错信息提示:创建新索引时,分片数不够用,导致创建失败。

    官方文档

    在这里插入图片描述
    ES7官方默认设置的索引分片数是1000,当分片被占满后,创建新索引失败,示例中在创建完250个索引后1000个分片已经占用完(250*4=1000)。

    修改

    修改elasticsearch.yml修改默认配置,根据实际需求修改分片限制数,cluster.max_shards_per_node: 10000,修改后重启ES。
    在这里插入图片描述
    再次运行测试类,从251开始创建索引,创建成功。
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    java基于Springboot+vue的学生公寓宿舍管理系统 elementui
    python3和pip源码安装【5步快速搞定】
    java毕业设计单位职工房产管理Mybatis+系统+数据库+调试部署
    工业智能网关BL110应用之四十七: 数据上传云平台 MQTT Client One的配置
    浅入浅出 1.7和1.8的 HashMap
    【Edabit 算法 ★☆☆☆☆☆】Power Calculator
    腾讯云4核8G云服务器S5租用价格_CPU型号_网络性能
    Python基础篇(十二)-- 常用模块
    【PyQt小知识 - 3】: QComboBox下拉框内容的设置和更新、默认值的设置、值和下标的获取
    JAVA基础—面向对象
  • 原文地址:https://blog.csdn.net/m0_67403076/article/details/126362788