首页 > 系统相关 >ELK01 Elasticsearch部署和管理,集群工作机制 ubuntu使用

ELK01 Elasticsearch部署和管理,集群工作机制 ubuntu使用

时间:2024-10-21 21:04:09浏览次数:7  
标签:10.0 集群 elasticsearch ELK01 ubuntu Elasticsearch root 节点

企业级日志分析系统 ELK

1.1.1 什么是 ELK

1.Elasticsearch 是一个实时的全文搜索,存储库和分析引擎。
2.Logstash 是数据处理的管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如Elasticsearch 等存储库中。
(java开发,有数据处理能力,比较重) 3.Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。 4.filebeat 数据收集,轻量级,可以代替logstash做收集,logstash只做数据处理 (go开发) #注意:elk 4个软件使用时,版本必须保持一致 官网: https://www.elastic.co/

ELK stack的主要优点:

1.功能强大:Elasticsearch 是实时全文索引,具有强大的搜索功能
2.配置相对简单:Elasticsearch 全部其于 JSON,Logstash使用模块化配置,Kibana的配置都比较简单。
3.检索性能高效:基于优秀的设计,每次查询可以实时响应,即使百亿级数据的查询也能达到秒级响应。
4.集群线性扩展:Elasticsearch 和 Logstash都可以灵活线性扩展
5.前端操作方便:Kibana提供了比较美观UI前端,操作也比较简单

1.2 ELK 应用场景

运维主要应用场景:
1.将分布在不同主机/容器的日志统一收集,并进行转换,通过集中的Web UI 进行查询和管理
2.通过查看汇总的日志,找到故障的根本原因
3.Web 展示和报表功能
4.实现安全和事件等管理
大数据运维主要应用场景: 1.查询聚合, 大屏分析 2.预测告警, 网络指标,业务指标安全指标 3.日志查询,问题排查,基于API可以实现故障恢复和自愈 4.用户行为,性能,业务分析

2 Elasticsearch 部署和管理

Elasticsearch 基于 Java 语言实现

部署方式
1.包安装 (简单,内嵌java(只能es用,其他软件不能用))
2.二进制安装    (要自己配配置文件,service服务,麻烦些)
3.Docker 部署
4.Kubernetes 部署
5.Ansible 批量部署

#ES支持操作系统版本和 Java 版本官方说明
https://www.elastic.co/cn/support/matrix

2.2 Elasticsearch 安装前准备

2.2.1 安装前环境初始化

CPU 2C
内存4G或更多

2.2.1.2 关闭防火墙和SELinux

关闭防所有服务器的防火墙和 SELinux

#RHEL系列的系统执行下以下配置
[root@es-node1 ~]# systemctl disable firewalld
[root@es-node1 ~]# systemctl disable NetworkManager
[root@es-node1 ~]# sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
[root@es-node1 ~]# reboot 

2.2.2 安装 Java 环境 (可选)

Elasticsearch 是基于java的应用,所以依赖JDK环境
#注意: 安装7.X以后版本官方建议要安装集成JDK的包,所以无需再专门安装 JDK

关于JDK环境说明
#1.x 2.x 5.x 6.x都没有集成JDK的安装包,也就是需要自己安装java环境
#7.x 版本的安装包分为带JDK和不带JDK两种包,带JDK的包在安装时不需要再安装java,如果不带JDK的包仍然需要自己去安装java
#8.X 版本内置JDK,不再支持自行安装的JDK

#如果安装no-jdk的包,才需要安装java环境

2.3.1 包安装 Elasticsearch

2.3.1.1 安装 Elasticsearch 包

#下载链接
https://www.elastic.co/cn/downloads/elasticsearch
#这里选择package managers包管理器下载更简单
https://mirrors.tuna.tsinghua.edu.cn/elasticstack/

#范例:安装 elasticsearch-8
#注意:是elasticsearch目录,不是enterprise-search目录
[root@ubuntu ~]#wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/8.x/apt/pool/main/e/elasticsearch/elasticsearch-8.6.1-amd64.deb
[root@ubuntu ~]#dpkg -i elasticsearch-8.12.2-amd64.deb

