1、系统设置要到位,遵照官方建议设置所有的系统参数。

https://www.elastic.co/guide/en/elasticsearch/reference/6.7/setup.html

部署Elasticsearch集群之前将操作系统的配置设置好。 之前部署单机版、集群报了很多错误,嗯,就是这里可以解决你的问题,提前看下英文文档,解决这些问题。

https://www.elastic.co/guide/en/elasticsearch/reference/6.7/system-config.html

2、Elasticsearch设置尽量简洁,elasticsearch.yml中尽量只写必备的参数,其他可以通过api动态设置的参数都通过api来设置。随着es的版本升级,很多网络流传的配置参数已经不再支持,因此不要随意复制别人的集群配置参数。

https://www.elastic.co/guide/en/elasticsearch/reference/6.7/important-settings.html

3、elasticsearch.yml中建议设定的基本参数。

  静态设置参数elasticsearch.yml,cluster.name、node.name、node.master/node.data/node.ingest、network.host建议显示指定为内网ip,不要偷懒直接设定为0.0.0.0、discovery.zen.ping.unicast.hosts设定集群其他节点地址。、discovery.zen.minimum_master_nodes一般设定为2、path.data/path.log。除上述参数外再根据需要增加其他的静态配置参数。

 # ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
# Before you set out to tweak and tune the configuration, make sure you
# understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please consult the documentation for further information on configuration options:
# https://www.elastic.co/guide/en/elasticsearch/reference/index.html
#
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
#cluster.name: my-application
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
#node.name: node-
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
#path.data: /path/to/data
#
# Path to log files:
#
#path.logs: /path/to/logs
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
#bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
#network.host: 192.168.0.1 # network.host: 192.168.110.133
network.host: 0.0.0.0 #
# Set a custom port for HTTP:
#
#http.port:
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
#discovery.zen.ping.unicast.hosts: ["host1", "host2"]
# # discovery.zen.ping.unicast.hosts: ["192.168.110.133:5200", "192.168.110.133:5300"] # Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / + ):
#
# discovery.zen.minimum_master_nodes:
# # discovery.zen.minimum_master_nodes: # For more information, consult the zen discovery module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
#gateway.recover_after_nodes:
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true

  动态设置的参数elasticsearch.yml,有transient和persistent两种设置,前者在集群重启后会丢失,后者不会,但两种设定都会覆盖elasticsearch.yml。

 # 动态设置的参数有transient和persistent两种设置
PUT /_cluster/settings
{
"persistent": {
"discovery.zen.minimum_master_nodes":
},
"transient": {
"indices.store.throttle.max_bytes_per_sec": "50mb"
}
}

4、关于JVM内存设定,不要超过31GB,预留一半内存给操作系统,用来做文件缓存。

1)、具体大小根据该node要存储的数据量来估算,为了保证性能,在内存和数据量间有一个建议的比例。
  搜索类项目的比例建议在1:16以内。即1GB内存可以存储16GB数据。
  日志类项目的比例建议在1:48~1:96。即1GB内存可以存储48GB~96GB的数据。
2)、假设总数据量大小为1TB,3个node,1个副本,那么每个node要存储的数据量为2TB/3=666GB,即700GB左右,做20%的预留空间,每个node要存储大约850GB的数据。
  如果是搜索类项目,每个node内存大小为850GB/16=53GB,大于31GB。31*16=496,即每个node最多存储496GB数据,所以需要至少5个node。
  如果是日志类型项目,每个node内存大小为850GB/48=18GB,因此3个节点足够。

5、Elasticsearch写数据过程,写性能优化。refresh、translog、flush概念理解。红色截图来源于慕课网,尊重版权从你我做起。

Elasticsearch写数据,refresh过程理解如下所示:

Elasticsearch写数据,translog过程理解如下所示:

Elasticsearch写数据,flush过程理解如下所示:

Elasticsearch写数据过程,写性能优化。目标是增大写吞吐量-EPS(events Per Second)越高越好。

  优化方案:a、客户端,多线程写,批量写。b、Elasticsearch,在高质量数据建模的前提下,主要是在refresh、translog和flush之间做文章。

Elasticsearch写数据过程,写性能优化。refresh优化。

Elasticsearch写数据过程,写性能优化。translog优化。

Elasticsearch写数据过程,写性能优化。flush优化。

6、读性能主要受以下几个方面的影响。

  a、数据模型是否符合业务模型。数据建模。高质量的数据建模是优化的基础,将需要通过script脚本动态计算的值提前算好作为字段存到文档中。尽量使得数据模型铁近业务模型。
  b、数据规模是否过大。数据规模。根据不同的数据规模设定不同的SLA,上万条数据与上千万条数据性能肯定存在差异。
  c、索引配置是否优化。索引配置调优。索引配置优化主要包括,根据数据规模设置合理的主分片数,可以通过测试得到最适合的分片数。设置合理的副本数目,不是越多越好。
  d、查询语句是否优化。查询语句调优。查询语句调优主要有以下几种常用手段。
    尽量使用Filter上下文,减少算分的场景,由于Filter有缓存机制,可以极大提升查询性能。
    尽量不适用Script进行字段计算或者算分排序等等。
    结合profile、expalin API分析慢查询语句的症结所在,然后再去优化数据模型。

7、X-Pack Monitoring,官方推出的免费集群监控功能。X-Pack Monitoring的安装,部署。

  除了在Elasticsearch安装X-Pack以外,Elasticsearch6.7版本默认安装X-Pack,还要在Kibana安装X-Pack的(嗯,Kibana6.7版本默认安装X-Pack了)。如果没有默认安装的话,安装成功以后,分别重启Elasticsearch、Kibana。

