Elasticsearch:集群管理的一些建议

news2024/11/13 12:02:27

 在之前的文章 “Elasticsearch:集群管理” ,我们对集群管理做了一些介绍。在今天的文章中,我们接着来聊一下有关配置的方面的问题。这在很大程度上取决于你的用例,是索引还是搜索繁重。 我们将在这里讨论在集群设置方面我们需要关注的最佳实践是什么。

避免脑裂

在一个由多个 master 符合条件的节点组成的集群中,我们总是担心,如果网络出现分区或不稳定,那么集群会意外地选举出多个 master,这被称为 “脑裂” 场景。 因此,为了避免这种情况,我们至少需要最少的主节点投票才能赢得主节点选举。 创建 3 个专用主节点

Elasticsearch 要求半数 +1 的符合主节点资格的节点必须投票选举新的主节点,从而避免了这种情况。 因此,强烈建议使用 3 个节点来提供能够失去 1 个主节点并保持稳定的结构。

注意:集群在负载过重时会变得不稳定。
如果主节点除了其常规任务之外还必须执行索引和搜索操作,它可能最终没有足够的资源来执行和监视对集群稳定性至关重要的其他操作,例如创建或删除索引,决定哪些分片应该 分配到哪些节点上,并在每个节点上维护集群状态。

主节点通常比数据节点需要更少的资源。 在其余节点上将 node master 设置为 false。

node.master: false

更多阅读,请参考文章 “Elasticsearch:理解 Master,Elections,Quorum 及 脑裂”。

JVM heap 大小设置

Elasticsearch 和 Lucene 是用 Java 编写的,我们需要调整最大堆空间和 JVM 统计信息。 需要注意的是,Elasticsearch 可用的堆越多,它可以用于过滤、缓存和其他进程以提高查询性能的内存就越多。 此外,过多的堆空间会导致大量垃圾回收。

将 Xms 和 Xmx 设置为不超过总内存的 50%。 Elasticsearch 需要内存用于 JVM 堆以外的用途。 例如,Elasticsearch 使用堆外缓冲区来实现高效的网络通信,并依赖于操作系统的文件系统缓存来实现对文件的高效访问。

禁用交换

操作系统尝试将尽可能多的内存用于文件系统缓存,并急切地换出未使用的应用程序内存。 当操作系统决定这样做时,Elasticsearch 性能可能会受到严重影响,因为它甚至可以将 Elasticsearch 可执行页面换出磁盘。 禁用操作系统级交换并启用内存锁可以帮助我们避免这种情况。

Just add the below in your elasticsearch.yml file.
Set bootstrap.memory_lock: true

虚拟内存调整

Elasticsearch 默认使用 mmaps 目录来存储其索引。 默认操作系统限制 mmap 计数并且可能太低,这可能导致内存不足异常。 因此,为避免虚拟内存耗尽,请增加对 mmap 计数的限制。

/etc/sysctl.conf file
Set vm.max_map_count=262144

注意:通常情况下,deb 及 rpm 安装包可以帮我们自动配置这些。我们不需要手动来配置,但是当我们使用解压缩包的情况下来进行安装,那么我们需要进行手动配置。详细情况,请参考文章链接 “如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch”。

打开文件描述符限制

确保将运行 Elasticsearch 的用户的打开文件描述符数量限制增加到 65,536 或更高。

You can get from: 
http://IP:PORT/_nodes/stats/process?filter_path=**.max_file_descriptors
GET _nodes/stats/process?filter_path=**.max_file_descriptors

 我们可以在如下的文件中进行设置:

set nofile to 65535 in /etc/security/limits.conf

禁用通配符

由于无法检索从 Elasticsearch 集群中删除的数据,因此要确保有人不会对所有索引(* 或 _all)发出 DELETE 操作,请禁用通过通配符查询删除所有索引。

Set action.destructive_requires_name to true

我们可以通过如下的命令来进行设置:

PUT /_cluster/settings
{
  "transient": {
	"action.destructive_requires_name":true
  }
}

如果你想设置为允许,你可以通过如下的命令来进行设置:

PUT /_cluster/settings
{
  "transient": {
	"action.destructive_requires_name":false
  }
}

Elasticearch 分片大小

分片大小没有硬性限制,但经验表明,10GB 到 50GB 之间的分片通常适用于日志和时间序列数据。 它的大小太大会在节点发生故障时花费太多时间来恢复,Elasticsearch 会在数据层的剩余节点之间重新平衡节点的分片,并且也需要时间来运行,但这并不意味着较小的分片在所有情况下都表现良好。