#启动
[root@ubuntu ~]#systemctl enable --now elasticsearch.service
[root@ubuntu ~]#ss -lntp    #9200用户访问端口, 9300集群使用
State  Recv-Q Send-Q        Local Address:Port   Peer Address:Port Process                           
LISTEN 0      4096     [::ffff:127.0.0.1]:9300              *:*     users:(("java",pid=1852,fd=441)) 
LISTEN 0      4096                      *:9200              *:*     users:(("java",pid=1852,fd=446)) 
LISTEN 0      4096                  [::1]:9300           [::]:*     users:(("java",pid=1852,fd=440)) 

#可以修改Elasticsearch堆内存分配(改为512m,因为这里是自己测试,改小没事)
[root@ubuntu ~]#vim /etc/elasticsearch/jvm.options
## -Xms4g
## -Xmx4g
-Xms512m
-Xmx512m

#关闭连接的安全加密xpack (8版本开始才有的功能,之前版本没有)
[root@ubuntu ~]#vim /etc/elasticsearch/elasticsearch.yml
xpack.security.enabled: false
[root@ubuntu ~]#systemctl restart elasticsearch.service

#连接测试
[root@ubuntu ~]#curl 127.0.0.1:9200

2.3.1.2.3 集群配置

范例:8.X 集群配置

#默认配置文件需要以下六行
[root@ubuntu2204 ~]#vim /etc/elasticsearch/elasticsearch.yml
cluster.name: my-application #指定集群名称,同一个集群内的所有节点相同
node.name: node-1 #修改此行,每个节点不同
network.host: 0.0.0.0       #集群模式必须修改此行,默认是127.0.0.1:9300,否则集群节点无法通过9300端口通信每个节点相同

#发现集群的node节点列表,可以添加部分或全部节点IP
#在新增节点到已有集群时,此处需指定至少一个已经在集群中的节点地址,给予可用性,一般添加所有节点地址
discovery.seed_hosts: ["10.0.0.101","10.0.0.102","10.0.0.103"]
#集群初始化时指定希望哪些节点可以被选举为 master,只在初始化时使用,新加节点到已有集群时此项可不配置
cluster.initial_master_nodes: ["10.0.0.101","10.0.0.102","10.0.0.103"]
xpack.security.enabled: false
#一个集群中的 N 个节点启动后,才允许进行数据恢复处理,默认是1,一般设为为所有节点的一半以上,防止出现脑裂现象
#当集群无法启动时,可以将之修改为1,或者将下面行注释掉,实现快速恢复启动
gateway.recover_after_nodes: 2

安装集群

#准备3台机器,安装elasticsearch,执行以下操作
[root@ubuntu ~]#dpkg -i elasticsearch-8.12.2-amd64.deb
#调堆内存大小,防止自己电脑扛不住
[root@ubuntu ~]#vim /etc/elasticsearch/jvm.options
-Xms256m
-Xmx256m

#在一个节点上更改
[root@ubuntu ~]#vim /etc/elasticsearch/elasticsearch.yml
cluster.name: my-application
#注意这个配置每台机器都不能一样
node.name: node-1
network.host: 0.0.0.0
discovery.seed_hosts: ["10.0.0.151","10.0.0.152","10.0.0.153"]
#这里有个坑,下面有一行内容一模一样,而且没有注释,要保证是有一行
cluster.initial_master_nodes: ["10.0.0.151","10.0.0.152","10.0.0.153"]
#8版本开始需要改该配置
xpack.security.enabled: false

[root@ubuntu ~]#rsync /etc/elasticsearch/elasticsearch.yml 10.0.0.152:/etc/elasticsearch/elasticsearch.yml
[root@ubuntu ~]#rsync /etc/elasticsearch/elasticsearch.yml 10.0.0.153:/etc/elasticsearch/elasticsearch.yml

#两外两个节点把 /etc/elasticsearch/elasticsearch.yml 下的 node.name 名称改下

#3台机器开机启动
[root@ubuntu ~]#systemctl enable --now elasticsearch.service

