Docker容器化打造elasticsearch8.18.2集群企业实战(含kibana+证书认证)

 主机信息

        主机配置4Core8GB硬盘大于80GB

主机名IP地址角色
10-0-17-12310.0.17.123es-node1
10-0-17-15810.0.17.158es-node2
kibana-15610.0.17.156kibana

一、环境准备

1. 安装 Docker

这里就不介绍如何安装docker了,本文docker版本为20+

2. 主机名与网络与内核配置

在三台主机的 /etc/hosts 中添加:

10.0.17.123   10-0-17-123
10.0.17.158   10-0-17-158
10.0.17.156   kibana-156

在三台主机的/etc/sysctl.conf 添加

net.ipv4.ip_forward = 1
vm.max_map_count=262144

在 /etc/security/limits.conf 添加

* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096

最后执行 sysctl -p 生效。

3. 目录结构(在每台 ES 主机上都创建)

useradd elasticsearch
mkdir -p /opt/es/{data,config,certs}
chown -R elasticsearch:elasticsearch /opt/es

在 Kibana 主机上创建:

mkdir -p /opt/kibana/{config,certs}
chown -R elasticsearch:elasticsearch /opt/kibana

二、生成 CA 和节点/Kibana 证书

推荐在一台临时主机(或任一 ES 节点)上统一生成并分发证书。

1. 生成 CA

docker run --rm -v /opt/es/certs:/certs \docker.elastic.co/elasticsearch/elasticsearch:8.18.2 \elasticsearch-certutil ca --pem --out /certs/elastic-stack-ca.zip
# 解压
unzip /opt/es/certs/elastic-stack-ca.zip -d /opt/es/certs

2. 生成 ES 节点证书

/opt/es/certs/instances.yml 中写入:

instances:- name: "10-0-17-123"ip: ["10.0.17.123"]dns: ["10-0-17-123"]- name: "10-0-17-158"ip: ["10.0.17.158"]dns: ["10-0-17-158"]

然后执行:

docker run --rm -v /opt/es/certs:/certs \docker.elastic.co/elasticsearch/elasticsearch:8.18.2 \elasticsearch-certutil cert --in /certs/instances.yml \--ca-cert /certs/ca/ca.crt --ca-key /certs/ca/ca.key \--pem --out /certs/es-nodes.zip

解压: 

unzip /opt/es/certs/es-nodes.zip -d /opt/es/certs

3. 生成 Kibana 客户端证书

mkdir /opt/kibana/chown -R elasticsearch:elasticsearch /opt/kibana/docker run --rm -v /opt/kibana/certs:/certs -v /opt/es/certs/ca:/ca \docker.elastic.co/elasticsearch/elasticsearch:8.18.2 \elasticsearch-certutil cert --name kibana --dns kibana-node --ip 10.0.0.156 \--ca-cert /ca/ca.crt --ca-key /ca/ca.key \--pem --out /certs/kibana.zip
# 解压
unzip /opt/kibana/certs/kibana.zip -d /opt/kibana/certs

说明:生成后,将 /opt/es/certs 下所有文件(ca.crtca.key、各节点证书和私钥)分发到两台 ES 主机的 /opt/es/certs;将 Kibana 证书和 CA 证书拷贝到 Kibana 主机的 /opt/kibana/certs

三、配置 Elasticsearch

1. 编辑 /opt/es/config/elasticsearch.yml

在两台 ES 主机(10.0.0.123、10.0.0.158)上,编辑 /opt/es/config/elasticsearch.yml

