您的位置 首页 系统运维

ELK Stack (1)——Elasticsearch 6安装与配置教程

一、ELK STACK介绍

ELK Stack最初是Elasticserach、Logstash、Kibana三种工具组合而成的一个栈。ELK可以实现将各种日志进行统一收集、搜索及图形展现。ELK主要应用场景一个是解决开发人员需要频繁查看日志但又没有服务器权限的问题,另一个就是通过Kibana快速在海量日志中过滤和定位故障。

 

二、ELK STACK常用组件

· ElasticSearch:简称ES,是最核心的组件。它是JAVA开发的一套基于Lucene搜索引擎库的全文搜索工具,并且通过RESTful API(一种接口设计规范,让接口更易懂)将Lucene原本的复杂性做了隐藏。ES支持对数据进行分布式、实时分析,并且可以进行搜索补全、关键词高亮、自动纠错、分词搜索等功能。相比使用SQL语句在数据库中进行查询,ES利用倒排索引和分词功能可以快速对数据页进行定位,然后再用正排索引通过数据页进行查找,搜索速度更快,就算是TB、PB级别的数据也可以快速搜索。

· LogStash:负责日志的收集,并且可以输出到指定位置,如Redis、kafka、以及最主要的ElasticSearch中,通常会在所有需要收集日志的服务器上安装Logstash,然后由Logstash agent端发送到Logstash的Server端

· Kibana:负责数据的展示与统计,是一个图形化的管理系统

· beat:轻量级的日志采集端,又分有filebeat、packbeat等多种beat

三、ElasticSearch名词解释

· 索引(index):存放文档的容器,索引类似MySQL中的库或者表的概念,同一类的数据最好放一个索引里

· 分片(shared):Elasticsearch 7以前在创建索引时如果没有指定分片数量(number_of_shards),默认会分为5个分片和一个副本(number_of_replicas),这些分片会依据内部算法划分到不同的节点中去。从ES7以后默认分片数修改为了1个。分片可以带来并行执行的好处,能提高效率。文档数据是根据HASH算法存储到分片,由于算法中涉及到了分片的数量,所以分片创建好以后不可修改,否则HASH值就变了。每一个分片都是一个独立完整的索引,分布在不同的节点上。如果发现有分片没有被分配到节点上,可以看下是否磁盘没有空间。如果节点数>分片数并不能起到优化作用,所以在初期就要规划好分片数

· 副本(Replication):副本的存在是为了提高数据的安全性,保证不会因为某个节点的故障而丢失数据。在head插件或者cerebro插件中查看分片,如果是虚线边框就代表是副本分片,实线边框是主分片。当有节点发生故障时,会从副本中选取一个分片提升为主分片。

· 节点(node):站在用户角度来看并没有主节点概念,每个节点对用户来说都是一样的,都会响应请求,但是对于集群来说,会有一个主节点用于管理节点状态以及决定shard分布方式,还会周期性检查其他节点是否可用并进行修复。各节点是通过集群名称来判断是否属于同一节点。

四、Elasticsearch 6安装部署

1、配置JAVA环境

ElasticSearch默认工作在集群模式下,扩展性很强,并且支持自动发现。所以在实验环境中需要至少2台服务器来搭建,但是为了防止脑裂,建立使用基数台服务器。在部署ElasticSearch前需要先部署JAVA环境,所以第一步是安装JDK,这里偷懒使用yum安装了openjdk,生产环境还是建议用JDK的源码包。

 

yum install java-1.8.0-openjdk.x86_64

 

2、ElasticSearch的下载与配置文件的修改

通过官网www.elastic.co(不是com)进行tar包下载,解压后进入config目录,该目录下除了有一个主配置文件elasticsearch.yml需要配置外,还有一个jvm.options文件用于JVM的调优。jvm.options文件主要是JVM优化相关,关于垃圾回收这块使用默认配置就可以了。主要调整的就是最大内存和最小内存的设置。通常设置为一样大小,具体的值可以设置为系统最大内存的一半或三分之二,但不要超过32G,并且预留一半内存给系统。