#在3个节点任意一个执行,查看集群情况
[root@ubuntu ~]#curl http://127.0.0.1:9200/_cluster/health?pretty=true
#查看各自情况
[root@ubuntu ~]#curl http://127.0.0.1:9200/
#查看有哪些节点
[root@ubuntu ~]#curl 'http://10.0.0.151:9200/_cat/nodes?v'
ip         heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
10.0.0.152           82          70   0    0.24    0.14     0.08 cdfhilmrstw -      node-2
10.0.0.153           33          75   1    0.07    0.08     0.04 cdfhilmrstw -      node-3
10.0.0.151           58          71   0    0.08    0.08     0.02 cdfhilmrstw *      node-1

2.3.1.3 优化 ELK 资源配置

2.3.1.3.1 开启 bootstrap.memory_lock 优化

[root@ubuntu ~]#vim /etc/elasticsearch/elasticsearch.yml
# Lock the memory on startup:
#启动es时锁住内存,提高性能(内存大可以起来,内存小可能起不来,可追加配置做优化)
bootstrap.memory_lock: true

#注意:开启 bootstrap.memory_lock: true 需要足够的内存,建议4G以上,否则内存不足,启动会很失败或很慢
#官方说明,如果内存小,但又想启动内存锁,提升性能,可以如下配置
#8.X致集群模式需要修改如下配置
#方法1:直接修改elasticsearch.service 
[root@node1 ~]#vim /lib/systemd/system/elasticsearch.service 
[Service]
#加下面一行
LimitMEMLOCK=infinity
[root@ubuntu ~]#systemctl daemon-reload

#重启即可启动
[root@ubuntu ~]#systemctl restart elasticsearch.service

2.3.1.3.2 内存优化

#所有java程序分配堆内存不要超过32G,最好不要超30G, es是java开发的,所以也有这个要求
#推荐使用宿主机物理内存的一半,ES的heap内存最大不超过30G,26G是比较安全的

2.4 Elasticsearch 访问

#访问 ES 
#查看支持的指令
curl http://127.0.0.1:9200/_cat
#查看es集群状态
curl http://127.0.0.1:9200/_cat/health
curl 'http://127.0.0.1:9200/_cat/health?v'

#列出所有的索引 以及每个索引的相关信息
curl 'http://127.0.0.1:9200/_cat/indices?v'

2.4.1.2 创建和查看索引

#创建索引index1,简单输出    (索引相当于数据库)
[root@node1 ~]#curl -XPUT '127.0.0.1:9200/index1'    #默认一个主,一个副本(如果单机版不会创副本)
{"acknowledged":true,"shards_acknowledged":true,"index":"index1"}

#创建3个分片和2个副本的索引    (每个分片1主2副本,如果单机版不会创副本)
[root@node1 ~]#curl -XPUT '127.0.0.1:9200/index2' -H 'Content-Type: 
application/json' -d '
{
  "settings": {
    "index": {
      "number_of_shards": 3,  
      "number_of_replicas": 2
   }
 }
}'
{"acknowledged":true,"shards_acknowledged":true,"index":"index2"}

#如果查出es状态为yellow表示副本不全,数据没丢。如果为红,主分片丢了,数据丢了

2.5 Elasticsearch 插件

2.5.1 Head 插件

git地址:https://github.com/mobz/elasticsearch-head

用浏览器插件最方便, 加载已解压的扩展程序选0.1.5_0文件夹添加
#查看粗的数字和框代表主,细的代表副本

2.5.2 Cerebro 插件

git地址:https://github.com/lmenezes/cerebro

#需要在一台机器上部署,然后才能使用
注意:安装cerebro内存建议大于3G以上(基于java,内存消耗稍微大一些)

#依赖JDK
[root@ubuntu2004 ~]#apt -y install openjdk-11-jdk
#Java8实际也支持
[root@ubuntu2004 ~]#apt -y install openjdk-8-jdk

#下载包,官方提供了DEB和RPM包
[root@ubuntu2004 ~]#wget https://github.com/lmenezes/cerebro/releases/download/v0.9.4/cerebro_0.9.4_all.deb
#安装
[root@ubuntu2004 ~]#dpkg -i cerebro_0.9.4_all.deb
#修改配置文件
[root@ubuntu2004 ~]#vim /etc/cerebro/application.conf
data.path: "/var/lib/cerebro/cerebro.db" #取消此行注释
#data.path = "./cerebro.db" #注释此行,默认路径是/usr/share/cerebro/cerebro.db

