一些elasticsearch重要概念与配置参数

ES 是在 lucene 的基础上进行研发的,隐藏了 lucene 的复杂性,提供简单易用的 RESTful Api接口。ES 的分片相当于 lucene 的索引。

Node 节点的几种部署实例
实例一: 只用于数据存储和数据查询,降低其资源消耗率

node.master: false
node.data: true

实例二: 来协调各种创建索引请求或者查询请求,但不存储任何索引数据

node.master: true
node.data: false

实例三: 主要用于查询负载均衡, 并请求分发到多个指定的node服务器,并对各个node服务器返回的结果进行一个汇总处理,最终返回给客户端

node.master: false
node.data: false

实例四: 即有成为主节点的资格,又存储数据

node.master: true
node.data: true

在只有3个节点的部署方案中,建议设置3个节点均有成为master节点的资格,且存储索引数据。

数据目录配置与物理磁盘的使用
一般来说,是这样配置:

path:logs: /var/log/elasticsearchdata: /var/data/elasticsearch

数据目录可以支持使用多个:

path:data:- /mnt/elasticsearch_1- /mnt/elasticsearch_2- /mnt/elasticsearch_3

物理磁盘的使用:

虽然es已经提供了数据副本的冗余,但实际生产中还是建议使用raid1,raid5和raid10
集群名称配置

cluster.name: logging-prod

node节点名称
默认为使用主机名,也可以在elasticsearch.yml中指定。在一个主机上同时跑多个es实例时,这个配置项就会很有帮助。

node.name: prod-data-2


网络地址配置
默认将服务绑定到loopback接口,这需要按实际情况调整。

network.host: 0.0.0.0


注:变更服务绑定接口后,会被认为是作为生产环境使用,会触发es的环境检查操作。当有不符要求的系统或集群配置参数时,es服务会无法启动。

节点发现和cluster初始化参数
单播主机列表通过discovery.zen.ping.unicast.hosts来配置。
这个配置在 elasticsearch.yml 文件中:

discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]


具体的值是一个主机数组或逗号分隔的字符串。每个值应采用host:port或host的形式(其中port默认为设置transport.profiles.default.port,如果未设置则返回transport.tcp.port)。请注意,必须将IPv6主机置于括号内。此设置的默认值为127.0.0.1,[:: 1]。

使用单播,你可以为 Elasticsearch 提供一些它应该去尝试连接的节点列表。当一个节点联系到单播列表中的成员时,它就会得到整个集群所有节点的状态,然后它会联系 master 节点,并加入集群。

discovery.seed_hosts:- 192.168.1.10:9300- 192.168.1.11- seeds.mydomain.com
cluster.initial_master_nodes:- master-node-a- master-node-b- master-node-c


提供了seed.hosts参数的三种赋值方式

initial_master_nodes参数只能使用节点的node.name参数值,一般来说是主机名
Zen Discovery 是 ES 默认内建发现机制。它提供单播和多播的发现方式,并且可以扩展为通过插件支持云环境和其他形式的发现。
Elasticsearch 官方推荐我们使用 单播 代替 组播。而且 Elasticsearch 默认被配置为使用 单播 发现,以防止节点无意中加入集群。
设置JVM heap size
通过jvm.options文件设置jvm缓存参数,过大或过小都不好,过大的缓存也会让垃圾回收变慢。

当jvm缓存设置大于26GB时,需要评估zero-based compressed oops限制,参见下面的说明:
https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html

由于ES构建基于lucene, 而lucene设计强大之处在于lucene能够很好的利用操作系统内存来缓存索引数据,以提供快速的查询性能。lucene的索引文件segements是存储在单文件中的,并且不可变,对于OS来说,能够很友好地将索引文件保持在cache中,以便快速访问;因此,我们很有必要将一半的物理内存留给lucene ; 另一半的物理内存留给ES(JVM heap )。所以, 在ES内存设置方面,可以遵循以下原则:

