当前位置: 首页 > news >正文

ElasticSearch集群

服务发现

服务发现的触发时机:1、启动一个新节点。2、当一个节点认为主节点宕机
节点启动时,会根据discovery.seed_hosts的配置+数据目录中保存的集群元数据来发现集群其他节点,向这些节点发送消息,这些节点收到后将自己是否是候选者、自己知道的候选者回复给发送者,如果没有主节点并且已发现足够多的候选者,则开始投票选主

投票配置节点(Voting configurations)

ES集群会维护一个称为投票配置的节点集合,选主和修改集群状态都需要投票配置的节点集合过半响应成功
投票配置节点可以是候选者(master-eligible)的集合,也可以是候选者集合的子集,这样的好处是当投票配置节点宕机时,非投票配置节点的候选者可以加入投票配置节点集合
当有候选者加入时,投票配置节点会自动伸缩,但是需要一些时间来调整,因为投票配置的节点集合的修改需要过半节点投票
集群允许同时挂掉半数以下的投票配置节点,当节点挂掉时,集群会自动收缩,因此如果不是同时挂掉,集群最少可以减少到2台投票配置节点(3台的过半节点),比如原本有5个节点,同时挂掉2个,经过调整后,投票配置节点由5收缩到3,仍允许挂掉一个;如果5个节点同时挂掉3个,则投票配置节点无法调整,因为调整本身需要过半节点投票,也就是至少3个
当集群中有偶数个候选者节点时,ES只会使用其中候选者-1个节点作为投票配置节点,使得投票配置节点的个数一定为奇数,因为当有偶数个节点时,集群对半脑裂将导致集群不可用,而奇数,集群任何一种脑裂的情况都不会导致不可用

GET _cluster/state?filter_path=metadata.cluster_coordination.last_committed_config//查看当前的投票配置节点,返回节点的UID
GET _cluster/state?filter_path=nodes//UID到节点的对应关系

集群扩缩容

建议集群中配置少量而固定个数的候选者节点
节点扩容:只需要在新加入节点中配置discovery.seed_hosts,启动时指定enroll-token
节点缩容:

  • 如果缩容的节点不是候选者,或者少于过半节点数的候选者,则直接关闭即可
  • 如果大于过半节点数,
  1. 分多批次关闭,每次关闭少于过半节点,等待集群调整投票配置节点,再关闭下一批次,GET _cluster/state?filter_path=metadata.cluster_coordination.last_committed_config查看投票配置节点。
  2. 通过cluster API(推荐),直接将要关闭的节点加入voting_config_exclusions,等待直到投票配置节点调整完毕,再关闭节点进程,最后删除voting_config_exclusions
POST /_cluster/voting_config_exclusions?node_names=node_name //将节点加入voting_config_exclusions
POST /_cluster/voting_config_exclusions?node_names=node_name&timeout=1m
GET /_cluster/state?filter_path=metadata.cluster_coordination.voting_config_exclusions //查询voting_config_exclusions
DELETE /_cluster/voting_config_exclusions //删除
DELETE /_cluster/voting_config_exclusions?wait_for_removal=false

cluster.initial_master_nodes

cluster.initial_master_nodes: ["node-1"]
cluster.initial_master_nodes:- master-a- master-b- master-c

集群第一次启动时,默认会在第一个节点自动加入cluster.initial_master_nodes配置,并且其中的配置就是第一个节点,也可以手动配置,比如配置3个节点,这样第一次启动时集群就知道这些节点是候选节点,启动后会将候选节点信息保存到数据目录,后续再重启时不会再使用cluster.initial_master_nodes,而是使用数据目录中的配置来选主。
第一次启动后,应该删除cluster.initial_master_nodes配置。
cluster.initial_master_nodes可以是节点名称node.name,节点名称默认是hostname主机名称,也可以是 ip和端口
和discovery.seed_hosts的区别:

  • cluster.initial_master_nodes是第一次启动时,只能在候选者节点上配置的,用来第一次选主的配置,第一次启动后需要删除,可以配置为节点名称
  • discovery.seed_hosts是节点发现其他节点的配置,候选者和数据节点都需要配置,不能删除,可以配置为集群其他节点的IP和transport.port.

节点角色

