配置三台服务器组成的ELK集群(一)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 这个ELK集群的搭建是在6月份做完,从单机尝试到完成集群配置,前后持续了一周时间、每天抽1~2小时完成的。完成后也写了个简单的文档存在本地了,一直没时间更新到博客园。大名鼎鼎的ELK日志分析系统可以说是十分适合企业使用的开源工具,但是搭建这个给测试团队用的契机并不是因为ELK的功能,反而是每次要看日志里的错误信息,都要去求运维大爷们、看他们脸色行事——那算了还是我们自己来吧。

这个ELK集群的搭建是在6月份做完,从单机尝试到完成集群配置,前后持续了一周时间、每天抽1~2小时完成的。完成后也写了个简单的文档存在本地了,一直没时间更新到博客园。

大名鼎鼎的ELK日志分析系统可以说是十分适合企业使用的开源工具,但是搭建这个给测试团队用的契机并不是因为ELK的功能,反而是每次要看日志里的错误信息,都要去求运维大爷们、看他们脸色行事——那算了还是我们自己来吧。

一、ELK的简介

这里就直接搬运了:

ELK由Elasticsearch、Logstash和Kibana三部分组件组成;

 - Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

 - Logstash是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用。

 - Kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

本案使用了FileBeats作为日志文件收集的代理,Logstash只作为服务端使用。而且FileBeats部署极为方便,5分钟完成部署、修改配置,推荐用它。

最终使用的组件列表:

 - JDK 1.8_131 x64

 - ElasticSearch 5.4.0

 - ElasticSearch-head

 - ElasticHD

 - Logstash

 - Kibana

三台服务器:

10.113.130.116:安装ElasticSearch、ElasticSearch-head、ElasticHD

10.113.130.117:安装ElasticSearch、Logstash

10.113.130.118:安装ElasticSearch、Kibana

搭建完成后,通过10.113.130.116的地址和端口访问。

 

二、安装JDK

下载JDK 1.8.0.tar.gz文件,解压:

# mkdir /usr/local/jdk
# tar -xvf jdk-8u131-linux-x64.tar.gz -C /usr/local/jdk/

配置环境变量:

# vim /etc/profile

#增加以下配置:
#java
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_131
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

执行以下语句,使环境变量生效;避免重启系统:

# source /etc/profile

验证Java安装成功:

# java -version

java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

 

三、安装ElasticSearch

首先说一下,并不是不能用Yum命令来安装,其实用Yum安装的好处在于可以用Service的方式启动、停止ES的运行,比较简单。

但是坏处是Yum安装的文件结构太松散,想改配置文件都不知道存在哪里。各位请看下图:

如果各位能忍受以上的目录结构的话,建议还是用Yum安装,步骤如下:

1)导入Elasticsearch PGP Key:

# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

2)生成repo文件:

# vim /etc/yum.repos.d/elasticsearch.repo

[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

3)执行安装命令 

安装好Elasticsearch 的repo后,就可以通过yum命令安装Elasticsearch了:

# yum install -y elasticsearch

4)添加成启动服务

# chkconfig --add elasticsearch

修改配置文件的过程,将在后面有具体介绍。这里单独说一下,Yum安装后注意查看一下【/etc/sysconfig/elasticsearch】文件中Java path部分的设置,默认为空,是无法启动的,需要填写JAVA_HOME的内容:

# vim /etc/sysconfig/elasticsearch

# Elasticsearch home directory
ES_HOME=/usr/share/elasticsearch

# Elasticsearch Java path
JAVA_HOME=/usr/local/jdk/jdk1.8.0_131

 

建议通过解压tar包的方式完成部署,配置文件更集中、更可控。使用压缩包安装Elasticsearch:

下载elasticsearch-5.4.0.tar.gz,上传到/root目录;解压到/opt目录:

# tar -zxvf elasticsearch-5.4.0.tar.gz -C /opt/
...(略)
# mv /opt/elasticsearch-5.4.0/ /opt/elasticsearch/

使用压缩包安装,需要我们手动创建数据文件、日志文件的二个文件夹:

# mkdir /var/data/elasticsearch
# mkdir /var/log/elasticsearch

通过10.113.130.116上的配置来做讲解,另外2台的配置基本一样,只需要修改node.name字段的内容:

# vim /opt/elasticsearch/config/elasticsearch.yml

# Use a descriptive name for your cluster:
cluster.name: ES-Cluster-5.4.0

# Use a descriptive name for the node:
node.name: node-116

# Path to directory where to store the data (separate multiple locations by comma):
path.data: /var/data/elasticsearch

# Path to log files:
path.logs: /var/log/elasticsearch

# Lock the memory on startup:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false

# Set the bind address to a specific IP (IPv4 or IPv6):
network.host: 0.0.0.0

# Set a custom port for HTTP:
http.port: 9200

# 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: ["10.113.130.116", "10.113.130.117", "10.113.130.118"]

# Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1):
discovery.zen.minimum_master_nodes: 3

完成配置文件的修改后,复制到另外2台服务器上,确保配置文件除了node.name字段以外的内容一致。

修改完设置以后,启动ElasticSearch:

# /opt/elasticsearch/bin/elasticsearch

 

好了,一般按照上面的步骤,操作到这一步就该出现报错信息了。别紧张,以下是解决错误:

1、错误提示:can not run elasticsearch as root

ES不能通过Root用户执行,需要我们创建一个单独的用户用来运行ElasticSearch。

先创建elasticsearch用户组及elasticsearch用户:

# groupadd elasticsearch
# useradd elasticsearch -g elasticsearch -p elasticsearch

然后更改elasticsearch文件夹及内部文件的所属用户及组为elsearch:elsearch:

# cd /opt
# chown -R elasticsearch:elasticsearch elasticsearch

别忘了修改data和log目录的所属用户:

# chown -R elasticsearch:elasticsearch /var/data/elasticsearch
# chown -R elasticsearch:elasticsearch /var/log/elasticsearch

再接下来,有两种处理方式:

a)切换到elasticsearch用户再启动elasticsearch:

# su elasticsearch
$ cd elasticsearch/bin 

#elasticsearch后端启动命令:
$ ./elasticsearch -d

b)不想切换root用户,可以编写如下启动脚本:

# vim es-start.sh

#添加如下内容:
su - elasticsearch -c "nohup /opt/elasticsearch/bin/elasticsearch > /dev/null 2>&1 &"

增加执行权限:

# chmod +x es-start.sh
# mv es-start.sh /usr/local/bin/

于是可以随意启动elasticsearch。像我这么懒的人,当然愿意选择第二种方法。

 

2、错误提示:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

# vim /etc/sysctl.conf

#添加下面配置:
vm.max_map_count=655360

 并执行命令、使修改生效:

# sysctl -p

 

3、错误提示:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

# vim /etc/security/limits.conf
#在文件末尾,添加如下内容: * soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * hard nproc 4096 # vim /etc/pam.d/common-session #添加: session required pam_limits.so # vim /etc/pam.d/common-session-noninteractive #添加: session required pam_limits.so

退出SHH的Session 重新登录;

切换到elsearch用户再启动elasticsearch:

# su elsearch

$ cd /opt/elasticsearch/bin
$ ./elasticsearch -d 

通过tail日志文件,观察运行状态:

# tail -f /opt/elasticsearch/logs/ES-Cluster-5.4.0.log
#备注:日志文件名,与设定的集群名相同

请确保在三台机器上都完成ElasticSearch的安装,再继续执行后面的操作。 

 

四、安装ElasticSearch-Head插件

严格来说,ElasticSearch-Head已经不是ES的插件了,保存到/elasticsearch/plugins/目录下是无法运行的;现在的ES-Head是一个单独运行的组件,推荐保存在/opt/目录下,和ES的根目录平级。

ES-Head只安装在10.113.130.116上。首先,需要安装nodejs和npm:

# wget https://npm.taobao.org/mirrors/node/v8.1.0/node-v8.1.0-linux-x64.tar.gz
# tar --strip-components 1 -xzvf node-v* -C /usr/local

