ELK之路第一步——Elasticsearch集群的搭建以及踩坑记录

elasticSearch集群

  • 前言
  • 一、架构
  • 二、下载
  • 三、虚拟机相关设置
    • 3.1 创建es用户
    • 3.2 为建es用户赋权sudo
    • 3.3 更换es目录所属用户
  • 四、Elasticsearch配置文件修改
    • 4.1 修改elasticsearch.yml
    • 4.2 修改jvm.options
    • 4.3 修改jdk路径
  • 五、启动
  • 六、启动报错
  • 七、设置密码
  • 八、可视化界面cerebro

前言

Elk(Elasticsearch, Logstash, Kibana),一套分布式日志收集、存储和展示方案。
本来满怀信心开始学习这个系列,但是发现它并没有那么简单,所以打算从地基开始,一步步盖楼,从而达到目的,本文是ELK系列的第一篇。因为jdk版本的原因,本文Elasticsearch版本为:7.3.0,需要jdk11

一、架构

我打算用三台虚拟机来实现集群,一台master,两台数据节点。IP和Node名字分别为:
172.16.72.130 node-1
172.16.72.133 node-2
172.16.72.134 node-3

PS:接下来的操作,三台虚拟机操作都是一样的,我拿一台举例,其他两台照着做就行

二、下载

选择一个位置下载,我这里创建的是/usr/local/es目录

  • 去官网下载:https://www.elastic.co/cn/downloads/past-releases#elasticsearch,需要梯子,而且速度有点慢
  • 第二个就是选择国内镜像,我这里选华为的
wget https://mirrors.huaweicloud.com/elasticsearch/7.3.0/elasticsearch-7.3.0-linux-x86_64.tar.gz
wget https://mirrors.huaweicloud.com/elasticsearch/7.3.0/elasticsearch-7.3.0-linux-x86_64.tar.gz.sha512

解压

tar -zxvf elasticsearch-7.3.0-linux-x86_64.tar.gz

三、虚拟机相关设置

3.1 创建es用户

elasticSearch不允许使用root用户启动,不然会报错

用root用户执行:

//创建es用户
useradd es
//为es用户设置密码,这很重要
passwd es es

3.2 为建es用户赋权sudo

如果没有sudo命令的,安装:yum install sudo -y
root用户执行

vim etc/sudoers

打开是这样的,我截取了部分,找到root ALL=(ALL) ALL这一行,跟在它下面 复制一行,添加
es ALL=(ALL) ALL,其中es就是我们3.1新建的用户名。

## Next comes the main part: which users can run what software on 
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALL
es    ALL=(ALL)     ALL

3.3 更换es目录所属用户

cd到解压目录

/usr/local/es/elasticsearch-7.3.0

递归更改elasticsearch-7.3.0下所有文件所属为es

chown -R es /usr/local/es/elasticsearch-7.3.0

在这里插入图片描述

四、Elasticsearch配置文件修改

本小节所有操作都用root用户,当然也可以切换到es,但是这样每个操作都要加sudo非常麻烦,我们启动的时候再切换用户就好。

4.1 修改elasticsearch.yml

进入config目录,先备份以前的

cp elasticsearch.yml elasticsearch.yml.bak

编辑

vim elasticsearch.yml

因为我们是三台集群,为了方便,我就把三台机器的配置全部放在这一起了,大家后面分开复制各自的就行了。
重点讲一下:http.port是你访问网页的时候的端口,transport.tcp.port是节点通信间的端口,如果你在一台机器上部署两个节点,记得端口不能一样,下面discovery.seed_hosts也要用节点通信端口。

# node-1
cluster.name: elk-cluster
node.name: node-1
node.master: true
node.data: false
node.ingest: false
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["172.16.72.130:9300","172.16.72.133:9300","172.16.72.134:9300"]
cluster.initial_master_nodes: ["node-1"]#node-2
cluster.name: elk-cluster
node.name: node-2
node.master: true
node.data: true
node.ingest: false
network.host: 0.0.0.0
##节点间通信端口
http.port: 9300
transport.tcp.port: 
discovery.seed_hosts: ["172.16.72.130:9300","172.16.72.133:9300","172.16.72.134:9300"]#node-3
cluster.name: elk-cluster
node.name: node-3
node.master: true
node.data: true
node.ingest: false
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["172.16.72.130:9300","172.16.72.133:9300","172.16.72.134:9300"]

4.2 修改jvm.options

  1. 修改启动内存:

    vim jvm.options
    

    这里主要修改启动内存,默认是4g,我这里改成256m,这个根据你自己服务器硬件来定
    -Xms256m
    -Xmx256m

  2. 修改gc,在GC configuration这一行下面
    修改为G1GC,因为我用的jdk11。

    -XX:+UseG1GC
    

    不修改会报错:
    OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.