更多信息,请详细阅读 “Elasticsearch:我的 Elasticsearch 集群中应该有多少个分片?”。

垃圾收集器

Old generation 收集暂停发生在重负载下,此时所有去往该节点上分片的请求都被冻结,直到垃圾收集完成。 在繁重的索引负载下,这些集合可能需要几秒钟或更长时间。

Elasticsearch 中的默认垃圾收集器是 Concurrent Mark and Sweep (CMS)。 直到 old generation 的收集器占用率达到 CMSInitiatingOccupancyFraction 中设置的值,CMS才会启动。 当此值过高时会出现问题,从而导致 GC 延迟。 将会有很多长寿命对象,这意味着 CMS 将需要更多时间来清除 old generation。 较新版本的 Java 中最近的 GC 选项是 Garbage First Garbage Collector (G1GC),它旨在最大限度地减少垃圾收集器必须停止所有应用程序线程的时间。 G1GC 将堆分成更小的区域,每个区域可以是年轻代或老年代。 GC 可以决定分析有更多垃圾的区域,通过避免一次收集整个老年代来减少 GC 暂停时间。 查看分片的当前大小

查看分片的当前大小:

http://IP:PORT/_cat/shards?v=true&h=index,prirep,shard,store&s=prirep,store

查看每个节点的分片数: 

http://IP:PORT/_cat/shards?v=true

获取集群设置:

http://IP:PORT/_cluster/settings?pretty&include_defaults

检查节点统计信息:

http://IP:PORT/_nodes/stats?metric=adaptive_selection,breaker,discovery,fs,http,indices,jvm,os,process,thread_pool,transport

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/417110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国算力的想象力有多大?|产业特稿

巨头入场和“东数西算”的助推,让中国离这个万亿级算力蓝海更近了一步。 作者|思杭 编辑|皮爷 出品|产业家 2023年初,在青岛、济南、日照等12座城市,一座座崭新的大型数据中心拔地而起。 其中,最引人瞩目的属2月23日&#xff…

文件上传漏洞 --- php邂逅windows通用上传缺陷

目录 后端源码 前端源码 后端代码审计 方式一绕过原理 --- 冒号加特性 验证及结果 方式二绕过原理 --- 数据流 验证及结果 环境需求 php5.2.17IIS环境&#xff0c;可以下载phpstuday2018来满足环境的要求。 后端源码 <?php //U-Mail demo ... if(isset($_POST[sub…

【AI能否取代设计师】「Stable Diffusion」AI绘画黑科技将告诉你答案

上一篇文章&#xff1a;【AI绘画】我以Midjourney为主学习AI绘画效果咋样&#xff1f;_山楂山楂丸的博客-CSDN博客 目录 前言 一、「Stable Diffusion」 是什么 二、「Stable Diffusion」上手演练 三、竟然还有ChatGPT&#xff1f; 四、「Stable Diffusion」作品展示 五、…

爆火的Auto-GPT:实战及运行体验

Auto-GPT可以说是目前AI应用方向最火爆的项目了&#xff0c;自从3月份上线以来&#xff0c;一个月疯狂拦下将近7万star&#xff08;截至本文写稿时69.5k&#xff09;。它的目的是探索诸如GPT-4这样的大语言模型自主完成任务的能力。业界也有一些大佬出来表示这个项目真的很有趣…

pnpm与monorepo架构

本文根据b站up小满zs教程记录 软硬连接介绍 在cmd环境下输入mklink 创建链接需要开启管理员模式 软连接 # mklink 要创建的连接名称 源文件 mklink ruan.js ying.js硬链接 共享一个内存地址。 # mklink 要创建的连接名称 源文件 mklink /H ying.js ying.jspn…

工程项目管理系统源码-简洁+好用+全面-工程项目管理

​工程项目管理系统是指从事工程项目管理的企业&#xff08;以下简称工程项目管理企业&#xff09;受业主委托&#xff0c;按照合同约定&#xff0c;代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 ​系统定义 工程项目管理企业不直接与该工程项目的总承包企…

STL : 单向链表 Forward_list 与 双向链表 List

目录 Forward_list Member functions List Elements access Modifiers Operations Observes Forward_list #include using namespace std; 单链表&#xff1a;数据的存储位置是分散的、随机的&#xff0c;整个链表的数据的线性关系通过指针来维持&#xff1b; 擅长…