当机器内存小于64G时,遵循通用的原则,50%给ES,50%留给lucene。
当机器内存大于64G时,遵循以下原则:
a. 如果主要的使用场景是全文检索, 那么建议给ES Heap分配 4~32G的内存即可;其它内存留给操作系统, 供lucene使用(segments cache), 以提供更快的查询性能。
b. 如果主要的使用场景是聚合或排序, 并且大多数是numerics, dates, geo_points 以及not_analyzed的字符类型, 建议分配给ES Heap分配 4~32G的内存即可,其它内存留给操作系统,供lucene使用(doc values cache),提供快速的基于文档的聚类、排序性能。
c. 如果使用场景是聚合或排序,并且都是基于analyzed 字符数据,这时需要更多的 heap size, 建议机器上运行多ES实例,每个实例保持不超过50%的ES heap设置(但不超过32G,堆内存设置32G以下时,JVM使用对象指标压缩技巧节省空间),50%以上留给lucene。
禁止swap,一旦允许内存与磁盘的交换,会引起致命的性能问题。 通过: 在elasticsearch.yml 中 bootstrap.memory_lock: true, 以保持JVM锁定内存,保证ES的性能。操作系统通过交换(swap)将内存的分页写入磁盘,es在内存中保留了很多运行时必需的数据和缓存,所以消耗磁盘的操作将严重影响正在运行的集群。
关闭es交换最彻底的方法是,在elasticsearch.yml文件中将bootstrap.mlockall设置为true 。
GC设置原则:

  1.  保持GC的现有设置,默认设置为:Concurrent-Mark and Sweep (CMS),别换成G1GC,因为目前G1还有很多BUG。
  2.  保持线程池的现有设置,目前ES的线程池较1.X有了较多优化设置,保持现状即可;默认线程池大小等于CPU核心数。如果一定要改,按公式((CPU核心数* 3)/ 2)+ 1 设置;不能超过CPU核心数的2倍;但是不建议修改默认配置,否则会对CPU造成硬伤。

Temp directory配置
在使用.tar.gz方式部署es服务时,建议指定一个安全的临时文件目录,避免因为默认使用的/tmp下的临时目录被操作系统定期删除,造成服务故障。
通过环境变量 $ES_TMPDIR 来设置。

分片分配的感知
分配感知(allocation awareness)是管理在哪里放置数据的副本。
https://www.elastic.co/guide/en/elasticsearch/reference/7.2/allocation-awareness.html

1. 基于分片的分配
分配感知允许用户使用自定义的参数来配置分片的分配。通过定义一组键,然后在合适的节点上设置这个键,就可以开启分配感知。
elasticsearch.yml

cluster.routing.allocation.awareness.attributes: rack_id


注:支持赋多个值同时用作感知属性,如cluster.routing.allocation.awareness.attributes: rack, group, zone

针对每个es节点,用户可以修改elasticsearch.yml,按期待的网络配置来设置该值。ES允许用户在节点上设置元数据,这些元数据的键将成为我们要使用的分配感知参数。

node.attr.rack_id: rack_one


当有多个es节点可用时,es会尽量把分片与副本均衡到rack_id值不同的节点上去。但如果只剩一个可用的es数据节点了,es也会选择把一个索引的分片和副本全部部署在同一个节点上面。

常见的使用场景是按照地点、机架或是虚拟机等来划分集群的拓扑。

2. 强制性的分配感知
在用户事先规则好分片分组信息,且希望限制每个分组的副本分片数量时,强制分配感知是适用的解决方法。
在这种情况下,即便因为部分分组的数据节点不可用,导致es服务可用性风险,es也不会把索引的分片与副本都部署在相同的分组节点上面。

例如,用户想在区域级别使用强制分配。可以先指定一个zone的属性,然后为该分组添加多个维度。如下所示:

cluster.routing.allocation.awareness.attributes: zone
cluster.routing.allocation.force.zone.values: us-east, us-west


此时,我们在东部地区启用了一批节点,这些节点的配置都是node.attr.zone: us-east ,在创建索引时由于以上限制,副本分片只会被均衡到没有相应zone值的节点上去。

3. 动态设置分片感知
可以通过集群设置API在运行时进行修改,这个修改的效果可以自行选择是持久的,还是临时性的。

curl -XPUT localhost:9200/_cluster/settings -d '{"persistent": {"cluster.routing.allocation.awareness.attributes": zone"cluster.routing.allocation.force.zone.values": us-east, us-west}
}'

分片


分片数量

  • ES7.0版本开始,新建索引时,默认只有一个主分片。优点在于:单个分片,查询算分和聚合不准的问题都可以得到避免;缺点在于:即便增加新的节点,也无法实现水平扩展。
  • 如果有两个主分片,当集群增加节点后,es会自动进行分片移动(Shard Rebalancing),将本分布在一个节点的两个分片平衡为两个节点,每个节点一个分片。
  • 当分片数>节点数时:一旦集群中有新的数据节点加入,分片就可以自动分配;分片在重新分配时,系统也可以正常工作。
  • 多分片的好处:一个索引如果分布在多个节点,查询可以并行,写入可以分散到多个机器。
  • 例1:每天1GB,一个索引,一个主分片,一个副本分片。保留半年,共180*2 = 360G数据 = 360个分片。
  • 例2:五个不同日志,每天一个日志索引,每个日志索引有10个主分片,保留半年,共180*5*10 = 9000个分片。
  • 分片是es实现集群水平扩展的最小单位。
  • 当分片过多时,会导致额外的性能开销:
  • 每次搜索,需要从每个分片获取数据。
  • 分片的Meta信息会变多,增加主节点的负担。

