Elasticsearch集群,kibana部署及设置ES,Kibana账号密码

Elasticsearch集群,Kibana部署及设置ES,Kibana账号密码

一、背景与问题

在现代数据处理场景中,Elasticsearch 作为分布式搜索引擎,常用于日志分析、全文检索、实时数据分析等场景。随着数据量增长,单节点部署已无法满足高可用性和扩展性需求,因此需要构建 Elasticsearch 集群。同时,Kibana 作为可视化工具,与 Elasticsearch 集成使用,但默认的开放权限存在安全风险。本文将深入探讨 Elasticsearch 集群部署、Kibana 配置以及安全认证方案的实现原理和实践细节。

二、基本原理

1. Elasticsearch 集群架构

Elasticsearch 是基于 Lucene 的分布式搜索引擎,其核心特性包括:

  • 分片(Shard):数据按分片分布到多个节点,支持水平扩展
  • 副本(Replica):分片的副本提供数据冗余和读扩展
  • 节点角色:数据节点(Data Node)、主节点(Master Node)、协调节点(Coordinating Node)
  • 集群发现:通过集群名称和发现机制实现节点自动加入

2. Kibana 与 Elasticsearch 的集成

Kibana 作为 Elasticsearch 的官方可视化工具,通过以下机制与 Elasticsearch 集成:

  • 基于 REST API 的数据交互
  • 支持多节点集群的连接配置
  • 提供角色认证和访问控制
  • 内置数据可视化组件(如图表、仪表盘)

三、环境准备

1. 软件版本要求

  • Elasticsearch 8.x(推荐 8.6.2)
  • Kibana 8.x(推荐 8.6.2)
  • Java 17(Elasticsearch 8.x 要求 Java 17)

2. 系统要求

  • Linux(推荐 Ubuntu 20.04)
  • 64位系统
  • 足够的内存(建议 8GB 以上)

四、核心实现

1. Elasticsearch 集群部署

配置文件示例(elasticsearch.yml)

# /etc/elasticsearch/elasticsearch.yml
cluster.name: my-cluster
node.name: node-1
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
discovery.seed_hosts: ["192.168.1.10", "192.168.1.11", "192.168.1.12"]
network.host: 0.0.0.0
http.port: 9200
transport.port: 9300

关键代码解释:

  • cluster.name:集群名称,所有节点必须一致
  • cluster.initial_master_nodes:初始主节点列表,用于集群初始化
  • discovery.seed_hosts:指定可发现的节点IP,确保节点间通信
  • network.host:允许所有IP访问(生产环境应配置白名单)

集群节点配置差异

节点类型必需配置功能说明
Master Nodecluster.master_timeout负责集群管理
Data Nodenode.data: true存储分片数据
Coordinating Nodenode.data: false只处理查询请求

2. 设置账号密码

创建用户和角色(elasticsearch-users 工具)

# 安装 elasticsearch-users 工具
sudo apt install elasticsearch-users

# 创建用户和角色
elasticsearch-users useradd kibana_user --roles=viewer
elasticsearch-users useradd admin_user --roles=superuser

关键代码解释:

  • --roles:指定用户权限,viewer 仅能查看,superuser 具有完全控制权
  • elasticsearch-users 命令需要在 elasticsearch 的 bin 目录下执行

配置 Kibana 认证

# /etc/kibana/kibana.yml
elasticsearch.hosts: ["http://192.168.1.10:9200"]
elasticsearch.username: "kibana_user"
elasticsearch.password: "secure_password"

关键代码解释:

  • elasticsearch.hosts:指定 Elasticsearch 集群地址
  • elasticsearch.username 和 elasticsearch.password:Kibana 访问的认证凭据

3. 安全配置优化

启用 HTTPS

# 生成证书
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout cert.pem -days 365

# 修改 elasticsearch.yml
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.key: /path/to/cert.pem
xpack.security.http.ssl.certificate: /path/to/cert.pem

关键代码解释:

  • xpack.security.http.ssl.enabled:启用 HTTPS
  • 需要配置证书路径和信任链,生产环境建议使用 CA 签发证书

五、完整案例

案例:部署3节点 Elasticsearch 集群

步骤1:安装 Elasticsearch

sudo apt update
sudo apt install elasticsearch=8.6.2

步骤2:配置节点1(master+data)

# /etc/elasticsearch/elasticsearch.yml
cluster.name: my-cluster
node.name: node-1
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
discovery.seed_hosts: ["192.168.1.10", "192.168.1.11", "192.168.1.12"]
network.host: 0.0.0.0

步骤3:配置节点2(data)

# /etc/elasticsearch/elasticsearch.yml
cluster.name: my-cluster
node.name: node-2
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
discovery.seed_hosts: ["192.168.1.10", "192.168.1.11", "192.168.1.12"]
network.host: 0.0.0.0
node.data: true

步骤4:配置节点3(coordinating)

# /etc/elasticsearch/elasticsearch.yml
cluster.name: my-cluster
node.name: node-3
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
discovery.seed_hosts: ["192.168.1.10", "192.168.1.11", "192.168.1.12"]
network.host: 0.0.0.0
node.data: false