#此目录自动生成
[root@ubuntu2204 ~]#ll -d /var/lib/cerebro
drwxr-xr-x 2 cerebro cerebro 4096  4月 10  2021 /var/lib/cerebro/

#启动
[root@ubuntu2004 ~]#systemctl start cerebro.service

#默认监听9000端口
[root@ubuntu2004 ~]#ss -ntlp|grep 9000
LISTEN   0   100   *:9000         *:*       users:(("java",pid=26333,fd=155))
#访问下面链接地址
http://10.0.0.200:9000
#在Node address输入框中输入任意ES集群节点的地址
http://10.0.0.151:9200

2.5.3 其它插件

Edge 浏览器应用中还有其它ES插件,可以使用

 

2.6 Elasticsearch 集群工作原理

2.6.1 ES 节点分类

Elasticsearch 集群的每个节点的角色有所不同,但都会保存集群状态Cluster State的相关的数据信息
1.节点信息:每个节点名称和地址
2.索引信息:所有索引的名称,配置等

2.6.3.4 数据同步机制

它采取了一 种“最终一致性”(eventual consistency)的模型。

2.6.4 ES 集群故障转移

故障转移指的是,当集群中有节点发生故障时,ES集群会进行自动修复

2.6.5 ES 文档路由

2.6.5.1 ES 文档路由原理

ES文档是分布式存储,当在ES集群访问或存储一个文档时,由算法决定此文档到底存放在哪个主 分片中,再结合集群状态找到存放此主分片的节点主机

2.6.5.3 ES 文档读取流程

可以从主分片或者从其它任意副本分片读取文档

2.7 Elasticsearch 集群扩容和缩容

新加入两个节点node4和node5,变为Data节点

#安装
[root@ubuntu ~]#dpkg -i elasticsearch-8.12.2-amd64.deb
#改下虚拟机内存(自己测试扛不住)
[root@ubuntu ~]#vim /etc/elasticsearch/jvm.options
-Xms256m
-Xmx256m

#在两个新节点安装 ES,并配置文件如下 
[root@ubuntu ~]#vim /etc/elasticsearch/elasticsearch.yml 
cluster.name: my-application #和原集群名称相同
#当前节点在集群内的节点名称,同一集群中每个节点要确保此名称唯一
node.name: node-4 #第二个新节点为node-5
#集群监听端口对应的IP,默认是127.0.0.1:9300
network.host: 0.0.0.0
#指定任意集群节点即可
discovery.seed_hosts: ["10.0.0.151","10.0.0.152","10.0.0.153"]
#8版本开始需要改该配置
xpack.security.enabled: false

[root@ubuntu ~]#systemctl enable --now elasticsearch.service

#完成扩容,通过插件可以看到,已存在的数据也进行了重新分布

2.7.2 集群缩容

把服务停了,就自动缩容了, 数据会重新挪动到其他节点上(挪动过程状态是黄色, 先关一个, 黄变绿再关另一个)

2.4.2 Python 脚本:集群健康性检查