分片建议

  • 日志类应用,单分片不超50GB。
  • 搜索类应用,单分片不超20GB。
  • 为什么要控制:
    • 提高更新时的性能。
    • 分片合并时,减少所需资源。
    • 节点丢失后,具备更快恢复速度(分片小便于在集群内移动)

副本建议

  • 副本是主分片的拷贝,目的是提高系统可用性:可以执行查询,并且避免数据丢失;副本分片需要占用和主分片一样的资源。
  • 副本分片会降低数据的索引(写入)速度:有几份副本就会有几倍的CPU资源消耗。
  • 可以减缓对主分片的查询压力,但是会消耗同样的内存资源;如果机器资源充分,提高副本数可以提高整体的查询QPS。

相关设置

  • Es分片策略会尽量保证节点上的分片数大致相同。可能会产生问题: 扩容时,原有节点磁盘基本写满了,新索引会集中在新加的节点上,导致数据分布不均匀。
  • index.routing.allocation.total_shards_per_node设置为1,可以限制一个索引在单个节点上只能有一个分片(主分片或者副本)

关于elastic中映射的理解,可以查看这篇文章ElasticSearch 6.x 学习笔记:11.映射Mapping-腾讯云开发者社区-腾讯云

参考链接:                       

                        Elasticsearch:分片和集群设计_es 只有一个分片可以吗-CSDN博客

Step by step怎样部署一套生产环境下的elastic stack 7.2技术栈【一】—— 需要掌握的一些elastic重要概念与配置参数_生产环境部署elasticsearch7.2 3台主机 如何分配节点属性-CSDN博客
 

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

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

相关文章

Go Energy 跨平台框架 v2.5.1 发布

Energy 框架 是Go语言基于CEF 和 LCL 开发的跨平台 GUI 框架, 具体丰富的系统原生 UI 控件集, 丰富的 CEF 功能 API,简化且不失功能的 CEF 功能 API 使用。 特性? 特性描述跨平台支持 Windows, macOS, Linux简单Go语言的简单特性,使用简单…

宏转录组+HiFi宏基因组:揭示厌氧消化中的碳流和能量转换

厌氧消化是一种重要的工程生物技术,对有机废物的资源回收和可再生能源的生产起着关键作用。然而,由于对未培养的厌氧菌及其适应环境变化的能力了解有限,这限制了该技术的优化和生物气生产的可持续性。今天小编带大家看一篇发表在《Microbiome…

SpringCloud 运用(2)—— 跨服务调度

上一篇:SpringCloud 入门(1)—— nacos 注册中心-CSDN博客 1.RestTemplate 跨服务请求 RestTemplate 是 Spring 框架中的一个同步客户端,用于与 HTTP 服务进行交互。它简化了与 HTTP 服务器通信的过程,并且提供了对多…

解决Springboot整合Shiro自定义SessionDAO+Redis管理会话,登录后不跳转首页

解决Springboot整合Shiro自定义SessionDAORedis管理会话,登录后不跳转首页 问题发现问题解决 问题发现 在Shiro框架中,SessionDAO的默认实现是MemorySessionDAO。它内部维护了一个ConcurrentMap来保存session数据,即将session数据缓存在内存…

windows nmake 安装openssl

windows nmake 编译和安装 openssl 本文提供了在Windows环境下安装OpenSSL的详细步骤,包括下载Perl、NASM和VisualStudio,配置环境变量,使用PerlConfigure设置平台,通过nmake进行编译、测试和安装。整个过程涉及32位和64位版本的选…

一、Hadoop概述

文章目录 一、Hadoop是什么二、Hadoop发展历史三、Hadoop三大发行版本1. Apache Hadoop2. Cloudera Hadoop3. Hortonworks Hadoop四、Hadoop优势1. 高可靠性2. 高扩展性3. 高效性4. 高容错性五、Hadoop 组成1. Hadoop1.x、2.x、3.x区别2. HDFS 架构概述3. YARN 架构概述4. MapR…

python版本的Selenium的下载及chrome环境搭建和简单使用

针对Python版本的Selenium下载及Chrome环境搭建和使用,以下将详细阐述具体步骤: 一、Python版本的Selenium下载 安装Python环境: 确保系统上已经安装了Python 3.8及以上版本。可以从[Python官方网站]下载并安装最新版本的Python,…

vue---- H5页面 pdf,docx,excel文件预览下载功能

vue---- H5页面 pdf,docx,excel文件预览&&下载功能 pdf,docx,excel文件预览&&下载适用于vue2和vue3,示例为vue3 1.npm下载这些文件的插件(选择自己需要预览的进行下载) 安装pd…

vue3和springboot使用websocket通信

前端端口&#xff1a;9090 后端端口&#xff1a;8080 vue3 引入依赖&#xff1a; npm install sockjs-client stomp/stompjs vue页面 <template><div><h1>WebSocket 示例</h1><button click"sendMessage">发送消息</button>…

【时时三省】(C语言基础)动态内存函数malloc

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 malloc 开辟内存块 使用格式 void *malloc&#xff08;size_t sie&#xff09;&#xff1b; 示例 10*sizeof(int&#xff09;就是开辟空间的大小 如果p是void指针的话 p不能解引用 m…

选煤厂可视化技术助力智能化运营

通过图扑 HT 可视化搭建智慧选煤厂管理平台&#xff0c;优化了选煤生产流程&#xff0c;提高了资源利用率和安全性&#xff0c;助力企业实现智能化运营和可持续发展目标。

【论文笔记】Visual Alignment Pre-training for Sign Language Translation

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Visual Alignment Pre-tra…

深入浅出 MyBatis | CRUD 操作、配置解析

3、CRUD 3.1 namespace namespace 中的包名要和 Dao/Mapper 接口的包名一致&#xff01; 比如将 UserDao 改名为 UserMapper 运行发现抱错&#xff0c;这是因为 UserMapper.xml 中没有同步更改 namespace 成功运行 给出 UserMapper 中的所有接口&#xff0c;接下来一一对…

前端:改变鼠标点击物体的颜色

需求&#xff1a; 需要改变图片中某一物体的颜色&#xff0c;该物体是纯色&#xff1b; 鼠标点击哪个物体&#xff0c;哪个物体的颜色变为指定的颜色&#xff0c;利用canvas实现。 演示案例 代码Demo <!DOCTYPE html> <html lang"en"><head>&l…

递归算法常见问题(Java)

问题&#xff1a;斐波那契数列,第1项和第2项都为1&#xff0c;后面每一项都为相邻的前俩项的和,求第n个数 解法&#xff1a;每一个数都为前俩个数之和&#xff0c;第1项和第2项都为1&#xff0c;所以写 方法f1(n)即为求第n个数&#xff0c;那么f1(n-1)为求第n-1个数&#xff0…

C项目 天天酷跑(下篇)

上篇再博客里面有&#xff0c;接下来我们实现我们剩下要实现的功能 文章目录 碰撞检测 血条的实现 积分计数器 前言 我们现在要继续优化我们的程序才可以使这个程序更加的全面 碰撞的检测 定义全局变量 实现全局变量 void checkHit() {for (int i 0; i < OBSTACLE_C…

论文解读——掌纹生成网络 RPG-Palm升级版PCE-Palm

该文章是2023年论文RPG-Palm的升级版 论文&#xff1a;PCE-Palm: Palm Crease Energy Based Two-Stage Realistic Pseudo-Palmprint Generation 作者&#xff1a;Jin, Jianlong and Shen, Lei and Zhang, Ruixin and Zhao, Chenglong and Jin, Ge and Zhang, Jingyun and Ding,…

oscp学习之路,Kioptix Level2靶场通关教程

oscp学习之路&#xff0c;Kioptix Level2靶场通关教程 靶场下载&#xff1a;Kioptrix Level 2.zip 链接: https://pan.baidu.com/s/1gxVRhrzLW1oI_MhcfWPn0w?pwd1111 提取码: 1111 搭建好靶场之后输入ip a看一下攻击机的IP。 确定好本机IP后&#xff0c;使用nmap扫描网段&…

第二十六周机器学习笔记:PINN求正反解求PDE文献阅读——正问题

第二十六周周报 摘要Abstract文献阅读《Physics-informed neural networks: A deep learning framework for solving forward and inverse problems involving nonlinear partial differential equations》1. 引言2. 问题的设置3.偏微分方程的数据驱动解3.1 连续时间模型3.1.1 …

【安全编码】Web平台如何设计防止重放攻击

我们先来做一道关于防重放的题&#xff0c;答案在文末 防止重放攻击最有效的方法是&#xff08; &#xff09;。 A.对用户密码进行加密存储使用 B.使用一次一密的加密方式 C.强制用户经常修改用户密码 D.强制用户设置复杂度高的密码 如果这道题目自己拿不准&#xff0c;或者…