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

Elasticsearch安装配置

原文地址:https:www.cpweb.top1176一、介绍  Elasticsearch是一个分布式、高扩展、高实时的全文搜索和数据分析引擎,基于RESTfulweb接口,使




原文地址:https://www.cpweb.top/1176

一、介绍

  Elasticsearch 是一个分布式、高扩展、高实时的全文搜索和数据分析引擎,基于RESTful web接口,使用Java语言开发的,是一款开源软件。
  Elasticsearch、Logstash(数据收集日志解析引擎)和Kibana(分析和可视化平台)一起被设计成一个集成解决方案,称为Elastic Stack(ELK),它能够安全可靠地获取各种类型格式的数据,并且实时地对数据进行搜索、分析和可视化。
  官方文档(7.10):https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html


二、配置文件

相关配置文件


类型描述默认位置
home主目录/usr/share/elasticsearch
bin二进制脚本,包括elasticsearch启动一个节点和elasticsearch-plugin来安装插件等。/usr/share/elasticsearch/bin
conf配置文件,包括主配置文件elasticsearch.yml等。/etc/elasticsearch
conf环境变量,包括堆大小、文件描述符等。/etc/sysconfig/elasticsearch
data节点上分配的每个索引/分片的数据文件的位置,可以保存多个位置。可通过主配置文件的path.data自定义。/var/lib/elasticsearch
jdkJava开发工具包位置,用于运行Elasticsearch,可以通过在Java环境中设置JAVA_HOME环境变量来覆盖 /etc/sysconfig/elasticsearch 中设定的变量。/usr/share/elasticsearch/jdk
logs日志文件位置,可通过主配置文件的path.logs自定义。/var/log/elasticsearch
plugins插件文件位置,每个插件都将包含在一个子目录中。/usr/share/elasticsearch/plugins

其他配置文件:

[root@es01 ~]# rpm -qc elasticsearch
/etc/elasticsearch/elasticsearch.yml # 主配置文件
/etc/elasticsearch/jvm.options # JVM配置文件(主要是内存设置)
/etc/elasticsearch/log4j2.properties # 日志配置文件
/etc/elasticsearch/role_mapping.yml # 索引的规则文件
/etc/elasticsearch/roles.yml # 规则文件
/etc/init.d/elasticsearch # 启动脚本
/etc/sysconfig/elasticsearch # 环境变量,包括堆大小、文件描述符。
/usr/lib/sysctl.d/elasticsearch.conf # 库文件的配置
/usr/lib/systemd/system/elasticsearch.service # systemd管理启动程序


三、安装

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html