【LeetCode 训练营 3,5】无重复字符的最长子串+最长回文子串

&#x1f48c; 博客内容&#xff1a;LeetCode 训练营 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准前端&#xff0c;专注基础和实战分享 &#xff0c;欢迎私信&#xff01; &#x1f496; 欢迎大家&#xff1a;这…

架构重构的技巧

1 代码重构 定义 对软件代码做任何改动以增加可读性或者简化结构而不影响输出结果。 目的 增加可读性、增加可维护性、可扩展性 3 关键点 不影响输出不修正错误不增加新的功能性 代码重构时&#xff0c;发现有个功能实现逻辑不合理&#xff0c;可直接修改吗&#xff1f;…

网络安全-JDBC反序列化漏洞与RCE

目录环境Black Hat Europe 2019漏洞原理攻击手法mysql-connector-java的分析Mysql协议抓包分析Mysql服务器docker启动抓包&&分析Fake Mysql Server搭建Java反序列化工具ysoserial使用fnmsd师傅的MySQL_Fake_Server使用Y4tacker师傅的脚本JDBC代码项目架构代码复现参考环…

Python爬虫之读取数据库中的数据

之前几篇我们一直在研究如何从网站上快速、方便的获取数据&#xff0c;并将获取到的数据存储在数据库中。但是将数据存储在数据中并不是我们的目的&#xff0c;获取和存储数据的目的是为了更好的利用这些数据&#xff0c;利用这些数据的前提首先需要从数据库按一定的格式来读取…

LeetCode——二叉树的非递归遍历

144. 二叉树的前序遍历 给你二叉树的根节点root&#xff0c;返回它节点值的前序遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a; 输入&#xff1…

[ 应急响应基础篇 ] 使用 Autoruns 启动项分析工具分析启动项(附Autoruns安装教程)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

Spring详解简介

1、Spring的简介 Spring的英文翻译为春天&#xff0c;可以说是给Java程序员带来了春天&#xff0c;因为它极大的简化了开发。我得出一个公式&#xff1a;Spring 春天 Java程序员的春天 简化开发。最后的简化开发正是Spring框架带来的最大好处。 Spring是一个开放源代码的设计…

SpringSecurity之两个重要接口

前言 前面讲解了关于SpringSecurity的基本原理&#xff0c;其中介绍了过滤器链以及过滤器加载的过程。我们在前面入门案例中的用户名和密码是系统自动生成的&#xff0c;在真实应用环境中&#xff0c;是需要查询数据库获取用户名密码是否匹配的&#xff0c;那么如何实现呢&…

贯穿设计模式第二话--开闭职责原则

&#x1f973;&#x1f973;&#x1f973; 茫茫人海千千万万&#xff0c;感谢这一刻你看到了我的文章&#xff0c;感谢观赏&#xff0c;大家好呀&#xff0c;我是最爱吃鱼罐头&#xff0c;大家可以叫鱼罐头呦~&#x1f973;&#x1f973;&#x1f973; 从今天开始&#xff0c;将…

串口数据处理

1.在串口接收中断中接收到的数据写入环形缓冲区&#xff1b;唤醒解析线程(发出任务通知)或释放信号量。 2.开一个解析线程&#xff1a; void AT_Parser() {while(1){1.等待任务通知&#xff1b;读环形缓冲区&#xff08;将数据存起来&#xff09;&#xff1b; 2.常…

FE_CSS 页面布局之浮动

网页布局的本质——用 CSS 来摆放盒子。 把盒子摆放到相应位置。CSS 提供了三种传统布局方式(简单说,就是盒子如何进行排列顺序)&#xff1a; 普通流&#xff08;标准流&#xff09;浮动定位 1 标准流&#xff08;普通流/文档流&#xff09; 所谓的标准流: 就是标签按照规定…

LAMP架构与网站搭建实例

一.LAMP概述 1、LAMP的概念 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态web站点服务及其应用开发环境 LAMP是一个缩写词&#xff0c;具体包括Linux操作系统、Apache网站服务器、MySQL数据库服务器、…

53 openEuler搭建PostgreSQL数据库服务器-管理数据库

文章目录53 openEuler搭建PostgreSQL数据库服务器-管理数据库53.1 创建数据库创建数据库示例53.2 选择数据库选择数据库示例53.3 查看数据库查看数据库示例53.4 删除数据库删除数据库示例53.5 备份数据库备份数据库示例53.6 恢复数据库恢复数据库示例53 openEuler搭建PostgreSQ…