4.3 修改jdk路径

Elasticsearch是自带jdk的,但是大多数,我们的开发环境中已经有了jdk,我们cd到bin目录下

vim elasticsearch-env

来看看这个是怎么判断es是怎么判定自带的jdk和我们自己的jdk的

# now set the classpath
ES_CLASSPATH="$ES_HOME/lib/*"# now set the path to java
if [ ! -z "$JAVA_HOME" ]; thenJAVA="$JAVA_HOME/bin/java"
elseif [ "$(uname -s)" = "Darwin" ]; then# OSX has a different structureJAVA="$ES_HOME/jdk/Contents/Home/bin/java"elseJAVA="$ES_HOME/jdk/bin/java"fi
fi

通过脚本得知,es会先去找我们系统的jdk,如果没找到,就会用自己的jdk路径,也就是$ES_HOME下面的
修改为:

 if [ "$(uname -s)" = "Darwin" ]; then# macOS has a different structureJAVA="$ES_HOME/jdk.app/Contents/Home/bin/java"elseJAVA="$ES_HOME/jdk/bin/java"fiJAVA_TYPE="bundled jdk"

如果上面办法不行,用下面这个办法,修改bin下的elasticsearch文件,在第二行位置添加如下内容:
JAVA_HOME就是你jdk的位置。

