部署计划

node1 xx.xx.xx.xxx

node2 xx.xx.xx.xxx

node3 xxx.xxx.xxx

上面代表3个节点,且配置好/etc/hosts,为了方便最好配置ssh免密,定时同步网络时间等

部署计划(由于学习机器资源有限,使用最精简方式部署)

 

logs

logstash

es

kibana

node1

     

y

node2

y

y

   

node3

   

y

 

 

精简版部署架构图:

 

ELK-部署elasticsearch_部署计划

部署说明:

1、node1上放置测试日志文件

2、node1安装kibana

3、node2安装logstash收集器

4、node3安装es

5、logstash收集log过滤后发送到es

6、kibana负责读取es后展示

 

注:

所有节点统一创建以下两个目录

软件解压放置目录:/opt/soft

软件压缩包放置目录: /opt/zip

 

所有节点安装好jdk8,且配置好环境变量

部署elasticsearch

由部署计划我们知道,es部署在node3节点上。

该文档讲解的ELK基于7.0版本,由于ELK不同版本之间并不兼容,通常官方发版新版本时都会配套发版,强烈建议或要求安装ELK各个组件的版本以以官方配套为准,通常版本号是一致的。

单机版

创建用户组

es官方规定,不能以root账号启动,所以我们需要创建用户和用户组

groupadd lazy

useradd -g lazy lazy

 

将账号加入sudo

为了后面方便借用root权限,将lazy用户加入sudo

vi /etc/sudoers.d/lazy

内容如下:

 

  •  
lazyALL=(ALL) ALL

创建目录

  •  
mkdir -p /opt/soft  /opt/zip

压缩包放置目录:/opt/zip

安装软件目录:/opt/soft

安装JDK8

下载、解压、配置环境变量

具体不演示

下载ES

  •  
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.0-linux-x86_64.tar.gz

解压ES

 

  •  
tar -xvf /opt/zip/elasticsearch-7.0.0-linux-x86_64.tar.gz -C /opt/soft/

修改目录归属

 

  •  
chown -R lazy:lazy /opt/soft/elasticsearch-7.0.0

 

切换账号

  •  
su lazy

启动

 

  •  
/opt/soft/elasticsearch-7.0.0/bin/elasticsearch后台运行:/opt/soft/elasticsearch-7.0.0/bin/elasticsearch -d

访问

  •  
curl -XGET 127.0.0.1:9200/_cat/health?v

没有做任何配置情况下,为开发模式,默认只绑定到环回地址127.0.0.1上,只能通过127.0.0.1访问,外部无法访问。

可以通过配置$ES_HOME/config/elasticsearch.yml文件中的network.host:配置项进行其它网卡的绑定。注意,es发现一旦用户配置了network.host,在下次启动ES时将开启生产模式启动引导检查功能(如文件句柄数量限制,线程数限制等)。

如果你确实只是单节点且需要配置network.host来提供对外访问能力,你可以配置discovery.type为single-node来实现,但是如果你配置了discovery.type为single-node,es将不会开启启动引导检查功能,事实上建议开启es的启动引导的严格检查。当discovery.type配置single-node时,我们可以配置系统属性es.enforce.bootstrap.checks为true来强制启动生产模式检查。

下面给出单机版最终配置:

 

  •  
cluster.name: my-applicationnode.name: node-3bootstrap.memory_lock: falsenetwork.host: node3discovery.seed_hosts: ["node3"]cluster.initial_master_nodes: ["node-3"]

 

注意,上面的单机版配置会进行生产模式检查,启动会报错,关于生产模式检查配置请参考下面的集群部署说明。

 

单机版部署完毕!

集群

除了单机版部署外,这里同时也给出集群部署方式,但是我们本次elk使用单机版部署,因为资源有限。集群部署就要涉及到node1\node2\node3三台节点的配置和安装。

集群版ES配置

node1节点上操作:

vi /opt/soft/elasticsearch-7.0.0/config/elasticsearch.yml

内容如下:

 

  •  
cluster.name: my-applicationnode.name: node-1path.data: /var/es/datapath.logs: /var/es/logsbootstrap.memory_lock: truenetwork.host: node1http.port: 9200discovery.seed_hosts: ["node1", "node1", "node3"]cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]

 

说明:

 

  •  