为了保证性能,内存和数据量有一个建议比例,搜索类项目建议比例为1G内存:16G数据,日志类项目为1G:48~96G。假设存放1T数据,有3个节点,1个副本,那么每个节点存储的数据就是2T/3≈700G左右,然后预留100G空间,每个节点就需要存放800G数据,再按照这个比例就可以算出推荐内存了。

-Xms1g  #程序启动时占用内存的大小
-Xmx1g  #程序启动后最大可占用内存的大小

3、修改ElasticSearch主配置文件elasticsearch.yml

vi /usr/local/elasticsearch-6.7.1/config/elasticsearch.yml
cluster.name: test_es  #集群名称,相同集群名称的节点会自动加入到该集群
node.name: node-1_9 #节点名称,这里1_9代表IP最后2段位1.9
path.data: /data/es/data #节点数据存储路径
path.logs: /data/es/logs #节点日志存储路径
node.master: true  #配置节点是否能成为master。默认所有节点都是true,建议只一台配置true,其他为False
node.data: true  #配置该节点是否能存储数据,默认为true,推荐把主节点设置为false
network.host: 10.4.1.9 #修改为节点IP,建议配置为内网地址,一定不能配置0.0.0.0,会导致信息泄露
http.port: 9200 #ES端口
discovery.zen.ping.unicast.hosts: ["10.4.1.9", "10.4.1.27", "10.4.1.31"] #master节点列表。
discovery.zen.minimum_master_nodes:2 #配置主节点数量的最少值,少于该值的话ES集群不可用,为避免脑裂,通常配置为节点数量/2+1,比如使用了三台节点,那么配置应该为2
bootstrap.system_call_filter: false  #关闭自检程序
bootstrap.memory_lock: false

 

4、启动Elasticsearch

在bin目录下有一个elasticsearch脚本,加上-d选项可以让服务在系统后台启动。服务启动后默认监听在9200端口,还有个9300端口用于集群间通信。如果需要重启ES的话可以使用jps显示 一下ES的PID,然后kill掉再启动,比直接用ps去查PID要方便一点。另外还有一个elasticsearch-plugin脚本用于插件管理

/usr/local/elasticsearch-6.7.1/bin/elasticsearch -d
/usr/local/elasticsearch-6.7.1/bin/elasticsearch-plugin list  #查看插件

五、Elasticsearch常见错误解决(如果配置文件中监听的端口是非回环地址127.0.0.1(建议把监听地址配置在内网网卡上,数据更安全),在运行Elasticsearch时会遇到一些内核报错,具体报错和解决方法如下(做好配置后,需要注销用户重新登录才会生效)

· don’t run elasticsearch as root

解决办法:Elasticsearch是不允许使用root用户来运行的,所以需要把ElasticSearch目录所有者修改为其他用户,并切换到该用户去执行。用浏览器打开能看到如下信息代表安装成功:

  • Java HotSpot(TM) 64-Bit Server VM warning:INFO: os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error=’Cannot allocate memory’ (errno=12):

解决办法:内存不足,升级内存

  • Exception in thread “main” java.nio.file.AccessDeniedException

解决办法:运行Elasticsearch程序的用户权限不够,把Elasticsearch目录权限修改下即可

  • max virtual memory areas vm.max_map_count [65530] is too low
    解决办法:修改/etc/sysctl.conf,增加一行vm.max_map_count= 262144。然后执行sysctl -p使其生效
  • max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
    解决办法:修改/etc/security/limits.conf,做以下配置

*                soft   nproc          65536
*                hard   nproc          65536
*                soft   nofile         65536
*                hard   nofile         65536

  • max number of threads [3812] for user [elkuser] is too low, increase to at least [4096]

解决办法:修改/etc/security/limits.d/20-nproc.conf,做以下配置

*          soft    nproc     4096
*          hard    nproc     4096

热门文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注