export JAVA_HOME=/***
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar

五、启动

1.切换用户

su es

2.开放端口

# 放行9200端口和9300端口,不放行9300端口,节点间无法通信,集群还是搭建不起来
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --zone=public --add-port=9300/tcp --permanent
# 重新加载防火墙
firewall-cmd --reload

2.cd到bin目录下,后台启动

./elasticsearch -d

3.浏览器访问
http://172.16.72.130:9200/
我访问了两个,可以看到集群已经搭建好了
在这里插入图片描述
在这里插入图片描述

六、启动报错

  1. No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender
    你没有切换用户,用root启动的,然后切换到es再启动就会报错,因为用root启动将文件的所属权变了,你需要重新执行chown来更改为es
  2. max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    echo "vm.max_map_count=262144" > /etc/sysctl.conf
    sysctl -p
    
  3. max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
    sudo vim /etc/security/limits.conf
    # 加入以下内容
    * soft nofile 300000
    * hard nofile 300000
    * soft nproc 102400
    * soft memlock unlimited
    * hard memlock unlimited
    
  4. Caused by: java.lang.RuntimeException: can not run elasticsearch as root
    你用root用户启动了,切换为es,执行 su es
  5. ElasticSearch–warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME
    或者
    warning: ignoring JAVA_HOME=C:\Program Files\Java\jdk1.8.0_191; using bundled JDK
    4.3节提到的,es自带jdk和本身jdk冲突的问题,解决了就不会报错了
  6. 一些权限问题
    记得用chown切换用户,如果还是不行 用chmod 755 来赋权,特别是日志问价你的读写权
  7. with the same id but is a different node instance];
    这是你用一台机器搭建两个节点的时候,copy包的时候导致重复了,建议保留一个节点的目录,另一个重新解压

七、设置密码

  1. 停止已经启动的es,编辑配置文件elasticsearch.yml,加入以下配置

    http.cors.allow-headers: Authorization
    xpack.security.enabled: true
    xpack.security.transport.ssl.enabled: true
    
  2. 生成证书
    由于我们是集群配置,不是单机,所以要复杂一点,节点间的通信需要证书,常用的是p12证书,如果你是集群状态用单节点的设置密码方式,会设置失败并且报错,这点请切记

    bin/elasticsearch-certutil ca
    bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
    

    第一行命令,需要我们输入一个密码,这个密码请牢记
    第二行命令执行的时候,这里有一个坑,我们输入上一步生成的CA证书密码,然后坑在第二步2,如果我们这里输入了密码,就可以跳转到第三点看怎么解决坑了,如果没有设置直接回车跳过,那就没事。

    Enter password for CA (elastic-stack-ca.p12) : # 输入上一步生成的CA证书的密码,回车
    Please enter the desired output file [elastic-certificates.p12]: # p12文件名使用默认就可以,直接回车
    Enter password for elastic-certificates.p12 :  # 此处让输入一个p12文件密码,可以留空 此处有坑,切记 
    
  3. 上一步如果设置了密码,还需要执行下面的命令,这里坑反正我帮你们踩了

    elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
    elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
    

    这点很关键,如果没有这两行命令,es都启动不了。

  4. copy证书
    我项目三台集群,我在主节点生成了证书,会在我们的目录下面出现一个叫elastic-certificates.p12的文件,大家把这个文件分别copy到其他节点下面的config目录下,这个目录你随意,到config只是方便修改配置文件

  5. 修改配置文件
    打开config目录下的elasticsearch.yml,添加如下几行
    通过名字我们就能看出,这是transport之间的ssl安全设置,也就是节点间通讯验证,这个path,因为我们把证书放在了config目录下面,和elasticsearch.yml平级,所以不需要给定额外目录。

    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
    xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
    
  6. 设置密码
    上面证书都弄好后,我们才可以执行下面的语句生成密码

    bin/elasticsearch-setup-passwords interactive
    

    因为需要设置 elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user 这些用户的密码,然后就会出现下面一堆东西,依次设置就行:

    [es@docker bin]$ ./elasticsearch-setup-passwords interactive
    Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
    You will be prompted to enter passwords as the process progresses.
    Please confirm that you would like to continue [y/N]yEnter password for [elastic]: 
    Reenter password for [elastic]: 
    Enter password for [apm_system]: 
    Reenter password for [apm_system]: 
    Enter password for [kibana]: 
    Reenter password for [kibana]: 
    Enter password for [logstash_system]: 
    Reenter password for [logstash_system]: 
    Enter password for [beats_system]: 
    Reenter password for [beats_system]: 
    Enter password for [remote_monitoring_user]: 
    Reenter password for [remote_monitoring_user]: 
    Changed password for user [apm_system]
    Changed password for user [kibana]
    Changed password for user [logstash_system]
    Changed password for user [beats_system]
    Changed password for user [remote_monitoring_user]
    Changed password for user [elastic]
    

    后面打印出一串Changed password的时候,就说明设置成功了。

  7. 浏览器重新访问,就会有密码弹窗了,用户名是默认的elastic,密码就输入我们第六步设置的密码就可以登录了。
    这个密码主节点设置一次,所有集群节点通用哈,就不需要在集群其他节点设置了,只要上面证书拷贝了就行。

在这里插入图片描述

八、可视化界面cerebro

es的集群肯定需要一个可视化界面来管控,我这里用的是cerebro,当然你也可以用Elasticsearch-head,不过Elasticsearch-head太老了,界面又难看,这个你随意。

  1. 进入GitHub官网:https://github.com/lmenezes/cerebro/releases,选择最新版本的v0.9.4,cerebro也好久没更新了,不过能用就行。
  2. 解压后启动
    端口和ip改成自己的,默认端口是9000,记得去防火墙开放端口
bin/cerebro -Dhttp.port=1234 -Dhttp.address=192.168.182.110
  1. 浏览器访问
    http://192.168.182.110:1234/
  2. 连接我们的主节点,就是上面部署的node1节点。
    在这里插入图片描述

可以看到我们三个节点都是OK了的
在这里插入图片描述

后面本人还要深入研究Elasticsearch,可能会对本文做内容的补充,也会单独开一篇文章讲Elasticsearch的使用,大家多多关注哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/58359.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu22.04环境搭建MQTT服务器

官网: https://mosquitto.org 1.引入库 sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa2.升级安装工具 sudo apt-get update 3.安装 sudo apt-get install mosquitto 4.安装客户端 sudo apt-get install mosquitto-clients5.添加修改配置文件 进…

力扣21 : 合并两个有序链表

链表style 描述: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 节点大小相同时,l1的节点在前 何解? 1,遍历两个链表,挨个比较节点大小 同时遍…

Python应用指南:利用高德地图API实现路径规划

高德路径规划API是一套基于HTTP协议的接口服务,旨在为开发者提供便捷的路径规划解决方案。该API支持多种出行方式,包括步行、公交和驾车,能够满足不同场景下的路径查询需求。通过调用这些API,用户可以获得从起点到终点的最优路径建…

深度学习数学基础之偏导数

深度学习数学基础之偏导数 偏导数的详细解释与实例 定义 偏导数是多变量函数对其中一个变量的导数,同时固定其他变量。它是研究函数在多维空间内各个方向上局部变化性质的基本工具。对于函数 ( f ( x 1 , x 2 , … , x n ) f(x_1, x_2, \dots, x_n) f(x1​,x2​…

论文阅读(二十三):Squeeze-and-Excitation Networks

文章目录 1.介绍2.原理3.代码4.SE模块的应用 论文:Squeeze-and-Excitation Networks   论文链接:Squeeze-and-Excitation Networks   代码链接:Github 1.介绍 卷积算子使网络能够在每一层的局部感受野中融合空间(spatial&…

视频智能分析平台LiteAIServer摄像机视频分析软件下载检测工业排污

在全球环境保护与可持续发展的大潮中,工业排污的有效监控与管理成为了衡量一个国家或地区绿色发展能力的重要指标。面对这一挑战,视频智能分析平台LiteAIServer以其创新的技术手段,为工业排污监管开辟了新路径,展现了科技在环保领…

【git】 git 删除了文件,如何找回

git 删除了文件,如何找回 使用 git revert 并不是恢复误删除文件的最佳方法,因为 git revert 通常用于撤销已经提交的更改(生成一个反向提交)。如果你误删除了文件,还未提交更改,或者已经提交但想恢复删除…

【Unity基础】初识UI Toolkit - 运行时UI

Unity中的UI工具包(UI Toolkit)不但可以用于创建编辑器UI,同样可以来创建运行时UI。 关于Unity中的UI系统以及使用UI工具包创建编辑器UI可以参见: 1. Unity中的UI系统 2. 初识UI Toolkit - 编辑器UI 本文将通过一个简单示例来…

Docker Compose一键部署Spring Boot + Vue项目

目录 前提条件 概述 Compose简介 Compose文件 Compose环境 Compose命令 帮助命令 关键命令 Compose部署项目 初始化环境 查看代码文件 sql数据准备 nginx配置文件准备 创建 compose.yaml 一键启动compose多个容器 浏览器访问虚拟机ip:80(可省略默认的80端口) …

动态代理:面向接口编程,屏蔽RPC处理过程

RPC远程调用 使用 RPC 时,一般的做法是先找服务提供方要接口,通过 Maven把接口依赖到项目中。在编写业务逻辑的时候,如果要调用提供方的接口,只需要通过依赖注入的方式把接口注入到项目中,然后在代码里面直接调用接口…

13.音乐管理系统(基于SpringBoot + Vue)

目录 1.系统的受众说明 ​​​​​​​ 2 需求分析 2.1用例图及用例分析 2.1.1 用户用例图及用例分析 2.1.2 管理员用例图及用例分析 2.2 系统结构图和流程图 2.2.1 音乐播放器的系统流程图(图2.2.1-1) 2.2.2 系统功能表(表2.2.2…

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得 (一)

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得(一) 一、前言 鸿蒙官网文档中蓝牙部分,对于之前没有开发过蓝牙的同学,使用和查阅起来不是很方便。因为只是API的调用说明。并没有蓝牙整个调用流程的讲解,所以看起来会…

Golang的多版本管理

Golang的多版本管理 一、 为什么需要多版本管理? 现代软件开发中,随着项目日益复杂,往往需要使用不同的Golang版本来适配不同的依赖库或者框架。同时,不同的项目也可能需要不同的Golang版本来编译和执行。因此,多版本管…

解决milvus migration 迁移数据到出现数据丢失问题

在迁移数据的时候发现数据丢失 问题是数据在批量迁移的过程中,这个错误会被忽略掉 分析下来是因为buuferSize 设置的是500条数据,但是迁移工具对一次迁移的数据是是有大小限制的,如果500条数据的总大小大于4194304,就会导致数据…

Nop平台与SpringCloud的功能对比

Nop平台是根据可逆计算原理从零开始设计并实现的新一代的低代码平台,它的目标并不是针对少数固化的场景提供预置的开发脚手架和可视化设计工具, 而是打破描述式编程和传统命令式编程之间人为制造的藩篱,建立两者无缝相容的一种新的编程范式。…

基于SpringBoot云养鸡互动平台的设计与实现

前言 对于当今社会的人们来说,互联网技术是必不可少的,随着经济和技术的不断发展,计算机已经深入到各个领域。云养鸡互动平台将人们的时间需求与计算机技术结合起来,架起一座桥梁,使云养鸡互动更加方便快捷。云养鸡互…

使用Kubernetes管理容器化应用

使用Kubernetes管理容器化应用 Kubernetes简介 安装Kubernetes 安装Minikube 启动Minikube集群 创建一个简单的Web应用 创建项目目录 初始化项目 安装Node.js依赖 创建Docker镜像 编写Dockerfile 构建并推送Docker镜像 创建Kubernetes配置文件 创建Deployment 创建Service …

使用飞桨AI Studio平台训练数据,并进行图像识别分析得牡丹花测试

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

自适应神经网络架构:原理解析与代码示例

个人主页:chian-ocean 文章专栏 自适应神经网络结构:深入探讨与代码实现 1. 引言 随着深度学习的不断发展,传统神经网络模型在处理复杂任务时的局限性逐渐显现。固定的网络结构和参数对于动态变化的环境和多样化的数据往往难以适应&#…

Python小白学习教程从入门到入坑------第十八课 异常模块与包【上】(语法基础)

一、异常 在Python中,异常(Exception)是一种用于处理在程序运行时可能发生的错误情况的机制 异常允许程序在检测到错误时不是简单地崩溃,而是能够优雅地处理这些错误,可能包括记录错误信息、清理资源、或者向用户提…