cluster.name:集群名称,自定义,建议语义化,多个集群时保证唯一path.data和path.logs:数据存储目录,日志目录。需要执行chown -R lazy:lazy /var/es/network.host: 配置ip或0.0.0.0discovery.seed_hosts: 配置集群机器Ip列表。可以在每台机子/etc/hosts文件配置本地dns,方便记忆,比如笔者这里的node1,node2,node3均在/etc/hosts文件配置好了的。cluster.initial_master_nodes:参与主节点节点列表。bootstrap.memory_lock: 将配置的JVM堆内存锁定在内存中,禁止将堆的某个内存页交换到磁盘。注意,如果你的机子内存不够锁定或账号内存锁定权限不足,将启动失败发生这种情况做法有两种:1、配置账号(例如lazy)的锁定内存大小为无限大vi /etc/security/limits.conf末尾追加:lazy             -       memlock  unlimited2、将bootstrap.memory_lock设置为false而不是设置为true,然后在系统层面禁止内存交换,禁止交互可以防止es在垃圾回收时与磁盘反复交互导致卡顿。

修改系统配置

当用户配置了network.host项后,es就会开启生产模式检查,发现任何一项不满足要求,将启动失败。生产模式检查主要包括:

JVM堆大小检查

$ES_HOME/config/jvm.options配置文件配置初始化堆大小-Xms和最大堆大小-Xmx保持一致,默认为1G,生产环境建议适当调大,一般配置为系统内存1/2较为理想。例如:4G服务器可以配置2G堆大小

加大文件数量限制

例如这里的话就需要配置es账号(lazy)文件描述符大小,生产模式要求为65535。配置方式:

vi /etc/security/limits.conf

末尾追加:

  •  
lazy             -       nofile          65535

加大线程数限制

Elasticsearch通过将请求分解为多个阶段并将这些阶段交给不同的线程池执行程序来执行请求。Elasticsearch中的各种任务有不同的线程池执行程序。因此,Elasticsearch需要能够创建大量线程。检查的最大线程数确保Elasticsearch进程有权在正常使用下创建足够的线程,至少需要4096个线程。配置方式:

vi /etc/security/limits.conf

末尾追加:

 

  •  
lazy             -       nproc          4096

禁止内存交互

大多数操作系统尝试使用尽可能多的内存来存储文件系统缓存,并急切地交换掉未使用的应用程序内存。这可能导致部分JVM堆甚至其可执行页面被换出到磁盘。交换对elasticsearch性能,节点稳定性非常不利,应该不惜一切代价避免。配置方式:

vi /etc/fstab

然后注释掉任何有swap单词的行

 

加大虚拟内存

Elasticsearch mmapfs默认使用目录来存储其索引。操作系统默认的mmap计数限制太低,这可能导致内存不足异常。配置方式:

vi /etc/sysctl.conf

末尾追加:

  •  
vm.max_map_count=262144

启动集群

1、将配置好的es通过scp -r命令分发到集群其它节点

2、分别在每个节点创建账号lazy和账号组lazy

3、创建目录/var/es,chown -R lazy:lazy /var/es

4、配置/etc/hosts

5、每个节点修改好系统配置(需要切换到root)

6、关闭防火墙

7、su lazy切换账号,执行下面命令启动:

  •  
/$ES_HOME/bin/elasticsearch -d

7、浏览器访问:

http://node1:9200/_cat/health?v

http://node2:9200/_cat/health?v

http://node3:9200/_cat/health?v

 

ELK-部署elasticsearch_部署计划_02

安装界面插件

elasticsearch可以通过插件方式进行功能或管理上的扩展,例如我们上面看到的通过浏览器对elasticsearch查询API操作很不方便,返沪的结果界面也不太友好。我们下面来安装一个界面友好的支持插件elasticsearch-head。安装步骤如下:

官方安装文档:

https://github.com/mobz/elasticsearch-head

1、安装node环境

 

  •  
cd /opt/zipwget https://nodejs.org/dist/latest-v10.x/node-v10.15.3-linux-x64.tar.gztar -zxvf node-v10.15.3-linux-x64.tar.gz -C ../soft配置NODE_HOME到/etc/profile$NODE_HOME/bin:$NODE_HOME/sbin

 

配置npm加速

  •  
alias cnpm="npm --registry=https://registry.npm.taobao.org

2、安装git bzip2

 

  •  
yum install gityum install -y bzip2

3、下载elastic search-head插件

 

  •  
cd /opt/zipgit clone https://github.com/mobz/elasticsearch-head.gitcd /opt/zip/elasticsearch-headcnpm installnohup npm start &

4、浏览器访问

http://node3:9100/

 

ELK-部署elasticsearch_部署计划_03

5、修改elasticsearch.yml配置

末尾追加如下内容:

 

  •  
http.cors.enabled: truehttp.cors.allow-origin: "*"

 

6、重启elasticsearch

切换lazy账号

 

  •  
ps aux | grep elastic | awk '{print $2}' | xargs  kill -9elasticsearch -d

7、再次访问

可以看到,安装成功,后面我们就可以在这个插件上进行管理elasticsearch

ELK-部署elasticsearch_部署计划_04