节点角色通过node.roles配置,可以同时具备多个角色,节点默认具备所有类型的角色
角色主要分为候选者(master-eligible)和数据(data)节点2种类型,非仅投票节点(voting_only)的候选者可以当选为主节点
主节点的作用:管理整个集群,包括1、维护每个节点的存活状态。2、创建索引,管理索引和分片的元数据,索引到分片的对应关系,分片到节点的对应关系
数据节点的作用:保存索引的文档分片数据,数据的CRUD
建议配置专用主节点(dedicated master-eligible),不让候选者做大负载的数据工作,防止主节点宕机频繁选举,node.roles: master
仅投票节点:只能参与投票,不能当选主节点,仅投票节点必须配置master和voting_only角色,通常还可以加入data角色

cluster.name: c1-5nodes-9201-9205node.name: node-m-2
path.data: /opt/framework/es-cluster/data/node-m-2
path.logs: /opt/framework/es-cluster/logs/node-m-2
network.host: 192.168.1.66
http.port: 9202
transport.port: 9302
discovery.seed_hosts: ["192.168.7.65:9301"]
# cluster.initial_master_nodes: ["node-m-1", "node-m-2","node-mdv-3"]
node.roles: ["master"]xpack.security.enabled: false
xpack.security.http.ssl:enabled: false
xpack.security.transport.ssl:enabled: false
xpack.security.enrollment.enabled: true
cluster.name: c1-5nodes-9201-9205node.name: node-d-4
path.data: /data/es-cluster/data/node-d-4
path.logs: /data/es-cluster/logs/node-d-4
network.host: 192.168.7.65
http.port: 9204
transport.port: 9304
discovery.seed_hosts: ["192.168.7.65:9301", "192.168.7.65:9303", "192.168.1.66:9302"]
node.roles: ["data"]xpack.security.enabled: false
xpack.security.http.ssl:enabled: false
xpack.security.transport.ssl:enabled: false
xpack.security.enrollment.enabled: true
cluster.name: c1-5nodes-9201-9205node.name: node-mdv-3
path.data: /data/es-cluster/data/node-mdv-3
path.logs: /data/es-cluster/logs/node-mdv-3
network.host: 192.168.7.65
http.port: 9203
transport.port: 9303
discovery.seed_hosts: ["192.168.7.65:9301", "192.168.1.66:9302"]
# cluster.initial_master_nodes: ["node-m-1", "node-m-2","node-mdv-3"]
node.roles: ["master","voting_only","data"]xpack.security.enabled: false
xpack.security.http.ssl:enabled: false
xpack.security.transport.ssl:enabled: false
xpack.security.enrollment.enabled: true

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【React Native优质开源项目】
  • 32位版 C 库函数time 将在 2038 年溢出,那到时候,它该何去何从
  • Mosh|初学者SQL教程第二弹
  • js原型和类---prototype,__proto__,new,class
  • 【嵌入式DIY实例-ESP8266篇】-LCD1602显示DS1631传感器数据
  • 前端八股文 vue2和vue3的区别
  • FlinkCDC-3.1.1 DataStream Source
  • 通过gateway 打印日志全局控制日志
  • Java通过GeoLite2-City.mmdb 进行IP信息查询地理定位和经纬度筛选。
  • java代理简单理解
  • 评估测试用例有效性 5个方面
  • 数学建模中常用的数据处理方法
  • c++:内存管理
  • Linux下使用arping检测IP地址是否冲突
  • 智慧园区管理系统建设方案(Word完整原件)
  • 〔开发系列〕一次关于小程序开发的深度总结
  • golang中接口赋值与方法集
  • Linux快速复制或删除大量小文件
  • PermissionScope Swift4 兼容问题
  • Python实现BT种子转化为磁力链接【实战】
  • use Google search engine
  • 测试开发系类之接口自动化测试
  • 高度不固定时垂直居中
  • 简单实现一个textarea自适应高度
  • 精彩代码 vue.js
  • 蓝海存储开关机注意事项总结
  • 普通函数和构造函数的区别
  • 前端代码风格自动化系列(二)之Commitlint
  • 前端路由实现-history
  • 前端性能优化--懒加载和预加载
  • #define 用法
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #window11设置系统变量#
  • #控制台大学课堂点名问题_课堂随机点名
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (Ruby)Ubuntu12.04安装Rails环境
  • (void) (_x == _y)的作用
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (过滤器)Filter和(监听器)listener
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转)用.Net的File控件上传文件的解决方案
  • .net 4.0发布后不能正常显示图片问题
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .net 验证控件和javaScript的冲突问题
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [<事务专题>]
  • [012-1].第12节:Mysql的配置文件的使用
  • [ACP云计算]易混淆知识点(考题总结)
  • [BUAA软工]第一次博客作业---阅读《构建之法》
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn