1.了解ES集群拓扑结构

当我们启动Elasticsearch的实例,就会启动至少一个节点。相同集群名的多个节点的连接组成一个集群,

在默认情况下,集群中的每个节点都可以处理Http请求和集群节点的数据传输。

集群中的所有的节点都知道集群中其他所有的节点,可以将客户端请求转发到适当的节点。

默认情况下,节点同时是主节点和数据节点,这适合小集群(3个节点);大于3个节点后,分离主节点和数据节点变得非常重要。

  1. 配置线程池

尽量不要动线程池这个配置,如果要动,建议改为: int(( 核心数 3 )/ 2 )+ 1 。

同时满足:不允许bulk和’indexing’线程池的大小大于CPU内核数。

举例:24核处理器,检索服务器是24核,所以:线程池的大小 =(24*3)/2+1=37,

同时要满足cpu核数为24。37和24取最小值,应该选择24。

默认的队列大小是1000,

现在的问题是:并发请求数据超过了队列最大的大小,导致出错。

可能的解决方案:

1)、增加队列大小;(太大了,可能会导致内存溢出)

2)、增加节点数和副本数。

队列大小:

在elasticsearch.yml中新增如下配置:

    ## Threadpool Settings
### Search pool
thread_pool.search.size: 24
thread_pool.search.queue_size: 2000 #Bulk pool
thread_pool.bulk.size: 24
thread_pool.bulk.queue_size: 1000
# Index pool thread_pool.index.size: 24
thread_pool.index.queue_size: 1000

如果你的批量请求数目高于队列大小,将会出现RemoteTransportException异常。

  1. 配置堆内存

    Elasticsearch 默认安装后设置的堆内存是 1 GB。

    修改 jvm.options配置文件。
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms4g
-Xmx4g

确保堆内存最小值( Xms )与最大值( Xmx )的大小是相同的,防止程序在运行时改变堆内存大小, 这是一个很耗系统资源的过程。

注意:

最大可分配堆内存大小为: 32GB与当前ES宿主机内存二者的最小值。

举例1):ES宿主机内存:128GB,可供分配的堆内存:32GB。(建议31GB)

举例2):ES宿主机内存:32GB,可供分配的堆内存:16GB。

  1. 禁止swapping操作

    elasticsearch.yml 文件中的Memory部分,修改设置如下:
bootstrap.memory_lock : true

核心原因:内存交换 到磁盘对服务器性能来说是 致命 的。

  1. 配置文件描述符数目

    步骤1)设置环境变量。
vim /etc/profile

增加

ulimit -n 65535

用以设定同一时间打开的文件数的最大值为65535。

source /etc/profile 使得命令生效。

步骤2)修改limits.conf配置文件。

/etc/security/limits.conf

增加

* soft nofile 65536
* hard nofile 65536

用来限制打开文件数65535

步骤3)切换到Elasticsearch用户,使用ulimit -a 查看是否修改成功。

# ulimit -a

核心原因: Elasticsearch 在节点和 HTTP 客户端之间进行通信也使用了大量的套接字(注:sockets)。 所有这一切都需要足够的文件描述符。

而: 许多现代的 Linux 发行版本,每个进程默认允许一个微不足道的 1024 文件描述符。这对一个小的 Elasticsearch 节点来说实在是太 低 了,更不用说一个处理数以百计索引的节点。

  1. 修改最大映射数量MMP

    Elasticsearch 对各种文件混合使用了 NioFs( 非阻塞文件系统)和 MMapFs ( 内存映射文件系统)。

请确保你配置的最大映射数量,以便有足够的虚拟内存可用于 mmapped 文件。这可以暂时设置:

sysctl -w vm.max_map_count=262144

或者你可以在 /etc/sysctl.conf 通过修改 vm.max_map_count 永久设置它。

# tail -f /etc/sysctl.conf
vm.max_map_count=262144

Elasticsearch部署清单---前期准备工作的更多相关文章

  1. RMAN 前期准备工作和实例

    理解恢复目录,RMAN可以在没有恢复目录(NOCATALOG)下运行,这个时候备份信息保存在控制文件.保存在控制文件的备份信息是很危险的,如果控制文件的破坏将导致备份信息的丢失与恢复的失败,而且,没有 ...

  2. 使用JDBC对数据库进行查询的前期准备工作,以及简单的JDBC访问MySQL数据库(Mac)

    首先JDBC的前期数据库数据准备: 1,打开链接好MySQL的Workbench软件,新建一个数据库: 2.然后打开数据库对应的代码编辑窗口,建立表和插入数据记录: 3.然后是打开关于javaWeb编 ...

  3. openstack 前期准备工作

    OS 是 centos6.5_X86_64 一.vmware 虚拟机 准备两台机虚拟机即可 二.导入第三方安装源 [root@openstack ~]# rpm -Uvh http://dl.fedo ...

  4. Ubuntu离线安装VSCode(附带前期准备工作)

    跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux 在说正式步骤前先把准备工作做到位: 1.IP设置,这个因为是GUI的,手动设置 ...

  5. ZedBoard前期准备工作

    1. 资源下载 内核:https://github.com/Xilinx/linux-xlnx/releases uboot:https://github.com/Xilinx/u-boot-xlnx ...

  6. vue组件库(一):前期准备工作

    前言 将近期项目内自行开发一个vue组件,做个总结,记录下自己的思维过程~~~ 正文 接到这个任务后,还是要做些准备工作的. 主要内容如下: 1.优化下所在团队前端开发流程 服务器搭建gitlab,采 ...

  7. 鸿蒙的fetch请求加载聚合数据的前期准备工作-手动配置网络权限

    目录: 1.双击打开"config.json"文件 2.找到配置网络访问权限位置1 3.配置内容1 4.默认访问内容是空的 5.添加配置内容2 6.复制需要配置的网络二级URL 7 ...

  8. Android studio中使用asmack的jar包的前期准备工作

    1.下载相应的jar包,官网:http://asmack.freakempire.de/SNAPSHOTS/ 将下载好的jar包拷贝到工程文件的libs文件夹下 2.右击app,然后依次操作 然后点击 ...

  9. linux 编程技术No.1前期准备工作

    原创博文,转载请注明出处. GCC的编译过程分为预处理.生成汇编代码.生成目标代码和链接成可执行文件等4个步骤. 使用vim编写C 文件 : [lining@localhost program]$ v ...

随机推荐

  1. JavaWEB04-Maven&Mybatis

    今日内容 `Maven` Maven `Maven`概念&简介 Maven `Maven`安装配置 Maven `Maven`基本使用 Idea集成 `Idea`集成`Maven` Maven ...

  2. Linux 更改家目录下的目录为英文

    export LANG=en_US xdg-user-dirs-gtk-update

  3. Pytorch分布式训练

    用单机单卡训练模型的时代已经过去,单机多卡已经成为主流配置.如何最大化发挥多卡的作用呢?本文介绍Pytorch中的DistributedDataParallel方法. 1. DataParallel ...

  4. 一种新的UI测试方法:视觉感知测试

    什么是视觉测试 视觉测试(Visual Testing),主要检查软件用户界面(UI)是否正确显示给所有用户.它检查网页上的每个元素的形状.大小和位置是否符合预期,还检查这些元素是否在不同的设备和浏览 ...

  5. 论文阅读 A Data-Driven Graph Generative Model for Temporal Interaction Networks

    13 A Data-Driven Graph Generative Model for Temporal Interaction Networks link:https://scholar.googl ...

  6. Solution -「CF645F」Cowslip Collections

    设 \(f(i)\) 表示大小为 \(k\),\(\gcd\) 为 \(i\) 的方案数.\(F(i)\) 表示大小为 \(k\),\(\gcd\) 为 \(i\) 的倍数的方案数. 不难看出:\(F ...

  7. .NET WebAPI 使用 GroupName 对 Controller 分组呈现 Swagger UI

    在日常开发 webapi 时,我们往往会集成 swagger doc 进行 api 的文档呈现,当api数量比较多的时候就会导致 swagger ui 上的 api 因为数量太多而显得杂乱,今天教大家 ...

  8. 20220724-Java的封装相关

    目录 含义 常见使用方法 个人理解 含义 封装 (encapsulation) 指隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别. 常见使用方法 class Pers ...

  9. 从零开始Blazor Server(2)--整合数据库

    开篇 上一篇文章我们留了个尾巴,没有把freesql整合进去,这篇文章我们来整合. 目前的思路呢,是做一个简单的四不像的RABC,也有用户.角色. 权限三部分. 但是其中每个用户只有一个角色,即用户和 ...

  10. JS 字符串转 GBK 编码超精简实现

    前言 JS 中 GBK 编码转字符串是非常简单的,直接调用 TextDecoder 即可: const gbkBuf = new Uint8Array([196, 227, 186, 195, 49, ...