[elasticsearch笔记] Modules 节点相关

Modules

  • Discovery and cluster formation
    • Discovery
    • Quorum-based decision making
    • voting configuration
    • Bootstrapping a cluster
    • Adding and removing nodes
    • Publishing the cluster state
    • Cluster fault detection
  • Network Settings
  • Node
    • Master Eligible Node
    • Voting-only master-eligible node
    • Data Node
    • Ingest Node
    • Coordinating only node
    • Machine learning node
    • Changing the role of a node
  • [Snapshot And Restore](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html)
  • Transport
  • Cross-cluster search

Discovery and cluster formation

  • 参数
  • 常用且重要参数
    • discovery.seed_hosts: 集群 master eligible节点列表
    • discovery.seed_providers: 指定使用哪种 seed hosts provider。默认值是:discovery.seed_hosts,之前版本(7.0之前)是 discovery.zen.hosts_provider,这种方式在未来版本中会被移除
    • discovery.type: 指明ES是不是要组成一个多节点集群。默认是 multiple-node, single-node表示ES将组建一个单节点集群
    • cluster.initial_master_nodes: Sets the initial set of master-eligible nodes in a brand-new cluster.

Discovery

  • 构建集群从 seed host providers 开始,在已知集群中,有 master-eligible 的节点
  • 每个节点探测 seed addresses,识别是否可连接;分享远程已知的 master-eligible 节点列表;继续探测,找 master 节点;如果实在找不大,就在master-eligible 中进行选举
  • 核心参数
    • discovery.find_peers_interval:默认 1s
    • discovery.seed_hosts
  • seed host providers 可以配置提供,也可以在文件中提供,配置demo如下:
discovery.seed_hosts:
   - 192.168.1.10:9300
   - 192.168.1.11 
   - seeds.mydomain.com 


discovery.seed_providers: unicast_hosts.txt

