热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Elasticsearch简单使用系列安装

2019独角兽企业重金招聘Python工程师标准1.elasticsearch支持的操作系统和JVM版本https:www.elastic.cosupportmatrix2.

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1.elasticsearch支持的操作系统和JVM 版本

https://www.elastic.co/support/matrix

2.下载安装启动elasticsearch

下载地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.2.tar.gz
解压:tar -xzf elasticsearch-5.4.2.tar.gz
启动:$ES_HOME/bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1说明: -d 后台进程-Ecluster.name 集群名字-Enode.name 节点名字-Epath.conf es配置文件,默认elasticsearch.yml-Epath.data 节点上索引/分片的数据文件位置-Epath.logs 日志文件位置-Epath.scripts 脚本文件位置

3.es的配置文件有两个:

1>.elasticsearch.yml 配置es,使用YAML格式,可以使用${}标记引用环境变量,比如:node.name: ${HOSTNAME}network.host: ${ES_NETWORK_HOST}2>.log4j2.properties 配置es日志生成方式,具体参考: http://logging.apache.org/log4j/2.x/manual/configuration.html

4.es的安全配置

使用elasticsearch-keystore工具管理
1>.bin/elasticsearch-keystore create 创建一个和es配置同目录的elasticsearch.keystore文件
2>.bin/elasticsearch-keystore add key 添加一个key字段,tool提示输入值
3>.bin/elasticsearch-keystore list 列出keystore中所有的命令key
4>.bin/elasticsearch-keystore remove key 删除keystore中的命令key

5.es的引导检查或者自举检查

es启动时进行引导检查,包括es配置和系统配置,确保这些配置操作es是安全的.在开发模式下,引导失败会在日志中出现警告;在生产模式下,引导失败,es会重新加在配置启动.
1>.堆大小检查如果jvm的Xms和Xmx不相等,使用系统过程中由于堆大小重置,很容易出现停顿现象,所以需要设置Xms=Xmx;如果bootstrap.memory_lock=true,jvm启动时会锁住堆初始化大小,重置堆后不会出现将所有的jvm堆都锁住.设置:jvm.options-Xms2g-Xmx2g2>.文件描述符文件描述符是Unix用来跟踪打开的文件,在Unix中一切皆文件.es请求许多文件描述符,如分片是由很多分段以及其他文件组成.文件描 述符检查在OS X和Linux上是强制的.3>.内存锁检查检查boostrap.memory_lock启用,jvm成功锁住堆. 当jvm做一个较大的gc时,触发堆的每一页,如果这些页交换到磁盘了,gc完成时会被重新导入内存,这会引起磁盘抖动,es更擅长使用服务请求,避免这种情况可以使用内存堆锁(Unix使用mlockall,windows使用virtual lock),在es中通过启用boostrap.memory_lock使用,特别注意要限制memlock.4>.最大线程数检查es执行的请求被划分为多个阶段,然后推给线程池执行.es有多钟任务所以对应多种线程池执行器,因此要求es有创建许多线程的能力.最大线程数检查确保es正常使用下能正确创建足够的线程.在Linux上该检查是强制的,可以通过系统配置/etc/security/limits.conf文件,使用nproc设置,最少要设置2048个线程.5>.最大虚拟内存检查es和Lucerne使用mmap将索引部分隐射到es的地址空间,可以使得索引数据远离jvm堆而又能快速访问,所以es需要无限制的地址空间.最大虚拟内存检查强制检查es有处理无限的地址空间,并且只有Linux上强制的.在Linux上在/etc/security/limits.conf文件使用as设置无限的地址空间.6>.最大隐射数检查为了使用mmap,es需要创建许多内存隐射区域.最大隐射数检查内核允许处理最少262144内存隐射区域,并且只有Linux是强制的.通过vm.max_map_count=262144.7>.客户端jvm检查OpenJDK有两种jvm驱动:客户端jvm和服务端jvm,它们以不同的编译方式执行字节码.客户端jvm可以获得启动时间和内存占用空间;而服务端jvm可以获得最大性能,两种jvm在性能方面存在巨大差距.客户端jvm检查保证es不会运行在客户端jvm中.现在的系统和操作系统,默认使用服务端vm,另外,es强制设置为服务端vm.8>.使用串行gc回收器检查基于OpenJDK的jvm有几种垃圾回收器,针对不同的工作负载.其中串行垃圾回收器特别适合于单核cpu,非常小的堆内存,但是es不适合这两种场合.假如es使用了串行回收对性能是毁灭性的.因此串行回收器保证es不会运行在串行回收机制下.默认jvm配置是随着es的配置改变的,es使用CMS(Concurrent Low Pause Collector,少停顿的并发回收器)9>.系统调用过滤器检查es对不同的OS安装不同种类的系统调用过滤器.安装系统调用过滤器可以保护执行系统调用分支对抗恶意代码攻击能力.es系统调用过滤器确保是否启用了系统调用过滤器,如果启用了会被成功安装.可以通过bootstrap.system_call_filter=false禁用.10>.错误和OOM检查JVM启用选项OnError和OnOutOfMemoryError,执行任意命令会出现致命错误(OnError)或内存溢出错误,但是es的系统调用过滤器启用时,会阻止这种错误.所以OnError和OOM与系统调用过滤器时互斥的.OnError和OOM检查从es启动时阻止使用jvm选项或者启用系统调用过滤器中的一种.这个检查是强制的.11>.早期访问检查OpenJDK项目提供了早期访问即将发布的快照版本.这些发布版,不适合用于生产环境.早期访问检查检测这些早期访问快照版本.12>.G1 GC检查HotSpot在JDK 8u40以前,如果启用了G1 GC会出现索引损坏.G1 GC检查可以检测这些早期HotSpot JVM版本.

