【Elasticsearch】配置分片分配到指定节点

配置分片分配到指定节点

参考文章:https://www.elastic.co/guide/en/elasticsearch/reference/current/shard-allocation-filtering.html

两种方式:根据节点属性分配和根据节点名称分配。

测试环境

bash 复制代码
tar xvf elasticsearch-7.17.25-linux-x86_64.tar.gz;cd elasticsearch-7.17.25
./bin/elasticsearch -Ehttp.port=9201 -Epath.data=/home/es/elasticsearch-7.17.25/data/node1_data -Epath.logs=/home/es/elasticsearch-7.17.25/logs/node1_logs -Ecluster.name=sq -Enode.name=node-1 -d
./bin/elasticsearch -Ehttp.port=9202 -Epath.data=/home/es/elasticsearch-7.17.25/data/node2_data -Epath.logs=/home/es/elasticsearch-7.17.25/logs/node2_logs -Ecluster.name=sq -Enode.name=node-2 -d
./bin/elasticsearch -Ehttp.port=9203 -Epath.data=/home/es/elasticsearch-7.17.25/data/node3_data -Epath.logs=/home/es/elasticsearch-7.17.25/logs/node3_logs -Ecluster.name=sq -Enode.name=node-3 -d

根据节点属性分配索引

1. 配置节点的属性状态

在 Elasticsearch 集群中,节点的属性状态可以用来定义节点的特定功能或用途。例如,我们可以为某个节点设置一个名为 box_type 的属性,并将其值设置为 uyun,表示这个节点属于 uyun 类型。配置文件增加后需要重启节点,以便使新的属性状态生效。具体操作如下:

shell 复制代码
# 在节点的配置文件中增加属性设置
node.attr.box_type: "uyun"

# 重启节点以应用新的配置
# 重启操作会根据具体的部署环境和配置有所不同,例如可以使用以下命令重启 Elasticsearch 服务:
sudo systemctl restart elasticsearch

2. 配置索引模板

索引模板是 Elasticsearch 中用来定义索引创建时的默认设置的工具。通过配置索引模板,我们可以为符合特定模式的索引指定一系列的设置,例如索引的副本数量、分片数量、分析器设置等。以下是一个配置索引模板的示例:

shell 复制代码
# 使用 curl 命令向 Elasticsearch 发送 PUT 请求,创建一个名为 "test" 的索引模板
curl -H 'Content-type: application/json' -XPUT 'http://127.0.0.1:9201/_template/test'  -d '{
  "index_patterns": "twitter_*",  # 指定该模板适用于所有以 "twitter_" 开头的索引
  "settings": {
    "index.number_of_replicas": "1",  # 设置索引的副本数量为 1
    "index.routing.allocation.require.box_type": "uyun"  # 要求索引只能分配到 box_type 为 "uyun" 的节点上
  }
}'

3. 生成一个新的 twitter 索引

在配置好索引模板之后,我们可以创建一个新的索引,并观察其分配情况。例如,创建一个名为 twitter_2 的索引:

shell 复制代码
# 使用 curl 命令向 Elasticsearch 发送 PUT 请求,创建 twitter_2 索引
curl -H 'Content-type: application/json' -XPUT 'http://127.0.0.1:9201/twitter_2'

此时,由于我们之前配置的索引模板,新创建的 twitter_2 索引会自动应用模板中的设置,仅分配到 box_typeuyun 的节点上,而之前的索引不受影响。索引模板是针对后续新建的索引生效的,对已存在的索引不会产生影响.

根据名称分配索引

除了根据自定义属性分配索引外,我们还可以根据节点的名称来分配索引。以下是一个根据节点名称分配索引的示例:

shell 复制代码
# 创建一个新的索引模板,名为 "test2"
curl -H 'Content-type: application/json' -XPUT 'http://127.0.0.1:9201/_template/test2'  -d '{
  "index_patterns": "sq_*",  # 适用于所有以 "sq_" 开头的索引
  "settings": {
    "index.number_of_replicas": "1",  # 副本数量为 1
    "index.routing.allocation.require._name": "node-2"  # 要求索引只能分配到名称为 "node-2" 的节点上
  }
}'

# 创建一个名为 "sq_1" 的索引
curl -H 'Content-type: application/json' -XPUT 'http://127.0.0.1:9201/sq_1'

此时,新创建的 sq_1 索引会根据 test2 索引模板的设置,仅分配到名称为 node-2 的节点上,而之前的索引不受影响。同样地,索引模板是针对后续新建的索引生效的,对已存在的索引不会产生影响.

通过以上步骤,我们可以在 Elasticsearch 集群中灵活地配置节点属性和索引模板,实现对索引的合理分配和管理,从而优化集群的性能和资源利用率。

相关推荐
广州腾科助你拿下华为认证1 小时前
华为考试:HCIE数通考试难度分析
大数据·华为
在未来等你3 小时前
Elasticsearch面试精讲 Day 17:查询性能调优实践
大数据·分布式·elasticsearch·搜索引擎·面试
大数据CLUB6 小时前
基于spark的澳洲光伏发电站选址预测
大数据·hadoop·分布式·数据分析·spark·数据开发
ratbag6720136 小时前
当环保遇上大数据:生态环境大数据技术专业的课程侧重哪些领域?
大数据
计算机编程小央姐8 小时前
跟上大数据时代步伐:食物营养数据可视化分析系统技术前沿解析
大数据·hadoop·信息可视化·spark·django·课程设计·食物
智数研析社9 小时前
9120 部 TMDb 高分电影数据集 | 7 列全维度指标 (评分 / 热度 / 剧情)+API 权威源 | 电影趋势分析 / 推荐系统 / NLP 建模用
大数据·人工智能·python·深度学习·数据分析·数据集·数据清洗
全栈工程师修炼指南9 小时前
告别手动构建!Jenkins 与 Gitlab 完美协作,根据参数自动化触发CI/CD流水线实践
运维·ci/cd·自动化·gitlab·jenkins
潘达斯奈基~9 小时前
《大数据之路1》笔记2:数据模型
大数据·笔记
寻星探路9 小时前
数据库造神计划第六天---增删改查(CRUD)(2)
java·大数据·数据库
翰林小院11 小时前
【大数据专栏】流式处理框架-Apache Fink
大数据·flink