Authored by hugufei

主索引分片数修改压测

... ... @@ -146,16 +146,21 @@ public class YohoIndexServiceImpl implements IYohoIndexService, ApplicationEvent
*/
private int genNumberOfReplicas(IElasticsearchClient client, Map<String, String> indexSettings) {
try {
int numberOfDataNodes = client.getClusterHealthResponse().getNumberOfDataNodes();
if (numberOfDataNodes <= 1) {
//获取数据节点机器数
int dataNodesCount = client.getClusterHealthResponse().getNumberOfDataNodes();
if (dataNodesCount <= 1) {
return 0;
}
//获取配置的复制分片数
String numberOfReplicas = MapUtils.getString(indexSettings, "number_of_replicas");//配置的复制分片数
if (!"auto".equalsIgnoreCase(numberOfReplicas)) {
return Integer.valueOf(numberOfReplicas);
}
//获取索引配置的主分片数
return Math.max(1, numberOfDataNodes - 1);
// 获取配置的主分片数
int numberOfPrimary = MapUtils.getIntValue(indexSettings, "number_of_shards");//配置的主分片数
// 动态计算复制分片数【1个主分片就是机器数-1 , 4个主分片,4台机器就是 0,然后取1 】
int number_of_replicas = dataNodesCount/numberOfPrimary - 1;
return Math.max(1, number_of_replicas);
} catch (Exception e) {
INDEX_REBUILD_LOG.error(e.getMessage(), e);
return 0;
... ... @@ -206,7 +211,7 @@ public class YohoIndexServiceImpl implements IYohoIndexService, ApplicationEvent
indexSettings.put("merge.policy.expunge_deletes_allowed", 20d); // 删除了的文档数在一个segment里占的百分比,默认是10
indexSettings.put("merge.policy.floor_segment", "2mb"); // ES会避免产生很小size的segment,小于这个阈值的所有的非常小的segment都会做merge,默认是2MB.
indexSettings.put("merge.policy.max_merge_at_once", 10); // 一次最多只操作多少个segments,默认是10.
indexSettings.put("merge.policy.max_merged_segment", "2gb"); // 超过多大size的segment不会再做merge,默认是5g.
indexSettings.put("merge.policy.max_merged_segment", "500mb"); // 超过多大size的segment不会再做merge,默认是5g.
indexSettings.put("merge.policy.segments_per_tier", 10d); // 每个tier允许的segement 数,注意这个数要大于上面的at_once数,否则这个值会先于最大可操作数到达,就会立刻做merge,这样会造成频繁
client.createIndex(newRealIndexName, type, indexSettings, mappingContent);
... ...
... ... @@ -80,7 +80,7 @@
<index>
<name>productindex</name>
<properties>
<property key="number_of_shards" value="2"/>
<property key="number_of_shards" value="4"/>
<property key="number_of_replicas" value="auto"/>
<property key="refresh_interval" value="10s"/>
<property key="translog.flush_threshold_size" value="100mb"/>
... ...
... ... @@ -80,7 +80,7 @@
<index>
<name>productindex</name>
<properties>
<property key="number_of_shards" value="2"/>
<property key="number_of_shards" value="4"/>
<property key="number_of_replicas" value="auto"/>
<property key="refresh_interval" value="${search.index.refresh_interval}"/>
<property key="translog.flush_threshold_size" value="${search.index.translog.flush_threshold_size}"/>
... ...