(1)安装JAVA环境
需要到官方网站下载,无法在服务器直接wget,还需要登录。
JDK下载地址:https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html
[root@es01 ~]# rpm -vih jdk-8u181-linux-x64.rpm
[root@es01 ~]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
(2)下载安装Elasticsearch
[root@es01 ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.0-x86_64.rpm
[root@es01 ~]# rpm -vih elasticsearch-7.10.0-x86_64.rpm
(3)启动验证
[root@es01 ~]# systemctl start elasticsearch
[root@es01 ~]# netstat -ntlp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 127.0.0.1:9200 :::* LISTEN 8568/java
tcp6 0 0 ::1:9200 :::* LISTEN 8568/java
tcp6 0 0 127.0.0.1:9300 :::* LISTEN 8568/java
tcp6 0 0 ::1:9300 :::* LISTEN 8568/java
[root@es01 ~]# curl 127.0.0.1:9200
{
"name" : "es01",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "RvOKQG-xTjSh5KYT4haRdQ",
"version" : {
"number" : "7.10.0",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "51e9d6f22758d0374a0f3f5c6e8f3a7997850f96",
"build_date" : "2020-11-09T21:30:33.964949Z",
"build_snapshot" : false,
"lucene_version" : "8.7.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}


四、基本配置

  前面安装只是基本安装,都是默认配置,我们还要根据自身情况对Elasticsearch(以下简称ES)进行配置。当然如果是生产环境,就必须考虑更多的事项。

[root@es01 ~]# vim /etc/elasticsearch/elasticsearch.yml
#集群名称(设置集群名称,想要其他节点加入同一个集群必须集群名称相同,单节点可以不配置)
cluster.name: es-cluster
#节点名字(通过此配置项来区分集群中的所有节点)
node.name: es-1
#数据目录
path.data: /data/es/data
#日志目录
path.logs: /data/es/log
#开启内存锁(在CentOS7中支持内存锁并且要修改systemd管理ES的配置文件)
bootstrap.memory_lock: true
#监听地址
network.host: 10.0.0.5
#监听端口
http.port: 9200
#配置集群节点IP
discovery.seed_hosts: ["10.0.0.5"]

修改systemd管理ES的配置文件。

[root@elkstack01 ~]# vim /usr/lib/systemd/system/elasticsearch.service # 添加以下配置
LimitMEMLOCK=infinity
[root@es01 ~]# systemctl daemon-reload

创建目录并授权

[root@es01 ~]# mkdir -p /data/es/{data,log}
[root@es01 ~]# chown -R elasticsearch.elasticsearch /data/es

启动测试

[root@es01 ~]# systemctl restart elasticsearch
[root@es01 ~]# curl 10.0.0.5:9200
{
"name" : "es-1",
"cluster_name" : "es-cluster",
"cluster_uuid" : "mBrkZUAuSfit1JYjrKRwig",
"version" : {
"number" : "7.10.0",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "51e9d6f22758d0374a0f3f5c6e8f3a7997850f96",
"build_date" : "2020-11-09T21:30:33.964949Z",
"build_snapshot" : false,
"lucene_version" : "8.7.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}


五、重要配置详解

  官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html
  Elasticsearch只需很少的配置即可上手,但是在生产环境中使用集群之前,就必须考虑更多的事项。以下只详解以上配置用到的部分,其它请阅读官方文档。


1、集群名字设置

当节点与集群中的所有其它节点共享集群名称时,该节点只能加入此集群,集群默认名称是elasticsearch。

cluster.name: es-cluster


2、节点名字设置

ES使用节点名称作为ES特定实例的可读标识符,当ES启动时,节点名称默认为计算机的主机名。

node.name: es-1

  可以从单个节点上用相同的ES主目录启动多个节点,此设置对于测试ES形成集群的能力很有用,但不建议用于生产环境。


3、内存锁

  为了防止ES堆内存被换出,开启内存锁使用 mlockall 将进程地址空间锁定在RAM中。需要注意的是使用内存锁时,某些平台仍会交换堆外内存,为防止堆外内存交换,请禁用所有交换文件。

bootstrap.memory_lock: true

如果 mlockall 尝试分配的内存超过可用内存,则可能导致JVM或Shell会话退出,如下:

[ 128.909028] Out of memory: Kill process 7545 (java) score 279 or sacrifice child
[ 128.989845] Killed process 7787(controller) total-m:37948kB, anon-rss:8kB, file-rss:600kB, shme m-rss:0kB
[ 121.838354] Out of memory: Kill process 7545(java) score 279 or sacrifice child
[ 121.830373] Killed process 7545(java) total-m:2772612kB, anon-rss:642348kB, file-rss:228532kB, shmem-rss:0kB [ 121.831867] Out of memory: Kill process 7684 (java) score 279 or sacrifice child
[ 121.831883] Killed process 7684 (java) total-um:2772612kB, anon-rss:642736kB, file-rss:228688kB, shmem-rss:8kB

如果出现以下报错

[root@es01 ~]# tailf /data/es/log/es-cluster.log
......
[2020-12-01T11:33:38,875][ERROR][o.e.b.Bootstrap ] [es-1] node validation exception
[2] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
......

  最可能的原因是运行ES的用户无权锁定内存,对于RPM包安装使用systemd管理ES的,可以通过修改systemd管理ES的配置文件解决。

[root@elkstack01 ~]# vim /usr/lib/systemd/system/elasticsearch.service # 添加以下配置
LimitMEMLOCK=infinity
[root@es01 ~]# systemctl daemon-reload


4、网络主机设置

  默认情况下,ES仅绑定到环回地址,例如127.0.0.1和[:: 1],此绑定足以在服务器上运行单节点。要与其它服务器上的节点形成集群,节点需要绑定到非环回地址。

network.host: 10.0.0.5


5、发现和集群形成设置

发现和集群形成设置,主要是两个重要的配置,以便集群中的节点可以彼此发现并选举一个主节点。

(1)discovery.seed_hosts
  不做任何配置,ES将绑定到可用的环回地址,并扫描本地端口9300至9305以连接在同一服务器上运行的其它节点,此行为无需进行任何配置即可提供自动集群体验,可以用于测试ES形成集群的能力。
  如果要与其他主机上的节点形成集群,就需要对此配置进行设置。此配置提供了集群中其它符合主机资格的节点的列表,这些节点可能处于活动状态且可与之联系以传播发现过程。此配置接受YAML序列或群集中所有符合主机资格的节点的地址数组,每个地址可以是IP地址,也可以是通过DNS解析为一个或多个IP地址的主机名。如:

discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
- [0:0:0:0:0:ffff:c0a8:10c]:9301
端口是可选的,默认为9300,可以被覆盖。
如果主机名解析为多个IP地址,则该节点将尝试在所有解析的地址处发现它。
IPv6地址必须放在方括号中。

(2)cluster.initial_master_nodes
  当首次启动ES集群时,集群引导步骤将确定符合主节点资格的节点集中确定,节点集的票数将在第一次选举中进行计数。未配置发现设置,此步骤由节点自身自动执行。
  由于自动引导本质上是不安全的,因此在生产模式下启动新集群时,必须明确列出符合资格的主机,这些节点的票数会在首次选举中进行计数,然后选择票数最多的为主节点,使用“cluster.initial_master_nodes”来设置列表。

cluster.initial_master_nodes:
- es-1
- es-2
- es-3

  此配置通过“node.name”来标识初始主节点,确保 “cluster.initial_master_nodes” 中的值与“node.name”完全匹配。


6、堆大小设置

  默认情况下,ES告诉JVM使用最小和最大的堆大小为1GB。 ES可用的堆越多,它可用于其内部缓存的内存就越多,但可供操作系统用于文件系统缓存的内存就越少。因此根据服务器自身情况设置合理的堆大小是非常重要。
  ES将为JVM分配指定堆大小。通过Xms(最小堆大小)和Xmx(最大堆大小)设置进行设置,这两个设置必须彼此相等。
  这些设置的值取决于服务器上可用的RAM大小。将Xmx和Xms设置为不超过物理RAM的50%, ES会出于JVM堆以外的目的而需要内存,因此为此留出内存空间是很重要。
  例如,ES使用堆外缓冲区来进行网络通信,依靠操作系统的文件系统缓存来访问文件,而JVM本身也需要一些内存。如果观察ES进程使用的内存多于Xmx设置配置的限制,这是正常的。
  我们可以通过jvm.options配置文件(位于/etc/elasticsearch下)来设定堆大小,单位可以是g可以是m。

[root@es01 ~]# vim /etc/elasticsearch/jvm.options
-Xms512m
-Xmx512m


推荐阅读
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
author-avatar
手机用户2502921663
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有