# node --version
提示:v8.1.0

# npm -v
提示:5.0.3,安装成功

安装使用Grunt NPM:

# npm install -g grunt-cli
# npm install -g grunt

#安装成功后,请确保Grunt已安装成功,并检查版本。
# grunt -version
grunt-cli v1.2.0
grunt v1.0.1

安装ES-Head: 

# mv elasticsearch-head /opt/
# cd /opt/elasticsearch-head

# npm install

修改elasticsearch-head配置文件:

# vim _site/app.js

#找到:this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";
#修改为本机的IP地址:
"http://10.113.130.116:9200";

修改elasticsearch配置文件,否则head启动以后无法连接到es集群

# vim /opt/elasticsearch/config/elasticsearch.yml

#增加如下内容:
http.cors.enabled: true
http.cors.allow-origin: “*”

编写一个ES-Head的启动脚本,与ElasticSearch的启动脚本类似:

# vim es-head-start.sh

#输入下面的2行指令;不要试图合并在一行,我试过的、没成功:
cd /opt/elasticsearch-head
npm run start &

# chmod +x es-head-start.sh
# mv es-head-start.sh /usr/local/bin

杀掉ES的进程、重启ES、再启动ES-Head:

到浏览器,输入服务器的IP和端口:http://10.113.130.116:9100/

刚发现,如果整片写在一个博文的话,篇幅太长了,安装其他的组件的步骤,写在下一篇随笔里吧。觉得有帮助的话,给个赞吧。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1天前
|
存储 编解码 安全
阿里云服务器2核4G、4核8G、8核16G配置租用收费标准与活动价格参考
通常情况下,个人和一般企业用户在购买阿里云服务器时比较喜欢购买2核4G、4核8G、8核16G等配置,这些配置既能满足各种图文类中小型网站和应用又能满足企业网站应用、批量计算、中小型数据库系统等场景,2核4G配置适合新手入门或初创企业,4核8G与8核16G兼具成本与性能优势,适合通用场景,本文介绍这些配置的最新购买价格,包含原价收费标准和最新活动价格。
|
20天前
|
JSON JavaScript 前端开发
《进阶篇第6章:vue中的ajax》包括回顾发送ajax请求方式、vue-cli脚手架配置代理服务器、vue-resource
《进阶篇第6章:vue中的ajax》包括回顾发送ajax请求方式、vue-cli脚手架配置代理服务器、vue-resource
55 22
|
6天前
|
PHP 数据库 数据安全/隐私保护
布谷直播源码部署服务器关于数据库配置的详细说明
布谷直播系统源码搭建部署时数据库配置明细!
|
15天前
|
NoSQL Linux PHP
|
20天前
|
JavaScript 前端开发 Java
vue2知识点:vue-cli脚手架配置代理服务器
vue2知识点:vue-cli脚手架配置代理服务器
48 7
|
20天前
|
前端开发 JavaScript Java
第6章:Vue中的ajax(包含:回顾发送ajax请求方式、vue-cli脚手架配置代理服务器)
第6章:Vue中的ajax(包含:回顾发送ajax请求方式、vue-cli脚手架配置代理服务器)
47 4
|
22天前
|
弹性计算 应用服务中间件 网络安全
ECS服务器使用:SSL证书安装、配置和问题定位指南
本文简要介绍了SSL证书的生成与部署方法,包括使用OpenSSL生成自签名证书和从CA获取证书的步骤,以及在Apache和Nginx服务器上的配置方法。此外,还提供了测试证书是否生效的方法和常见问题的解决策略,帮助确保证书正确安装并解决调试过程中可能遇到的问题。
112 0
|
2月前
|
存储 消息中间件 网络协议
日志平台-ELK实操系列(一)
日志平台-ELK实操系列(一)
|
6天前
|
存储 监控 安全
|
3月前
|
消息中间件 Kafka 开发工具
rsyslog+ELK收集Cisco日志
rsyslog+ELK收集Cisco日志