Overview,Search Rate是查询性能,Indexing Rate是写入性能,Search Latency查询延迟,Indexing Latency写入延迟。

Node展示内存,磁盘,Cpu的指标信息。

Indices索引级别查看数据。

X-Pack更多指标自己慢慢学习和查看吧。

待续......

Elasticsearch 6.x版本全文检索学习之集群调优建议的更多相关文章

  1. Elasticsearch 6.x版本全文检索学习之分布式特性介绍

    1.Elasticsearch 6.x版本全文检索学习之分布式特性介绍. 1).Elasticsearch支持集群默认,是一个分布式系统,其好处主要有两个. a.增大系统容量,如内存.磁盘.使得es集 ...

  2. Elasticsearch 6.x版本全文检索学习之Search API

    Elasticsearch 6.x版本全文检索学习之Search API. 1).Search API,实现对es中存储的数据进行查询分析,endpoind为_search,如下所示. 方式一.GET ...

  3. Elasticsearch 6.x版本全文检索学习之倒排索引与分词、Mapping 设置

    Beats,Logstash负责数据收集与处理.相当于ETL(Extract Transform Load).Elasticsearch负责数据存储.查询.分析.Kibana负责数据探索与可视化分析. ...

  4. Elasticsearch集群调优

    系统调优 禁用swap 使用swapoff命令可以暂时关闭swap.永久关闭需要编辑/etc/fstab,注释掉swap设备的挂载项. swapoff -a 如果完全关闭swap不可行,可以试着降低s ...

  5. hadoop集群调优-OS和文件系统部分

    OS and File System 根据Dell(因为我们的硬件采用dell的方案)关于hadoop调优的相关说明,改变几个Linux的默认设置,Hadoop的性能能够增长大概15%. open f ...

  6. hadoop 集群调优实践总结

    调优概述# 几乎在很多场景,MapRdeuce或者说分布式架构,都会在IO受限,硬盘或者网络读取数据遇到瓶颈.处理数据瓶颈CPU受限.大量的硬盘读写数据是海量数据分析常见情况. IO受限例子: 索引 ...

  7. hadoop集群调优-hadoop settings and MapReduce

    Hadoop Settings 由于Hadoop节点的系统配置,一些hadoop的设置可以减少运行系统中的瓶颈.首先,提高Java运行时的堆内存容量,也要和系统中的整体内存容量相关:其次,保持hado ...

  8. Elasticsearch 6.x版本全文检索学习之聚合分析入门

    1.什么是聚合分析? 答:聚合分析,英文为Aggregation,是es除搜索功能外提供的针对es数据做统计分析的功能.特点如下所示: a.功能丰富,提供Bucket.Metric.Pipeline等 ...

  9. Elasticsearch 6.x版本全文检索学习之数据建模

    1.什么是数据建模. 答:数据建模,英文为Data Modeling,为创建数据模型的过程.数据模型Data Mdel,对现实世界进行抽象描述的一种工具和方法,通过抽象的实体及实体之间联系的形式去描述 ...

随机推荐

  1. 《Dotnet9》建站-建站20天感悟

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...

  2. Ansible配置批量推送公钥到被管理端

    01.yum安装ansible(推荐) sudo yum install ansible 02.配置被管理端主机IP清单 [root@ansible_50 ansible]$ cp /etc/ansi ...

  3. [ASP.NET Core 3框架揭秘] 依赖注入[8]:服务实例的生命周期

    生命周期决定了IServiceProvider对象采用怎样的方式提供和释放服务实例.虽然不同版本的依赖注入框架针对服务实例的生命周期管理采用了不同的实现,但总的来说原理还是类似的.在我们提供的依赖注入 ...

  4. Nginx入门教程-简介、安装、反向代理、负载均衡、动静分离使用实例

    场景 Nginx入门简介和反向代理.负载均衡.动静分离理解 https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102790862 Ub ...

  5. Linux下快速手动产生core文件

    原文链接:https://blog.csdn.net/jctian000/article/details/79695006 当我们配置好自动生成core文件的环境后,若不想写导致崩溃的程序验证,那要怎 ...

  6. Pikachu-File Inclusion, Unsafe file download & Unsafe file upload

    Pikachu-File Inclusion, Unsafe file download & Unsafe file upload 文件包含漏洞 File Inclusion(文件包含漏洞)概 ...

  7. scanf和printf格式化输入输出中非常实用的小技巧

    输入输出几乎是每个C程序必须具备的功能,因为有了它们,程序才有了交互性.C提供的输入输出函数除了具有必须的输入输出功能外,还有一些其他实用的小技巧,了解这些小技巧将会为程序带来更友好的用户体验. 一. ...

  8. IT兄弟连 HTML5教程 CSS3属性特效 动画-animation

    CSS3属性中有关于制作动画的三个属性:Transform,Transition,Animation.前面已经介绍过Transform和Transition了,这里我们来学习Animation动画.通 ...

  9. ruby中的多线程和函数的关键字传参

    1.实现ruby中的多线程 # def test1 # n = 1 # if n > 10 # puts "test1结束" # else # while true # sl ...

  10. Angular中innerHTML标签的样式不起作用详解

    1.背景 在最近angular的项目中,需要用到[innerHTML]标签来指定一个div的样式: //HTML部分 <div class="contents" [inner ...