ElasticSearch | Hot & Warm 架构 |

2020-06-01  本文已影响0人  乌鲁木齐001号程序员

Hot Node

Warm Node


配置 Hot & Warm 架构 | 举个栗子

标记一个 Hot 节点

bin/elasticsearch -E node.name=hotnode -E cluster.name=geektime -E path.data=hot_data -E node.attr.my_node_type=hot

标记一个 Warm 节点

bin/elasticsearch -E node.name=warmnode -E cluster.name=geektime -E path.data=warm_data -E node.attr.my_node_type=warm

查看集群信息
GET /_cat/nodeattrs?v
配置索引到 Hot Node
PUT logs-2019-06-27
{
  "settings":{
    "number_of_shards":2,
    "number_of_replicas":0,
    "index.routing.allocation.require.my_node_type":"hot"
  }
}

PUT my_index1/_doc/1
{
  "key":"value"
}
查看索引 logs-2019-06-27 的 Shard 分布
GET _cat/shards?v
移动索引到 Warm 节点
PUT PUT logs-2019-06-27/_settings
{  
  "index.routing.allocation.require.my_node_type":"warm"
}
查看索引 logs-2019-06-27 的 Shard 分布
GET _cat/shards?v

Rack Awareness

Rack Awareness.png

Rack Awareness | 举个栗子

启动第一个节点 | node.attr.my_rack_id=rack1

bin/elasticsearch -E node.name=node1 -E cluster.name=geektime -E path.data=node1_data -E node.attr.my_rack_id=rack1

启动第二个节点 | node.attr.my_rack_id=rack2

bin/elasticsearch -E node.name=node2 -E cluster.name=geektime -E path.data=node2_data -E node.attr.my_rack_id=rack2

告诉 ElasticSearch 用于 Rack Awareness 的 attribute 是哪个
PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.awareness.attributes": "my_rack_id"
  }
}
创建索引 my_index1
PUT my_index1
{
  "settings":{
    "number_of_shards":2,
    "number_of_replicas":1
  }
}
查看索引 my_index1 的 Shard 分布
GET _cat/shards?v

Force Rack Awareness | 举个栗子

启动第一个节点 | node.attr.my_rack_id=rack1

bin/elasticsearch -E node.name=node1 -E cluster.name=geektime -E path.data=node1_data -E node.attr.my_rack_id=rack1

启动第二个节点 | node.attr.my_rack_id=rack1

bin/elasticsearch -E node.name=node2 -E cluster.name=geektime -E path.data=node2_data -E node.attr.my_rack_id=rack1

必须把主副本分片分布在 rack1 和 rack2 上面
PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.awareness.attributes": "my_rack_id",
    "cluster.routing.allocation.awareness.force.my_rack_id.values": "rack1,rack2"
  }
}
创建索引 my_index1
PUT my_index1
{
  "settings":{
    "number_of_shards":2,
    "number_of_replicas":1
  }
}

PUT my_index1/_doc/1
{
  "key":"value"
}
查看集群的健康状态
GET _cluster/health
查看黄色的原因
GET _cluster/allocation/explain?pretty

Shard Filtering

设置 分配索引到节点,节点的属性规则
index.routing.allocation.include.{attr} 节点的属性中至少包含 {attr} 中的一个值
index.routing.allocation.exclude.{attr} 节点的属性中不能包含 {attr} 中的任何一个值
index.routing.allocation.require.{attr} 节点的属性中需要包含 {attr} 的所有值
上一篇下一篇

猜你喜欢

热点阅读