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" ]; then
  JAVA="$JAVA_HOME/bin/java"
else
  if [ "$(uname -s)" = "Darwin" ]; then
    # OSX has a different structure
    JAVA="$ES_HOME/jdk/Contents/Home/bin/java"
  else
    JAVA="$ES_HOME/jdk/bin/java"
  fi
fi

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

 if [ "$(uname -s)" = "Darwin" ]; then
   # macOS has a different structure
   JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java"
 else
   JAVA="$ES_HOME/jdk/bin/java"
 fi
 JAVA_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包的时候导致重复了,建议保留一个节点的目录,另一个重新解压

七、可视化界面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的使用,大家多多关注哦。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SwiftUI:单个App支持设置多语言

SwiftUI 全新多语言方案 简化本地化的字符串- WWDC21 - 视频 本地化您的SwiftUI app - WWDC21 - 视频 构建全球化App:本地化的示例- WWDC22 - 视频 构建支持多语言的App - WWDC24 - 视频 单个App支持设置多语言 工程 Info.plist里添加 键值UIPrefersShowingLangua…

go 使用fyne实现桌面程序的计算器例子

使用Fyne工具包构建跨平台应用是非常简单的,在此之前我们需要做一些准备功能做,比如安装一些gcc基础图形依赖库,还有go语言本身的运行开发环境都是必要的。 在此之前我们希望你是go语言的已入门用户,掌握go的协程,管道…

【C++进阶篇】——STL的简介

【C进阶篇】——STL的简介 1.什么是STL STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 2.STL的版本 原始版本 Alexander Stepanov、Meng Lee 在…

【Linux系统】环境变量

一、通俗例子解释环境变量概念与作用 想象你在厨房做饭,需要找到各种调料和工具。这些调料和工具就相当于计算机中的“资源”,而环境变量就像厨房里的一本规则书,里面列出了厨房里所有调料和工具的位置。 具有全局性(所有人都能用…

MCU SCT文件学习

硬件:GD32F427, 外设:FreeRtos,ADC,DMA 现象:注释掉一些线程,发现ADC采样的线程采样不到数据了。 开始猜测是线程重入,破坏了地址,后来思考一下发现不对,因为注释掉线程,ADCDMA采…

【Vulnhub靶场】DC-4

DC-4靶场下载地址https://www.five86.com/downloads/DC-4.zip 本机IP:192.168.118.128 靶机IP:192.168.118.0/24 信息收集 扫描主机存活,扫描端口,扫描服务 第一步扫描出主机ip为192.168.118.141 nmap -sP 192.168.118.0/24 nm…

高级 SQL 技巧全面教程:提升你的数据库操作能力

高级 SQL 技巧全面教程:提升你的数据库操作能力 引言 在数据驱动的时代,SQL(结构化查询语言)是与数据库交互的核心工具。虽然基础 SQL 语法足以满足日常需求,但掌握一些高级技巧能够显著提高你的工作效率和数据处理能…

Node.js初学者指南:搭建HTTP服务器、获取请求信息及响应、变量声明与NPM包管理

精神畅快,心气平和;饮食有节,寒暖当心;起居以时,劳逸均匀 文章目录 node.js使用http搭建服务器的问题获取请求相关的信息响应相关的信息var、let、const对比npm使用全局安装包 node.js 概念 node.js是一个基于Chrome …

RTE 2024 隐藏攻略

大家好!想必今年 RTE 大会议程大家都了解得差不多了,这将是一场实时互动和多模态 AI builder 的年度大聚会。 大会开始前,我们邀请了参与大会策划的 RTE 开发者社区和超音速计划的成员们,分享了不同活动的亮点和隐藏攻略。 请收…

使用Poste搭建内网邮件服务器

使用Poste搭建内网邮件服务器 Poste.io 也是一个流行的邮件服务器方案,它可以通过 Docker 容器轻松部署,非常适合搭建内部邮件服务器。 本文档将向您展示如何开始使用 Poste.io 邮件服务器。在 5 分钟内,您将拥有一个可发送和接收邮件的邮件…

WSL2 Ubuntu22.04编译安装LLVM

前提 这两天因为工作需要,要编译一个Debug版本的llvm。这里对编译安装过程进行一个简单的记录,同时也记录下这个过程中遇到的几个问题。 下载源码并编译 有关llvm编译安装的官方文档在这里。 从git仓库clone llvm的源码。 git clone https://github.c…

SD-WAN企业组网的应用场景

SD-WAN(软件定义广域网)能够实现企业不同站点之间的高效互联,确保分支机构、总部、数据中心以及云平台等站点的顺畅通信。本文将探讨从企业的WAN业务需求出发,可以将SD-WAN的组网场景分为哪几类。 SD-WAN的典型组网场景 企业站点之…

Docker中如何控制服务启动顺序实现探讨

文章目录 一、Docker概述二、Docker三剑客1. Compose2. Machine3. Swarm 三、简要需求1. 样例工程2. 代码模块3. 调用方向4. 期望启动顺序 四、思路分析1.各走各路1.)docker-compose -f指定不同配置文件2.)docker-compose up -d service-name指定服务名3…

基于SpringBoot的高校体测管理系统设计与实现(源码+定制+开发)高校体测记录系统设计、高校体测信息管理平台、智能体测管理系统开发、高校体测记录系统设计

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

如何将markdown文件转换为pdf

最近笔者在用vscode写markdown,但是提交时往往需要交pdf。所以就涉及到如何将markdown转化为pdf格式。 首先,需要在vscode上安装插件 markdown Preview Enhanced 之后在vscode的右上角即可看到下述图标,点击,vscode右半面就会显示…

Spring Boot驱动的植物健康监测革命

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理植物健康系统的相关信息成为必然。开发合适…

VulkanTutorial(1·简述,vs环境搭建)

介绍: 与OpenGL,WebGL和Direct3D等API((Application Programming Interface, 应用程序编程接口))相比,valkan更偏向于底层,有更多的GPU控制接口,因此它有更好的性能和更小的驱动开销&#xff0…

检索增强型生成模型RichRAG:为多面查询提供丰富回应

人工智能咨询培训老师叶梓 转载标明出处 大模型在处理静态知识更新和信息准确性方面仍面临挑战。为了解决这些问题,检索增强型生成(RAG)模型应运而生,它们通过检索文档来辅助语言模型生成更可靠的回答。但现有的RAG研究大多集中在…

springboot079信息化在线教学平台的设计与实现(论文+源码)_kaic

信息化在线教学平台的设计与实现 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了信息化在线教学平台的开发全过程。通过分析信息化在线教学平台管理的不足,创建了一个计算机管理信息化在线教学平台…

【人工智能】——matplotlib教程

文章目录 1.matplotlib简介2.基本绘图功能2.1给图形添加辅助功能2.2在一个坐标系中绘制多个图像2.3多个坐标系显示图像 3.常见图像绘制 1.matplotlib简介 matplotlib 是一个用于创建二维图表和数据可视化的 Python 库,它提供了一种类似于 MATLAB 的绘图接口。matplo…