[root@10-0-17-123 ~]# cat /opt/es/config/elasticsearch.yml 
cluster.name: es-cluster
node.name: ${HOSTNAME}
network.host: 0.0.0.0node.roles: [ "master", "data", "ingest" ]discovery.seed_hosts:- "10.0.17.123"- "10.0.17.158"
cluster.initial_master_nodes:- "10-0-17-123"- "10-0-17-158"xpack.security.enabled: truexpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.key:          certs/10-0-17-123/10-0-17-123.key
xpack.security.transport.ssl.certificate:  certs/10-0-17-123/10-0-17-123.crt
xpack.security.transport.ssl.certificate_authorities: [ "certs/ca/ca.crt" ]xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.key:              certs/10-0-17-123/10-0-17-123.key
xpack.security.http.ssl.certificate:      certs/10-0-17-123/10-0-17-123.crt
xpack.security.http.ssl.certificate_authorities: [ "certs/ca/ca.crt" ]

 在158机器也就是另外一台ES机器上面只需要将certs的主机名和文件的123替换为158即可,注意,这一步不能出错。

2. ES服务的目录结构 

这是我自己ES服务的目录结构 

[root@10-0-17-123 ~]# tree /opt/es/
/opt/es/
├── certs
│   ├── 10-0-17-123
│   │   ├── 10-0-17-123.crt
│   │   └── 10-0-17-123.key
│   ├── 10-0-17-158
│   │   ├── 10-0-17-158.crt
│   │   └── 10-0-17-158.key
│   ├── ca
│   │   ├── ca.crt
│   │   └── ca.key
│   └── instances.yml
├── config
│   └── elasticsearch.yml

 四、使用 Docker CLI 启动 ES 容器

docker run -d \--name es-158 \--network host \-e ES_JAVA_OPTS="-Xms6g -Xmx6g" \-e ELASTIC_PASSWORD="Novacao666" \-v /opt/es/data:/usr/share/elasticsearch/data \-v /opt/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro \-v /opt/es/certs:/usr/share/elasticsearch/config/certs:ro \elasticsearch:8.18.2

在另外一台ES服务启动命令是一样的,唯一变化的地方是容器的name。可以自定义,但最好两个ES服务name不要一样。

提示

  • ELASTIC_PASSWORD:设置内置 elastic 用户密码,用于 Kibana 认证。

  • 确保宿主机有足够的内存,并按需调整 ES_JAVA_OPTS

 最好不要低于1GB,如有报错那最好就是2GB以上。

五、配置与启动 Kibana

在 10.0.17.156 主机上,编辑 /opt/kibana/config/kibana.yml: 

[root@kibana-156 ~]# cat /opt/kibana/config/kibana.yml 
server.name: kibana-node
server.host: "0.0.0.0"elasticsearch.hosts:- "https://10.0.17.123:9200"- "https://10.0.17.158:9200"# TLS 证书验证配置
elasticsearch.ssl.certificateAuthorities:- "/usr/share/kibana/config/certs/ca.crt"elasticsearch.ssl.certificate: "/usr/share/kibana/config/certs/kibana.crt"
elasticsearch.ssl.key: "/usr/share/kibana/config/certs/kibana.key"# 校验证书和主机名
elasticsearch.ssl.verificationMode: full

这里直接使用ES生成的CA证书认证,所有就不用使用ES的用户和密码认证啦~

1. kibana的目录结构

[root@kibana-156 ~]# tree /opt/kibana/
/opt/kibana/
├── certs
│   ├── ca.crt
│   ├── kibana.crt
│   └── kibana.key
└── config└── kibana.yml2 directories, 4 files

 2. 启动kibana

docker run -d \--name kibana \--network host \-v /opt/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml:rw \-v /opt/kibana/certs:/usr/share/kibana/config/certs:ro \kibana:8.18.2

六、验证与后续

1. 验证集群健康

[root@10-0-17-123 config]# curl -k -u elastic:string@1307 https://10.0.17.123:9200/_cat/nodes
10.0.17.158 19 61 4 0.35 0.39 0.20 dim * 10-0-17-158
10.0.17.123 15 75 8 0.84 0.57 0.42 dim - 10-0-17-123
[root@10-0-17-123 config]# curl -k https://10.0.17.123:9200/_cluster/health?pretty -u elastic:string@1307
{"cluster_name" : "es-cluster","status" : "green","timed_out" : false,"number_of_nodes" : 2,"number_of_data_nodes" : 2,"active_primary_shards" : 3,"active_shards" : 6,"relocating_shards" : 0,"initializing_shards" : 0,"unassigned_shards" : 0,"unassigned_primary_shards" : 0,"delayed_unassigned_shards" : 0,"number_of_pending_tasks" : 0,"number_of_in_flight_fetch" : 0,"task_max_waiting_in_queue_millis" : 0,"active_shards_percent_as_number" : 100.0
}