# unicast_hosts.txt
10.10.10.5
10.10.10.6:9305
10.10.10.5:10005
# an IPv6 address
[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:9301

Quorum-based decision making

  • Quorum 需要仔细考虑,以防集群出现脑裂问题
  • 集群可以 增加、删除 master eligible节点
  • voting configurationmaster eligible节点 的集合,负责选举 master 或者 提交更新集群状态。一个决策当由一半以上 voting configuration 节点反馈才会生效。
  • 任何 master eligible 都可以发起选举(选举自己为 master),第一发起者会成为 master,当两个同时发生时,重新选举。为了减少同时发起选举的概率,任何节点发起选举的时间都是随机的。

voting configuration

  • set of master eligible,大部分情况,就是所有master eligiblevoting configuration的决定需要耗费比较长时间,如果集群中有些不稳定、或者测试节点,是不应该进入 voting configuration的,这是为什么它是 a set of master eligible
  • 选举 master、提交集群状态信息 需要半数以上的 voting configuration 回应
  • voting configuration中半数以上节点可工作,集群就可以正常工作
  • cluster.auto_shrink_voting_configuration
  • master eligible节点个数可以是偶数,voting configuration是奇数就可以了
  • 如果有 voting configuration 中的节点要离开集群,而还有没有在 voting configuration中的节点,集群会交换两个节点,以保持 voting configuration 节点数不变

Bootstrapping a cluster

  • 新启动系统通过设置 cluster.initial_master_nodes 来定义 master eligible 节点。
  • master eligible会被存储,重启时,使用存储的master eligible,如果没有,会使用 cluster.initial_master_nodes定义的值,但是这种情况使用 cluster.initial_master_nodes可能会导致数据丢失,因为集群状态可能已经发生了很大变化,cluster.initial_master_nodes中节点已经不能完整表示集群了。
  • 技术上,只需要在一个master eligible节点上定义 cluster.initial_master_nodes。但是为了容错能力,建议在至少在三个以上节点定义 cluster.initial_master_nodes
# config file
cluster.initial_master_nodes:
  - master-a
  - master-b
  - master-c

# command line
$ bin/elasticsearch -Ecluster.initial_master_nodes=master-a,master-b,master-c

Adding and removing nodes

  • 删除 master eligible时,特别需要注意的是,不能一次性删除 voting configuration半数以上的节点,否则会导致集群不可用(集群需要半数以上才可以做决策)。最好逐个删除,让集群自己调整。
  • 当只有 两个master eligible,需要删除其中一个时,需要告诉集群该节点不是 voting configuration节点,然后才可以删除这个节点
# Add node to voting configuration exclusions list and wait for the system to auto-reconfigure the node out of the voting configuration up to the default timeout of 30 seconds
POST /_cluster/voting_config_exclusions/node_name

# Add node to voting configuration exclusions list and wait for auto-reconfiguration up to one minute
POST /_cluster/voting_config_exclusions/node_name?timeout=1m

Publishing the cluster state

  • master node是唯一能够对集群状态做改变的节点。
  • cluster.publish.timeout: default 30s
  • master node发生实际变更前,需要通知其他nodes,当master node收到足够多的ack时,master node才可认为提交成功,并通知相关节点做对应的变更。如果 cluster.publish.timeout时间内没有收到足够的ack,master node需要考虑自己是否有问题,并再次发起 master elect

Cluster fault detection

  • follower checks: master 节点会检测集群中其他节点是否连接正常且健康
  • leader checks: 非master节点也会检测master节点的健康状况
  • 如果 master 节点发现其他节点失联,就会尝试把该节点从集群中删除
  • 如果 非master 节点发现master失联,它会重启自己的发现过程或者重新选举master

Network Settings

  • 永远不要把未被保护的节点暴露在公网上
  • network.host
    • 0.0.0.0 或者 0, 接收所有网络请求

Node

  • 节点的类型:master-eligible, data, ingest, and machine learning(if available)
  • 参数:
    • node.master
    • node.data
    • node.ingest
    • xpack.ml.enabled node.ml

Master Eligible Node

  • 主要职责:集群范围类动作,新建、删除索引,集群包含节点,决定哪个分片分配到哪个节点
  • 必须可以访问 path.data 目录 , 集群状态持久化在这里
  • 为了高可用,Master Eligible Node 至少得有三个
  • 在大型集群中,master eligible node 和 dedicated data nodes 最好区分开
  • 只负责master eligible node角色配置
    node.master: true 
    node.voting_only: false 
    node.data: false 
    node.ingest: false 
    node.ml: false 
    xpack.ml.enabled: true 
    cluster.remote.connect: false 
    

Voting-only master-eligible node

  • 有选举权,但是不能成为master的 master-eligible 节点
  • a dedicated voting-only master -eligible node 配置
    node.master: true 
    node.voting_only: true 
    node.data: false 
    node.ingest: false 
    node.ml: false 
    xpack.ml.enabled: true 
    cluster.remote.connect: false 
    

Data Node

  • a dedicated data node 配置
    node.master: false 
    node.voting_only: false 
    node.data: true 
    node.ingest: false 
    node.ml: false 
    cluster.remote.connect: false 
    

Ingest Node

  • Ingest nodes can execute pre-processing pipelines, composed of one or more ingest processors.
  • ingest node 如何使用,查看文档
  • a dedicated ingest node 配置
    node.master: false 
    node.voting_only: false 
    node.data: false 
    node.ingest: true 
    node.ml: false 
    cluster.remote.connect: false 
    

Coordinating only node

  • 任何节点都是协调节点,不可以 disable
  • 有负载均衡作用
  • 功能
    • route requests
    • handle the search reduce phase
    • distribute bulk indexing
  • 主要工作场景及流程
    • 接收请求
    • 把请求发送到包含数据的节点
    • 收集来自相关节点的返回数据,处理后返回给请求方
  • 一个只充当协调节点的设置如下:
    node.master: false 
    node.voting_only: false 
    node.data: false 
    node.ingest: false 
    node.ml: false 
    cluster.remote.connect: false 
    

Machine learning node

  • 运行任务 、处理机器学习API请求
  • 如果 xpack.ml.enabledtrue,但 node.mlfalse,节点只会接受机器学习API请求,但是不能运行任务
node.master: false 
node.voting_only: false 
node.data: false 
node.ingest: false 
node.ml: true 
xpack.ml.enabled: true 
cluster.remote.connect: false 

Changing the role of a node

  • 如果重新调整node的角色,需要保证调整后得与之前不“冲突”。如重新设置 node.data:false,如果节点已经存有数据,则会失败,需要利用 allocation filter,先把数据迁移到其他数据节点
    PUT _cluster/settings
    {
      "transient" : {
        "cluster.routing.allocation.exclude._ip" : "10.0.0.1" # exclude, require, include; _name, _ip, _host
      }
    }
    

Snapshot And Restore

  • 备份集群唯一可靠的方式是使用 snapshot and restore 功能
  • shared file system repository用共享文件系统存储镜像。
  • 需要把 共享文件系统 挂载到所有master和data节点的相同路径下。通过 path.repo 配置
path.repo: ["/mount/backups", "/mount/longterm_backups"]

PUT /_snapshot/my_fs_backup
{
    "type": "fs",
    "settings": {
        "location": "/mount/backups/my_fs_backup_location",
        "compress": true
    }
}

# abosolute path
PUT /_snapshot/my_fs_backup
{
    "type": "fs",
    "settings": {
        "location": "my_fs_backup_location",
        "compress": true
    }
}

POST /_snapshot/my_backup/snapshot_1/_restore

POST /_snapshot/my_backup/snapshot_1/_restore
{
  "indices": "index_1,index_2",
  "ignore_unavailable": true,
  "include_global_state": true,
  "rename_pattern": "index_(.+)",
  "rename_replacement": "restored_index_$1"
}

Transport

  • 集群节点内部通讯是基于TCP的

Cross-cluster search

PUT _cluster/settings
{
  "persistent": {
    "cluster": {
      "remote": {
        "cluster_one": {
          "seeds": [
            "127.0.0.1:9300"
          ]
        },
        "cluster_two": {
          "seeds": [
            "127.0.0.1:9301"
          ]
        },
        "cluster_three": {
          "seeds": [
            "127.0.0.1:9302"
          ]
        }
      }
    }
  }
}

PUT _cluster/settings
{
  "persistent": {
    "cluster.remote.cluster_two.skip_unavailable": true 
  }
}

GET /cluster_one:twitter/_search
{
  "query": {
    "match": {
      "user": "kimchy"
    }
  }
}

GET /cluster_one:twitter,cluster_two:twitter,twitter/_search 
{
  "query": {
    "match": {
      "user": "kimchy"
    }
  }
}


你可能感兴趣的:(elasticsearch)