zoukankan      html  css  js  c++  java
  • 配置三台服务器组成的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/

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

  • 相关阅读:
    How to use django with mod_wsgi ¶
    How to install Apache2 (CentOS 5.4)
    Review Board
    代理
    你的第一个Javascript服务器端程序(一)
    程序员的十层楼(6~7层)
    用你自己的插件扩展jQuery(Extend jQuery with Your Very Own Plugin)
    程序员的十层楼(1~5层)
    C#到Java byte类型冲突的解决
    Hadoop出现allocate memory错误的解决
  • 原文地址:https://www.cnblogs.com/JasonMa1980/p/7222020.html
Copyright © 2011-2022 走看看