2. 访问kibana

浏览器打开 https://10.0.17.156:5601,使用 elastickibana_system 用户登录。 

3. 持久化与备份

  • 定期备份 /opt/es/data

  • 监控节点资源(CPU、内存、磁盘 I/O)

至此,您已完成基于 Docker CLI 的 Elasticsearch 双节点集群与 Kibana 的 TLS 安全部署。如有自定义需求(如 X-Pack 高级功能、快照、监控等),可在此基础上继续扩展。祝部署顺利!

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

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

相关文章

JAVA语言的学习(Day_1)

写一个项目并运行: 第一步:新建一个.txt文本。右击点开用Notepad打开,并编辑。 编辑并保存后,可以在文件的查看中,显示出文件的类型(eg: .txt / .java)。将txt文本的.txt类型改为.java。 之后在下面的截…

JS 原型与原型链详解

JavaScript 原型与原型链详解 文章目录 JavaScript 原型与原型链详解一、基础概念类1.1 什么是原型?JavaScript 中如何访问一个对象的原型?1.2 构造函数、实例对象和原型对象之间的关系是什么?1.3 prototype 和 **proto** 的区别是什么&#…

DEVICENET转MODBUS TCP网关连接DeviceNet数字远程IO模块配置案例

设备与网络架构,主控设备:支持Modbus TCP协议的PLC(如西门子S7-1200)。网关设备:开疆智能Modbus TCP转DeviceNet网关KJ-DVCZ-MTCPS(需支持DeviceNet从站功能)。目标设备:DeviceNet数…

Ubuntu下使用PyTurboJPEG加速图像编解码

目录 一、概述 二、安装PyTurboJPEG 三、测试 一、概述 在计算机视觉领域,图像编解码是绕不开的基础环节。虽然 OpenCV 能解决大部分图像处理问题,但在性能要求严苛的场景下存在短板。本文将介绍基于 libjpeg-turbo 的高效 JPEG 编解码库 PyTurboJPE…

MCU、MPU、GPU、Soc、DSP、FPGA、CPLD……它们到底是什么?

MCU、MPU、GPU、Soc、DSP、FPGA、CPLD…… 这些简称在各大论坛、会议、发布会中屡见不鲜,看到简称,虽然也能说出大概; 但要问具体是什么?用在什么场景?又有什么区别……好像还是差点意思;本篇文章就记录一…

Django RBAC项目后端实战 - 03 DRF权限控制实现

项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…

[网页五子棋][用户模块]数据库设计和配置(MyBatis)、约定前后端交互接口、服务器开发

文章目录 数据库数据库设计配置 MyBatis1. Spring 配置2. 创建实体类3. 创建 Mapper 接口4. 使用 MyBatis 约定前后端交互接口登录接口注册接口获取用户信息 服务器开发loginregistergetUserInfo完整代码 数据库 数据库设计 完成注册登录以及用户分数管理 使用数据库来保存上…

Qt/C++学习系列之列表使用记录

Qt/C学习系列之列表使用记录 前言列表的初始化界面初始化设置名称获取简单设置 单元格存储总结 前言 列表的使用主要基于QTableWidget控件,同步使用QTableWidgetItem进行单元格的设置,最后可以使用QAxObject进行单元格的数据读出将数据进行存储。接下来…

防火墙通常可以分为哪些类型?

防火墙是目前保护网络安全的重要设备,能够通过监控、过滤和控制进出网络的数据流量,来保护内部网络不会受到未经授权的IP地址进行访问和恶意的网络威胁,设置防火墙能够帮助企业确保网络的安全性,同时防火墙也会根据不同的功能来划…