[root@es-node1 ~]# cat els-cluster-monitor.py 
#!/usr/bin/python3
#coding:utf-8
import subprocess
import json
body = ""
false="false"
#用另外一个进程运行curl返回结果从stdout中读取
obj = subprocess.Popen(("curl -sXGET http://10.0.0.101:9200/_cluster/health?
pretty=true"),shell=True, stdout=subprocess.PIPE) # 
data = obj.stdout.read()
#print(type(data)) # 应该是字符串类型或bytes类型
#print(data) # 确认返回的json形式的
es_dict = json.loads(data) if data else {}  # 把json字符串解析为字典
status = es_dict.get("status") # 通过字典查找status
if status == "green":
  print("OK")
else:
  print("Not OK")

 

标签:10.0,集群,elasticsearch,ELK01,ubuntu,Elasticsearch,root,节点
From: https://www.cnblogs.com/ludingchao/p/18490369

相关文章

  • Ubuntu20.04环境下XTDrone三维运动规划:运行ego时报错“[FSM]:state:INIT no odom.”
       这篇文章以使用Gazebo位姿真值为例,如果使用视觉惯性里程计,解决的思路是一样的。       按照语雀官方文档启动egoplanner后,终端可能会报出如下图所示的"noodom"提示,飞机无法飞向给定目标点:    出现这个问题的原因是订阅的里程计话题名不对,我......
  • 使用route命令进行ubuntu网络配置
    参考:route命令详解与使用实例-简书(jianshu.com)Linux路由表详解及route命令详解_useifacebr-b548282d0156-CSDN博客以下是Ubuntu中常用的网络命令:ifconfig:查看和更改网络接口的地址和参数。netstat:查看网络连接、路由表、接口统计等信息。route:查看和修改IP路由表......
  • Ubuntu20.04LTS aarch64 操作系统连接联通4G网卡
    步骤1:更新系统并安装必要的软件包sudoapt-getupdatesudoapt-getinstallusb-modeswitchmodemmanagernetwork-managerusb-modeswitch:用于将某些USB设备从存储模式切换到调制解调器模式。ModemManager:用于管理移动宽带调制解调器。NetworkManager:用于管理网络连接。......
  • Ubuntu 24.04自带RDP远程桌面
    Ubuntu24.04自带远程桌面啦,在Setting-->System-->DesktopSharing中可以开启远程桌面共享和远程控制,默认使用3390端口,开启远程服务后,在Windows机器中就可以用自带的远程桌面软件连接Ubuntu桌面了.另外一种可选方案是RemoteLogging,但启用此功能会导致当前用户被......
  • c# Elasticsearch统计Nested的数据
    我是直接问百度ai   es统计是nested结构的数据,数据有年份:reportyear,名称:accountnamezh,类型:reportperiodtype,利润:originalvalue,,需要统计:2024年,名称:营业收入,类型:2,的利润合计是多少,利润金额比较大,需要除以100000000然后生成的es是POST/your_index/_search{"query":{......
  • Ubuntu22.04 更换源
    1、在Ubuntu22.04中更新软件源,可以编辑/etc/apt/sources.list文件,将现有的源地址替换为新的源地址sudonano/etc/apt/sources.listdebhttp://mirrors.163.com/ubuntu/jammymainrestricteduniversemultiversedebhttp://mirrors.163.com/ubuntu/jammy-updatesmain......
  • 大数据-180 Elasticsearch - 原理剖析 索引写入与近实时搜索
    点一下关注吧!!!非常感谢!!持续更新!!!目前已经更新到了:Hadoop(已更完)HDFS(已更完)MapReduce(已更完)Hive(已更完)Flume(已更完)Sqoop(已更完)Zookeeper(已更完)HBase(已更完)Redis(已更完)Kafka(已更完)Spark(已更完)Flink(已更完)ClickHouse(已更完)Kudu(已更完)Druid(已更完)Kylin(已更完)Elasticsearch(正在更......
  • ubuntu 安装 MySql5.7(基于ARM架构 源码安装)
    1系统需求目标安装MySql5.7版本。系统环境:oracle云主机,arm架构确认主机架构如下图:查看是否有5.7版本的源apt-cachesearchmysql|grepmysql-server执行后发现只有8.0版本的,5.7版本只能通过源码安装了。 2下载MySql源码下载源码要选择合适的版本,官网下载地址......
  • Ubuntu系统中,使用matplotlib画图调用times new romain字体报错 findfont: Font family
    画图时报错,缺少字体findfont:Fontfamily['TimesNewRoman']notfound.FallingbacktoDejaVuSans.有两种解决方式:方式一:在线安装msttcorefonts包#安装msttcorefonts包这种方式需要ubuntu能连外网,否则因为访问source-forge失败而告终sudoaptupdatesudoapti......
  • Ubuntu中docker安装
    sudopasswdroot(设置root密码)Ubuntu14.04/16.04/18.04安装docker#step1:安装必要的一些系统工具sudoapt-getupdatesudoapt-get-yinstallapt-transport-httpsca-certificatescurlsoftwareproperties-common#step2:安装GPG证书curl-fsSLhttps://mirrors.aliyu......