6. 重要的系统配置

理想情况下,es应该运行于单独的服务器,并使用所有可用的资源.因此,生产环境下需要设置以下配置:JVM堆大小禁用交换增加文件描述符确保足够的虚拟内存确保足够的线程注意:如果在开发模式下,上面的任何一个设置没有配置正确,es出现警告并记录到日志,es node 可以启动和运行.如果一配置网络设置比如network.host,es会认为是生产环境,将警告改为异常,阻止node启动,这种安全处理保证不会丢失数据.

6.1 配置系统设置

配置系统设置依赖于使用的es安装包和操作系统.
使用.zip或.tar.gz包,配置可以使用: 临时配置 ulimit 和 永久配置 /etc/security/limits.conf使用RPM或Debian包,大多数配置在系统配置文件中:RPM /etc/sysconfig/elasticsearchDebian /etc/default/elasticsearch使用systemd的系统配置需要在systemd配置文件:/usr/lib/systemd/system/elasticsearch.service例子参考: https://www.elastic.co/guide/en/elasticsearch/reference/current/setting-system-settings.html

6.2 通过jvm.options设置jvm堆大小

默认es告诉jvm使用一个最小和最大都为2G的堆.如果在生产环境下,需要配置堆大小保证es有足够的可用的堆.好的规则如下:
1> 设置堆的最小最大值相等;
2> es可用的堆越多,可以使用的缓存就越多.但是太大的堆会造成垃圾回收停顿变长;
3> Xmx不能超过物理内存的50%,确保有足够的内存留下,缓存内核文件系统;
4> Xmx不要大于jvm压缩对象指针的临界值,准确临界值接近32G;

6.3 禁用交换

大多数操作系统使用尽可能多的内存缓存文件系统,同时交换未使用的应用内存,这种情形在jvm堆或执行堆的ye时引起交换.交换对节点稳定性时非常坏的.会导致几分钟垃圾回收或节点响应缓慢或从集群断开等.在弹性分布式系统中,节点可能被操作系统杀死.有三种方式可以禁用交换:
1> 禁用所有的交换
Linux上临时禁用: swapoff -a;永久禁用: 注释掉/etc/fastab中所有包含swap的行
windows系统禁用: System Properties → Advanced → Performance → Advanced → Virtual memory2> 设置交换参数(swappiness)
Linux系统设置vm.sappiness=1,减少内核的交换,正常情况下不会导致交换,当特殊紧急情况会交换3. 启用bootstrap.memory_lock
在elasticsearch.yml设置bootstrap.memory_lock: true验证是否禁用成功: http://192.168.0.128:9200/_nodes?filter_path=**.mlockall
如果出现了mlockall is false,说明mlockall请求失败,有详细的说明,这时需要检查是否有锁内存的权限.具体操作见:https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration-memory.html

6.3 增加文件描述符

文件描述符只与Linux,macOS有关,windows会被安全忽略.
es使用许多文件描述符或文件处理器.由于运行文件描述符可能导致数据丢失.所以需要增加文件描述符的数为65536或者更高.
对于.zip或.tar.gz包,使用ulimit -n 65536 或者 /etc/security/limits.conf 设置 nofile 65536查看每个节点的max_file_descriptors配置
http://192.168.0.128:9200/_nodes/stats/process?filter_path=**.max_file_descriptors

