【ELK】-2 ELK的搭建

文章目录

  • [ELK 搭建笔记](#ELK 搭建笔记)
    • 一、部署架构
    • 二、准备工作(每个节点都需要执行)
    • [三、Elasticsearch 集群部署](#三、Elasticsearch 集群部署)
      • [3.1 环境准备](#3.1 环境准备)
      • [3.2 安装 Elasticsearch](#3.2 安装 Elasticsearch)
      • [3.3 修改主配置文件](#3.3 修改主配置文件)
      • [3.4 JVM 堆内存配置](#3.4 JVM 堆内存配置)
      • [3.5 分发到其他节点](#3.5 分发到其他节点)
      • [3.6 性能调优(三台节点都需要执行)](#3.6 性能调优(三台节点都需要执行))
        • [① 文件描述符 & 进程限制](#① 文件描述符 & 进程限制)
        • [② 虚拟内存优化(mmap)](#② 虚拟内存优化(mmap))
        • [③ 禁止交换空间](#③ 禁止交换空间)
      • [3.7 配置 Systemd 服务](#3.7 配置 Systemd 服务)
      • [3.8 启动 Elasticsearch](#3.8 启动 Elasticsearch)
      • [3.9 验证集群](#3.9 验证集群)

ELK 搭建笔记

一、部署架构

!\[Pasted image 20260606162924.png]

节点 配置 IP 部署组件
node1 2C/4G 192.168.80.10 Elasticsearch
node2 2C/4G 192.168.80.11 Elasticsearch
node3 2C/4G 192.168.80.12 Elasticsearch
web1 2C/4G 192.168.80.13 Logstash + Kibana + Nginx
web2 2C/4G 192.168.80.14 Filebeat + Nginx

二、准备工作(每个节点都需要执行)

bash 复制代码
# 关闭防火墙
systemctl stop ufw
systemctl disable ufw

# 修改主机名
hostnamectl set-hostname node1   # node2 / node3 / web1 按需修改
hostnamectl set-hostname node2
hostnamectl set-hostname node3
hostnamectl set-hostname web1

# 时间同步 & 同步到硬件时钟
timedatectl set-ntp true
timedatectl set-timezone Asia/Shanghai
timedatectl
hwclock --systohc
hwclock --show

# 设置系统语言为中文
apt install -y language-pack-zh-hans lrzsz
localectl set-locale LANG=zh_CN.utf8
localectl

三、Elasticsearch 集群部署

3.1 环境准备

软件包下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

JDK 说明:Elasticsearch 7.x 之前需要单独安装 JDK,7.x 之后内置了 JDK 环境,可装可不装。

3.2 安装 Elasticsearch

bash 复制代码
# 解压安装包
tar -zxvf elasticsearch-7.17.27-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local/
mv elasticsearch-7.17.27 elasticsearch

# 创建数据目录
mkdir /usr/local/elasticsearch/data

3.3 修改主配置文件

bash 复制代码
cd /usr/local/elasticsearch/config
cp elasticsearch.yml elasticsearch.yml.bak

vim elasticsearch.yml
yaml 复制代码
# --17-- 集群名称
cluster.name: my-elk-cluster

# --23-- 节点名称(node1 / node2 / node3)
node.name: node1

# --33-- 数据存放路径
path.data: /usr/local/elasticsearch/data

# --37-- 日志存放路径
path.logs: /usr/local/elasticsearch/logs

# --43-- 锁定内存,避免使用 swap 提高性能
bootstrap.memory_lock: true

# --56-- 监听地址,0.0.0.0 代表所有地址
network.host: 0.0.0.0

# --61-- 端口配置
http.port: 9200               # ES 对外访问接口
transport.tcp.port: 9300      # 集群内部通信接口

# --71-- 服务发现的节点列表
discovery.seed_hosts: ["192.168.80.10:9300", "192.168.80.11:9300", "192.168.80.12:9300"]

# --75-- 候选 master 节点列表(对应 node.name)
cluster.initial_master_nodes: ["node1", "node2", "node3"]
可选配置
yaml 复制代码
node.master: true                          # 是否 master 节点
node.data: true                            # 是否 data 节点
discovery.zen.minimum_master_nodes: 2      # 避免脑裂,最少为 (节点数/2)+1
transport.tcp.compress: true               # 压缩 TCP 传输数据
http.cors.enabled: true                    # 允许跨域
http.cors.allow-origin: "*"                # 允许所有域名

节点类型说明:ES 集群节点分为 master(主节点)、data(数据节点)、client(客户端节点)。默认情况下三合一(混合节点),生产环境建议分离。

3.4 JVM 堆内存配置

bash 复制代码
cd /usr/local/elasticsearch/config
vim jvm.options
ini 复制代码
-Xms2g
-Xmx2g
# Xms 和 Xmx 设置相同值,一般不超过系统内存的 50%,不超过 30G

3.5 分发到其他节点

bash 复制代码
# 把整个 elasticsearch 目录复制到其他两个节点
scp -r /usr/local/elasticsearch node2:/usr/local/
scp -r /usr/local/elasticsearch node3:/usr/local/
bash 复制代码
# 到 node2、node3 上修改节点名称
# vim /usr/local/elasticsearch/config/elasticsearch.yml
# node.name: node2   # node3 上改为 node3

3.6 性能调优(三台节点都需要执行)

① 文件描述符 & 进程限制
bash 复制代码
vim /etc/security/limits.conf
ini 复制代码
*  soft    nofile          65535
*  hard    nofile          65535
*  soft    nproc           65535
*  hard    nproc           65535
*  soft    memlock         unlimited
*  hard    memlock         unlimited
bash 复制代码
vim /etc/systemd/system.conf
ini 复制代码
DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535
DefaultLimitMEMLOCK=infinity

字段说明

  • nofile --- 进程可打开的最大文件数
  • nproc --- 用户可创建的最大进程数
  • memlock --- 进程可锁定在 RAM 中的最大内存
② 虚拟内存优化(mmap)

Elasticsearch 通过文件映射(mmap)读取磁盘文件,比 read 系统调用少一次内存拷贝(零拷贝技术)。

bash 复制代码
# 一个进程可拥有的最大内存映射区域数
# 参考值:2G→262144,4G→4194304,8G→8388608
echo "vm.max_map_count = 262144" >> /etc/sysctl.conf
sysctl -p
sysctl -a | grep vm.max_map_count
③ 禁止交换空间
bash 复制代码
echo "vm.swappiness = 1" >> /etc/sysctl.conf   # 仅在万不得已时使用交换
sysctl -p

swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

3.7 配置 Systemd 服务

bash 复制代码
vim /usr/lib/systemd/system/elasticsearch.service
ini 复制代码
[Unit]
Description=elasticsearch
After=network.target

[Service]
Type=forking
User=elasticsearch
ExecStart=/usr/local/elasticsearch/bin/elasticsearch -d -p /usr/local/elasticsearch/elasticsearch.pid
PrivateTmp=true
LimitNOFILE=65535
LimitNPROC=65535
LimitAS=infinity
LimitFSIZE=infinity
TimeoutStopSec=0
KillSignal=SIGTERM
KillMode=process
SendSIGKILL=no
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

3.8 启动 Elasticsearch

bash 复制代码
# 创建专用用户并授权
useradd elasticsearch
echo elasticsearch:123456 | chpasswd
chown -R elasticsearch:elasticsearch /usr/local/elasticsearch

# 启动服务
systemctl daemon-reload
systemctl start elasticsearch.service
systemctl enable elasticsearch.service
ss -lntp | grep 9200

3.9 验证集群

bash 复制代码
# 查看节点信息
curl http://192.168.80.10:9200

# 查看集群健康状态
curl http://192.168.80.10:9200/_cluster/health?pretty

集群健康状态说明

  • green --- 所有索引分片均已分配 ✅
  • yellow --- 主分片已分配,但存在未分配的副本分片 ⚠️
  • red --- 存在未分配的主分片,部分数据不可用 ❌

ES 7.0 之前默认 5 个分片,7.0 之后默认 1 个分片。

也可以用浏览器访问 http://192.168.80.10:9200/_cluster/health?pretty 查看,看到 status 值为 green 即表示运行正常。

在 Kibana → Dev Tools 中,点击 New → URL 填入 http://192.168.80.10:9200,如果集群健康值为 green 绿色,代表集群很健康。


相关推荐
xcLeigh2 小时前
KES运维自动化与脚本体系实战
运维·数据库·自动化·脚本·数据迁移·kes
潘正翔2 小时前
docker基础_镜像使用
linux·运维·服务器·docker·容器·centos·devops
勉灬之2 小时前
利用双网卡服务器搭建 Verdaccio 中转,解决内网 npm 依赖下载问题
运维·服务器·npm
江湖有缘2 小时前
Lunalytics部署指南:使用Docker快速搭建私有监控面板
运维·docker·容器
DB哥讲数据库2 小时前
rocky linux安装教程:VMware虚拟机图文讲解部署Rocky Linux 9(附镜像包)
linux·运维·服务器
未*望2 小时前
【Linux入坑(二)—全志T133开发板适配USB-电容屏触摸屏驱动(多点触控) 】
linux·运维·服务器
分布式存储与RustFS3 小时前
RustFS保姆级教程:Docker快速部署兼容S3的本地对象存储
运维·docker·容器·rustfs部署教程·本地搭建s3对象存储·rustfs网页控制台使用·awscli连接rustfs
江湖有缘3 小时前
Docker部署Papra极简文件归档平台
运维·docker·容器
gooxi_hui3 小时前
海量存力,智驭未来丨国鑫4U60盘位高密度存储服务器SL401-G4重磅上市
运维·服务器·人工智能