基于GeoTools的道路相交多个点容差冗余计算实战

目录 前言 一、关于道路相交 1、相交四个点 2、点更多的情况 二、基于距离的相交点去重 1、冗余距离计算 2、调用过程 3、去重后的结果 三、总结 前言 在地理信息系统(GIS)领域,道路网络数据的处理与分析一直是关键课题。随着城市化进…

android:foregroundServiceType详解

在 Android 中,foregroundServiceType 是用于声明前台服务类型的属性,主要从 Android 10(API 29)开始引入,并在 Android 11(API 30)及更高版本 中进一步细化。以下是所有可用的 foregroundServi…

React+Taro 微信小程序做一个页面,背景图需贴手机屏幕最上边覆盖展示

话不多说 直接上图 第一步 import { getSystemInfoSync } from tarojs/taro;第二步 render() {const cardBanner getImageUrlByGlobal(member-merge-bg.png);const { safeArea, statusBarHeight } getSystemInfoSync();const NAV_BAR_HEIGHT 44;const navBarHeight NAV…

从零开始的云计算生活——番外,实战脚本。

目录 题目一:系统信息收集脚本 题目二:用户管理配置脚本 题目三:磁盘空间管理脚本 题目四:网络配置检查脚本 题目五:系统日志分析脚本 题目一:系统信息收集脚本 编写一个脚本名为 collect_system_info…

MySQL基础知识(DDL、DML)

什么是数据库? 数据库:英文为 DataBase,简称DB,它是存储和管理数据的仓库。 注释: 单行注释:-- 注释内容 或 # 注释内容(MySQL特有)多行注释: /* 注释内容 */ 分类 SQL语句根据其功能被分为…

用volatile修饰数组代表什么意思,Java

文章目录 volatile 修饰数组引用的含义volatile 对数组元素无效总结 如何让数组元素也具有 volatile 特性? 当用 volatile 关键字修饰一个数组时,它只保证数组引用的可见性和部分原子性,而不保证数组元素的可见性和原子性。 换句话说&#x…

Ubuntu 24.04 LTS 长期支持版发布:对服务器用户意味着什么?新特性、升级建议与性能影响初探

更多云服务器知识,尽在hostol.com 在服务器运维的广阔世界里,每一次主流操作系统长期支持(LTS)版本的发布,都无异于一次重要的“时代交替”。它不仅带来了一系列令人瞩目的技术革新,更重要的是&#xff0c…

题目 3241: 蓝桥杯2024年第十五届省赛真题-挖矿

题目 3241: 蓝桥杯2024年第十五届省赛真题-挖矿 时间限制: 3s 内存限制: 512MB 提交: 1267 解决: 224 题目描述 小蓝正在数轴上挖矿,数轴上一共有 n 个矿洞,第 i 个矿洞的坐标为 ai 。小蓝从 0 出发,每次可以向左或向右移动 1 的距离&#xf…

vue3+ts+vite创建的后台管理系统笔记

Vue3+ Vite + Element-Plus + TypeScript 从0到1搭建企业级后台管理系统(前后端开源):参考有来科技学习搭建项目 创建项目bug汇总,知识点src 路径别名配置和tsconfig.json文件报错【这个不配置好,会引起其他页面引用时报错:见--整合 Pinia】:整合 Pinia 【参考-- src 路径…

指针01 day13

十三:指针变量 一:数据类型 ​ 指针类型---------对应处理的数据是指针 (地址)这种数据 ​ 整型类型---------对应处理的数据是整数这种类型 二:定义指针类型的变量 ​ 语法: 基类型(1) *(…

基于深度学习的智能文本生成:从模型到应用

前言 随着人工智能技术的飞速发展,自然语言处理(NLP)领域取得了显著的进展。其中,智能文本生成技术尤其引人注目。从聊天机器人到内容创作,智能文本生成不仅能够提高效率,还能创造出令人惊叹的内容。本文将…