6.3 确保足够的虚拟内存

OS限制mmap数很低,导致OOM,在Linux上以root身份使用命令: sysctl -w vm.max_map_count=262144RPM和Debian包会自动配置.

6.3 确保足够的线程

临时设置: ulimit -u 2048
永久设置: /etc/security/limits.conf中设置nproc位2048

7 es常用的配置

# ---------------------------------- Cluster -----------------------------------
#集群名字:所有节点共享,默认是elasticsearch
cluster.name: es-cluster# ------------------------------------ Node ------------------------------------#节点名字:es默认使用uuid的前7个字符作为node id,节点名字生成后不能更改.
node.name: ${HOSTNAME}
#是否是master节点
node.master: true
ode.attr.rack: r1# 配置es数据和日志目录,不要使用默认的,因为升级时会被删掉
path:data: ../datalogs: ../logs#path.data可以设置多个目录,这些目录都用来存储数据,相同分片数据存储相同路径
#path:
# data:
# - /mnt/elasticsearch_1
# - /mnt/elasticsearch_2
# - /mnt/elasticsearch_3 # ----------------------------------- Memory -----------------------------------#导出node的健康数据到磁盘
bootstrap.memory_lock: true# ---------------------------------- Network -----------------------------------#节点ip,默认单个节点使用回环地址127.0.0.1或[::1]就足够了;如果是集群,为了通信需要指定ip.
network.host: 192.168.0.128
#rest api端口,可以通过浏览器访问
http.port: 9200
#集群间通信端口号,在同一机器下必须不一样
transport.tcp.port: 9300# --------------------------------- Discovery ----------------------------------#同一个服务器,启动多个node,可以不用配置,es会绑定到回环地址同时扫描9300-9305运行节点
#在不同的服务器上的节点需要指定ip或ip:port或域名
discovery.zen.ping.unicast.hosts: -192.168.0.128:9300-192.168.0.128:9301
# -www.es.com
# -192.168.0.128 #没有指定端口,使用transport.profiles.default.port,失败了使用transport.tcp.port#指定合适的最少master节点数,避免由于网络问题出现脑裂,造成数据丢失,计算公式(master_eligible_nodes / 2) + 1
#如果有3个节点,那么设置为: (3/2) + 1 = 2
discovery.zen.minimum_master_nodes: 1


转:https://my.oschina.net/liuchangng/blog/1069056



推荐阅读
  • 本文探讨了如何在 F# Interactive (FSI) 中通过 AddPrinter 和 AddPrintTransformer 方法自定义类型(尤其是集合类型)的输出格式,提供了详细的指南和示例代码。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文探讨了为何相同的HTTP请求在两台不同操作系统(Windows与Ubuntu)的机器上会分别返回200 OK和429 Too Many Requests的状态码。我们将分析代码、环境差异及可能的影响因素。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • CSS高级技巧:动态高亮当前页面导航
    本文介绍了如何使用CSS实现网站导航栏中当前页面的高亮显示,提升用户体验。通过为每个页面的body元素添加特定ID,并结合导航项的类名,可以轻松实现这一功能。 ... [详细]
  • Python包管理工具pip的使用指南
    本文详细介绍了如何使用pip进行Python包的安装、管理和常见问题的解决方法,特别针对国内用户提供了优化建议。 ... [详细]
  • Python + Pytest 接口自动化测试中 Token 关联登录的实现方法
    本文将深入探讨 Python 和 Pytest 在接口自动化测试中如何实现 Token 关联登录,内容详尽、逻辑清晰,旨在帮助读者掌握这一关键技能。 ... [详细]
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • 配置PHPStudy环境并使用DVWA进行Web安全测试
    本文详细介绍了如何在PHPStudy环境下配置DVWA( Damn Vulnerable Web Application ),并利用该平台进行SQL注入和XSS攻击的练习。通过此过程,读者可以熟悉常见的Web漏洞及其利用方法。 ... [详细]
  • 当unique验证运到图片上传时
    2019独角兽企业重金招聘Python工程师标准model:public$imageFile;publicfunctionrules(){return[[[na ... [详细]
  • 本文探讨了使用Java创建高效且可靠的基准测试的方法,强调了选择合适的工具和理解潜在影响因素的重要性。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • MapReduce原理是怎么剖析的
    这期内容当中小编将会给大家带来有关MapReduce原理是怎么剖析的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 ... [详细]
author-avatar
清晨竹林9_877
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有