水平扩展es集群

目录

 

常见集群部署方式

节点类型​

节点参数配置​

单一职责的节点​

单一角色:职责分离的好处​

Dedicate Coordinating Only Node (Client Node)​

Dedicate Master Node​

基本部署:增加节点,水平扩展​

水平扩展:Coordinating Only Node​

读写分离​

在集群中部署 Kibana​

Hot & Warm 架构 与 rack

日志类应用的部署架构

什么是 Hot & Warm Architecture​

Hot Nodes​

Warm Nodes​

配置 Hot & Warm Architecture

标记节点

配置 Hot 数据

旧数据移动到 Warm 节点

Rack Awareness

标记 Rack 节点 + 配置集群

Forced Awareness 

分片设定及管理

单个分片

两个分片

如何设计分片数​

一些例子​

分片过多所带来的副作用

如何确定主分片数​

如何确定副本分片数​

调整分片总数设定,避免分配不均衡​

如何对集群进行容量规划

容量规划​

评估业务的性能需求​

常见用例

硬件配置​

部署方式​

容量规划案例 1: 固定大小的数据集​

拆分索引​

容量规划案例 2: 基于时间序列的数据​

创建基于时间序列的索引

写入时间序列的数据:基于 Date Math 的方式​

写入时间序列的数据 – 基于 Index Alias​

集群扩容​

小节


常见集群部署方式

节点类型

节点参数配置

单一职责的节点

单一角色:职责分离的好处

Dedicate Coordinating Only Node (Client Node)

Dedicate Master Node

基本部署:增加节点,水平扩展

水平扩展:Coordinating Only Node

读写分离

在集群中部署 Kibana

Hot & Warm 架构 与 rack

通常情况下,数据节点采用的都是相同的配置,但有的时候,需要对部署的节点使用不同的硬件,这种情况下,hot warm架构就可以满足我们的需求

日志类应用的部署架构

什么是 Hot & Warm Architecture

Hot Nodes

Warm Nodes

配置 Hot & Warm Architecture

  • 标记节点 (Tagging)
  • 配置索引到 Hot Node
  • 配置索引到 Warm 节点

标记节点

  • 需要通过 “node.attr” 来标记⼀一个节点
  • 节点的 attribute可以是任何的 key/value
  • 可以通过 elasticsearch.yml 或者通过 –E 命令 指定
# 标记一个 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 数据


创建索引时候,指定将其创建在 hot 节点上

# 配置到 Hot节点
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"
}



GET _cat/shards?v

旧数据移动到 Warm 节点


Index.routing.allocation 是一个索引级的 dynamic setting,可以通过 API 在后期进行设定
 

# 配置到 warm 节点
PUT PUT logs-2019-06-27/_settings
{  
  "index.routing.allocation.require.my_node_type":"warm"
}

Rack Awareness

主副分片分散到rack1,rack2上

标记 Rack 节点 + 配置集群

# 标记一个 rack 1
bin/elasticsearch  -E node.name=node1 -E cluster.name=geektime -E path.data=node1_data -E node.attr.my_rack_id=rack1

# 标记一个 rack 2
bin/elasticsearch  -E node.name=node2 -E cluster.name=geektime -E path.data=node2_data -E node.attr.my_rack_id=rack2

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.awareness.attributes": "my_rack_id"
  }
}

PUT my_index1
{
  "settings":{
    "number_of_shards":2,
    "number_of_replicas":1
  }
}

PUT my_index1/_doc/1
{
  "key":"value"
}


GET _cat/shards?v
DELETE my_index1/_doc/1

Forced Awareness 

# Fore awareness
# 标记一个 rack 1
bin/elasticsearch  -E node.name=node1 -E cluster.name=geektime -E path.data=node1_data -E node.attr.my_rack_id=rack1

# 标记一个 rack 2
bin/elasticsearch  -E node.name=node2 -E cluster.name=geektime -E path.data=node2_data -E node.attr.my_rack_id=rack1


PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.awareness.attributes": "my_rack_id",
    "cluster.routing.allocation.awareness.force.my_rack_id.values": "rack1,rack2"
  }
}
GET _cluster/settings

# 集群黄色
GET _cluster/health

# 副本无法分配
GET _cat/shards?v


GET _cluster/allocation/explain?pretty
```

分片设定及管理

单个分片

两个分片


集群增加一个节点后,Elasticsearch 会自动进行分片的移动,也叫 Shard Rebalancing

如何设计分片数

一些例子

分片过多所带来的副作用

如何确定主分片数

如何确定副本分片数

调整分片总数设定,避免分配不均衡

如何对集群进行容量规划

容量规划

评估业务的性能需求

常见用例

硬件配置

部署方式

容量规划案例 1: 固定大小的数据集

拆分索引

容量规划案例 2: 基于时间序列的数据

创建基于时间序列的索引
 

写入时间序列的数据:基于 Date Math 的方式

写入时间序列的数据 – 基于 Index Alias

集群扩容

小节

发布了107 篇原创文章 · 获赞 18 · 访问量 6316

猜你喜欢

转载自blog.csdn.net/qq_43109978/article/details/100822271