步骤5:启动集群

sudo systemctl start elasticsearch

步骤6:Kibana 配置

# /etc/kibana/kibana.yml
elasticsearch.hosts: ["https://192.168.1.10:9200"]
elasticsearch.username: "kibana_user"
elasticsearch.password: "secure_password"

六、源码解析

1. Elasticsearch 集群发现机制

Elasticsearch 使用 discovery.zen 模块实现节点发现,关键代码逻辑如下:

public class ZenDiscovery {
    public void start() {
        // 初始化节点发现机制
        if (discoverySettings.get("discovery.zen.ping_initial_cluster_size") != null) {
            // 检查初始集群节点数量
            if (discoverySettings.get("discovery.zen.ping_initial_cluster_size").intValue() < 1) {
                throw new ElasticsearchException("Minimum initial cluster size is 1");
            }
        }
    }
}

关键代码解释:

  • discovery.zen.ping_initial_cluster_size 配置项用于指定初始集群节点数量
  • 节点通过 zen.ping 机制进行心跳检测

2. Kibana 认证流程

Kibana 在连接 Elasticsearch 时,会通过以下流程进行认证:

// kibana/server/lib/elasticSearchService.js
function connectToES() {
    const client = new elasticsearch.Client({
        host: 'http://192.168.1.10:9200',
        auth: {
            username: 'kibana_user',
            password: 'secure_password'
        }
    });
    return client;
}

关键代码解释:

  • 使用 Elasticsearch 的客户端库进行认证
  • auth 配置项包含用户名和密码
  • 通过 HTTPS 连接时需要配置 ssl 选项

七、进阶使用

1. 动态扩展集群

当需要添加新节点时,只需:

  1. 安装 Elasticsearch 实例
  2. 配置 elasticsearch.yml 文件
  3. 启动节点并加入集群
  4. 调整分片和副本数量
PUT /my_index/_settings
{
  "number_of_replicas": 2
}

2. 索引模板管理

创建索引模板以统一配置:

PUT /_index_template/my_template
{
  "index_patterns": ["log-*"],
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  }
}

3. 自定义仪表盘

在 Kibana 中创建仪表盘:

POST /_search
{
  "query": {
    "match_all": {}
  },
  "size": 10
}

八、性能与工程实践

1. 性能优化策略

优化项优化方法说明
分片数量保持在3-5个过多分片会增加管理开销
副本数量1-2个提高读取性能但增加写入开销
内存配置设置 indices.memory.min避免内存不足导致的OOM
查询优化使用过滤器代替查询过滤器在内存中缓存

2. 安全风险分析

风险类型解决方案
未授权访问配置 xpack.security.http.ssl.enabled: true
数据泄露使用 TLS 加密传输
弱密码策略配置 xpack.security.http.ssl.key: /path/to/cert.pem

3. 索引生命周期管理

PUT /_ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "hot": {
        "min_age": "0d",
        "actions": {
          "rollover": {
            "max_size": "50gb"
          }
        }
      },
      "warm": {
        "min_age": "7d",
        "actions": {
          "tier": {
            "name": "warm",
            "storage": "fs"
          }
        }
      },
      "delete": {
        "min_age": "30d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

九、常见问题与踩坑

1. 常见错误及解决办法

错误原因解决方案
集群状态为 red分片未分配检查 discovery.seed_hosts 配置
内存不足未配置内存限制设置 ES_HEAP_SIZE 环境变量
认证失败密码错误检查 elasticsearch-users 配置
节点无法加入网络不通检查防火墙规则

2. 典型问题分析

问题:集群无法发现新节点

分析:

  • 检查 discovery.seed_hosts 是否包含新节点IP
  • 确认新节点的 elasticsearch.yml 配置正确
  • 查看日志文件 /var/log/elasticsearch/elasticsearch.log

解决方法:

# 查看日志
tail -f /var/log/elasticsearch/elasticsearch.log

十、最佳实践

1. 推荐配置方案

项目推荐配置
节点数量3-5个节点
分片数量3-5个分片
副本数量1-2个副本
安全措施启用HTTPS和角色认证
监控系统部署 Elasticsearch 的监控插件

2. 推荐工具

  • Prometheus + Grafana:监控集群指标
  • ELK Stack:日志收集和分析
  • Elasticsearch Reindex API:数据迁移

3. 推荐部署方式

方式适用场景
单节点测试环境
多节点生产环境
Docker快速部署
K8s容器化部署

十一、总结

Elasticsearch 集群部署和 Kibana 安全配置是构建现代数据处理系统的关键环节。通过合理配置集群参数、设置账号密码、启用安全机制,可以有效提升系统稳定性和安全性。在实际应用中,需要根据业务需求选择合适的部署方案,同时注意避免常见的配置错误和性能瓶颈。对于高并发、大数据量的场景,建议采用多节点集群+HTTPS+角色认证的组合方案,以确保系统的可用性和安全性。

评论已关闭

推荐阅读

AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日
python之plot()和subplot()画图
2024年11月26日
理解 DALL·E 2、Stable Diffusion 和 Midjourney 工作原理
2024年12月01日