如何使用Docker搭建ES集群

news2025/7/28 0:55:34

1、配置虚拟机

1.1、设置内存

将虚拟机内存设置为4G,内存太小可能导致某个ES节点无法正常运行;

1.2、修改limits.conf

limits.conf文件可以设置用户最大可创建文件的数量

a、执行vi /etc/security/limits.conf命令—>文件末尾添加如下内容:

* soft nofile 65536
* hard nofile 131072

b、保存文件;

注意

如果不设置用户最大可创建文件的数量,则elasticsearch启动时出现如下信息:

…省略…
ERROR: [3] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
…省略…
1.3、修改sysctl.conf

sysctl.conf文件可以设置最大虚拟内存

a、执行vi /etc/sysctl.conf命令—>文件末尾添加如下内容:

vm.max_map_count=655360

b、保存文件;

c、执行sysctl -p命令,该命令用于在Linux内核处于运行状态时动态地修改内核的运行参数;-p用于从 “/etc/sysctl.conf”配置文件中加载内核参数设置;

注意

如果不设置最大虚拟内存,则elasticsearch启动时出现如下信息:

…省略…
ERROR: [3] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [655360] is too low, increase to at least [262144]
…省略…

2、创建目录

2.1、node_1
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_1/data
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_1/logs
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_1/plugins/ik
2.2、node_2
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_2/data
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_2/logs
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_2/plugins/ik
2.3、node_3
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_3/data
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_3/logs
[root@localhost ~]# mkdir -p /usr/local/es_cluster/node_3/plugins/ik
2.4、目录结构
[root@localhost ~]# yum -y install tree
[root@localhost ~]# tree /usr/local/es_cluster
[root@localhost ~]#

3、分词器

3.1、下载

访问https://github.com/medcl/elasticsearch-analysis-ik/releases—>由于elasticsearch版本为7.9.3,所以这里下载elasticsearch-analysis-ik-7.9.3.zip

3.2、上传

将压缩包上传至Linux系统/opt目录

3.3、解压
[root@localhost ~]# unzip /opt/elasticsearch-analysis-ik-7.9.3.zip -d /usr/local/es_cluster/node_1/plugins/ik
[root@localhost ~]# unzip /opt/elasticsearch-analysis-ik-7.9.3.zip -d /usr/local/es_cluster/node_2/plugins/ik
[root@localhost ~]# unzip /opt/elasticsearch-analysis-ik-7.9.3.zip -d /usr/local/es_cluster/node_3/plugins/ik
3.4、删除文件
[root@localhost ~]# rm -f /opt/elasticsearch-analysis-ik-7.9.3.zip

4、Docker环境

视频教程:https://www.bilibili.com/video/BV1xv4y1S7kA

5、ES集群

5.1、搜索镜像

镜像网址:https://hub.docker.com/r/elastic/elasticsearch/tags?page=1&ordering=last_updated

5.2、拉取镜像
[root@localhost ~]# docker pull elasticsearch:7.9.3
7.9.3: Pulling from library/elasticsearch
75f829a71a1c: Pull complete
...省略...
817feb91b55c: Pull complete
Digest: sha256:a13cd87cbf139fadbca64972ef2c8777222236887d303e4177c1ab7cff1b52f6
Status: Downloaded newer image for elasticsearch:7.9.3
docker.io/library/elasticsearch:7.9.3
[root@localhost ~]#
5.3、创建并启动ES容器:

node-1

docker run -d \
--name=es_node_1 \
--restart=always \
-p 9201:9200 \
-p 9301:9300 \
--privileged=true \
-v /usr/local/es_cluster/node_1/data:/usr/share/elasticsearch/data \
-v /usr/local/es_cluster/node_1/logs:/usr/share/elasticsearch/logs \
-v /usr/local/es_cluster/node_1/plugins:/usr/share/elasticsearch/plugins \
-e "cluster.name=my-cluster" \
-e "node.name=node-1" \
-e "node.master=true" \
-e "node.data=true" \
-e "network.host=0.0.0.0" \
-e "transport.tcp.port=9300" \
-e "http.port=9200" \
-e "cluster.initial_master_nodes=node-1" \
-e "discovery.seed_hosts=192.168.1.100:9301,192.168.1.100:9302,192.168.1.100:9303" \
-e "gateway.auto_import_dangling_indices=true" \
-e "http.cors.enabled=true" \
-e "http.cors.allow-origin=*" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "TAKE_FILE_OWNERSHIP=true" \
elasticsearch:7.9.3

说明:

-p:指定端口映射,格式:主机(宿主)端口:容器端口

-e:指定容器环境变量,上述各环境变量含义如下:

cluster.name:配置es集群名称,默认为elasticsearch,同一网段下的不同ES集群通过集群名来区分;
node.name:节点名称,一个或多个节点组成一个cluster集群,集群是一个逻辑的概念,节点是物理概念
node.master:是否可以成为master节点
node.data:是否允许该节点存储数据,默认开启
network.host:绑定主机的ip地址,允许外网访问,同一网段下的ES会自动加入该集群中
transport.tcp.port:设置集群节点之间交互的tcp端口
http.port:设置http端口
cluster.initial_master_nodes:设置哪些ES节点参与第一次master节点选举,其值可以是ES节点IP地址(如:192.168.1.100或192.168.1.100:9300),也可以是ES节点名称
discovery.seed_hosts:设置当前节点与哪些ES节点建立连接,其值可以是127.0.0.1
gateway.auto_import_dangling_indices:是否自动引入dangling索引,默认false
#支持跨域访问:kibana或elasticsearch-head插件作为客户端要连接ES服务(http://192.168.1.100:9200),此时存在跨域问题,elasticsearch默认不允许跨域访问
http.cors.enabled:开启cors跨域访问支持,默认为false
http.cors.allow-origin:跨域访问允许的域名地址:允许所有域名
ES_JAVA_OPTS=-Xms512m -Xmx512m:ES使用Java语言开发,默认jvm为2G,这里通过ES_JAVA_OPTS设置jvm最大最小内存。

node-2

docker run -d \
--name=es_node_2 \
--restart=always \
-p 9202:9200 \
-p 9302:9300 \
--privileged=true \
-v /usr/local/es_cluster/node_2/data:/usr/share/elasticsearch/data \
-v /usr/local/es_cluster/node_2/logs:/usr/share/elasticsearch/logs \
-v /usr/local/es_cluster/node_2/plugins:/usr/share/elasticsearch/plugins \
-e "cluster.name=my-cluster" \
-e "node.name=node-2" \
-e "node.master=true" \
-e "node.data=true" \
-e "network.host=0.0.0.0" \
-e "transport.tcp.port=9300" \
-e "http.port=9200" \
-e "discovery.seed_hosts=192.168.1.100:9301,192.168.1.100:9302,192.168.1.100:9303" \
-e "gateway.auto_import_dangling_indices=true" \
-e "http.cors.enabled=true" \
-e "http.cors.allow-origin=*" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "TAKE_FILE_OWNERSHIP=true" \
elasticsearch:7.9.3

node-3

docker run -d \
--name=es_node_3 \
--restart=always \
-p 9203:9200 \
-p 9303:9300 \
--privileged=true \
-v /usr/local/es_cluster/node_3/data:/usr/share/elasticsearch/data \
-v /usr/local/es_cluster/node_3/logs:/usr/share/elasticsearch/logs \
-v /usr/local/es_cluster/node_3/plugins:/usr/share/elasticsearch/plugins \
-e "cluster.name=my-cluster" \
-e "node.name=node-3" \
-e "node.master=true" \
-e "node.data=true" \
-e "network.host=0.0.0.0" \
-e "transport.tcp.port=9300" \
-e "http.port=9200" \
-e "discovery.seed_hosts=192.168.1.100:9301,192.168.1.100:9302,192.168.1.100:9303" \
-e "gateway.auto_import_dangling_indices=true" \
-e "http.cors.enabled=true" \
-e "http.cors.allow-origin=*" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "TAKE_FILE_OWNERSHIP=true" \
elasticsearch:7.9.3
5.4、容器状态
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS                                                                                    NAMES
2a189b6ec877   elasticsearch:7.9.3   "/tini -- /usr/local…"   17 seconds ago   Up 15 seconds   0.0.0.0:9203->9200/tcp, :::9203->9200/tcp, 0.0.0.0:9303->9300/tcp, :::9303->9300/tcp   es_node_3
ccbd3ea5fcbc   elasticsearch:7.9.3   "/tini -- /usr/local…"   33 seconds ago   Up 30 seconds   0.0.0.0:9202->9200/tcp, :::9202->9200/tcp, 0.0.0.0:9302->9300/tcp, :::9302->9300/tcp   es_node_2
0ad78a6a5258   elasticsearch:7.9.3   "/tini -- /usr/local…"   48 seconds ago   Up 47 seconds   0.0.0.0:9201->9200/tcp, :::9201->9200/tcp, 0.0.0.0:9301->9300/tcp, :::9301->9300/tcp   es_node_1
[root@localhost ~]#

6、开放端口

6.1、添加端口
[root@localhost ~]# firewall-cmd --add-port=9201/tcp --add-port=9202/tcp --add-port=9203/tcp --permanent
[root@localhost ~]# firewall-cmd --add-port=9301/tcp --add-port=9302/tcp --add-port=9303/tcp --permanent
6.2、重新加载
[root@localhost ~]# firewall-cmd --reload
6.3、查看放行端口
[root@localhost ~]# firewall-cmd --list-ports

7、数据包转发

7.1、编辑文件:

[root@localhost ~]# vi /usr/lib/sysctl.d/50-default.conf

7.2、末尾添加net.ipv4.ip_forward = 1

7.3、重启network:

[root@localhost ~]# systemctl restart network

注意

Linux默认不允许数据包转发,此时执行docker run时出现如下警告:

...省略...
WARNING: IPv4 forwarding is disabled. Networking will not work. 
上面警告将导致无法远程访问该docker容器

8、验证

启动浏览器—>地址栏输入http://192.168.1.100:9201/_cat/nodes?pretty—>点击Enter键,如下图:

在这里插入图片描述

说明:节点名称带*表示为主节点;

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

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

相关文章

计算机毕业设计ssm+vue+elementUI 基于vue的消防物资存储系统

项目介绍 无论是什么行业物资存储都是一个非常重要的内容,只有有了这些良好的物资存储,才能够为后续的工作开展提供便利。消防是一个关系到人民群众安全的工作,所以在消防相关方面的物资存储也是非常重要的内容。为了能够更好的管理好消防相…

电压放大器如何选择型号规格(电压放大器选型标准)

电压放大器是搭配信号发生器来组合使用的电子仪器,使用时通过简单的设备连接,就能拓展信号源的输入电压幅度范围。高电压放大器的快速响应不仅是表现在功率放大器的宽带和压摆率等参数上,同时还和最大输出电流以及负载的电容特性有关系。下面…

48-安装软件并管理服务

48-安装软件并管理服务RPM的概念和操作命令RPM软件包管理RPM软件包管理优缺点RPM命令常用参数DNF的该您概念和操作命令DNF工具的产生DNF工具概述DNF管理软件包DNF-软件源服务DNF配置文件-/etc/dnf/dnf.conf配置DNF-修改配置参数创建本地软件源仓库添加软件源启用和禁用软件源管…

BFS广度优先

题目描述如下: 使用邻接矩阵实现BFS: 输入 8,10 1 2 3 4 5 6 7 8 1,2 1,5 2,6 3,6 3,4 3,7 4,7 4,8 6,7 7,8 2 输出 请输入顶点数和边数:请输入顶点本身的数据: 请输入边的数据: 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 1 1 1 0 0…

Winsoft Office Component Suite

Winsoft Office Component Suite Winsoft Office组件套件是由Winsoft发布的海豚和CBuilder公司的集合。这些计算机可用于在microsoft office集合中实现自动化和自动操作。从2010年到2019年,这些活动几乎支持了Office的所有现代版本,并提供了两种软件和氧…

掌控安全学院SOL注入靶场

掌控安全学院SOL注入靶场靶场地址Pass-01 显错注入Pass-02Pass-03Pass-04Pass-05 POST注入Pass-06Pass-07 Head注入Pass-08Pass-09Pass-10 布尔盲注Pass-11Pass-12Pass-13 延时注入Pass-14Pass-15 宽字节注入Pass-16Pass-17总结靶场地址 http://inject2.lab.aqlab.cn Pass-01…

[Python] Django ORM与执行原生SQL实现操作数据库

前言 系列文章目录 [Python]目录 文章目录前言🍉 ORM🍉 shell🍉 模型类与数据的准备🍒 模型类🍒 数据🍉 查询数据🍒 查询集🍓 查询集的特性🍎 惰性执行🍎 缓存…

PDF文件如何设置密码保护?

接近年底,各种总结报告越来越多,很多时候我们都会将报告做成PDF文件格式,对于重要的内容,往往还需要设置密码保护。 根据不同的需要,可以给PDF文件设置两种保护模式。 如果文件内容只分享给特定的人看,不…

qt调用python脚本中的函数

开发环境: qt 5.9.9 vs2015 python 3.6 例程下载: qt调用python脚本例程.rar 步骤一:创建python脚本文件 创建文本文件myPythonFile.py,内容如下: 步骤二:创建qt widget测试例程并运行 新建qt wi…

请不要忽略软件测试的业务能力

在日常的测试工作中,不知道大家是否会有梳理自己测试业务的习惯。我个人觉得这个事情是值得做的,最好还可以培养成一个习惯。一、为什么要梳理业务?因为在业务测试中,作为测试人员,熟悉负责的业务是非常重要的&#xf…

ats 6.2.3中diags.log日志滚存遇到的assert崩溃问题并解决

现在线上ats 6.2.3现在都开启了diags.log日志回滚的功能,采用下面的配置方法 CONFIG proxy.config.diags.logfile.rolling_enabled INT 3 CONFIG proxy.config.diags.logfile.rolling_interval_sec INT 86400 CONFIG proxy.config.diags.logfile.rolling_size_mb…

Web前端——立体相册的制作

文章目录笔记&#xff1a;CSS的特殊样式作业&#xff1a;用CSS的特殊样式制作立体相册笔记&#xff1a;CSS的特殊样式 media查询 常⽤于响应式布局&#xff0c;是⽬前使⽤最多的适配⻚⾯的技术。他会根据⻚⾯的尺⼨的不同&#xff0c;⽽是⽤不同的样式。 <style>media…

LeetCode50天刷题计划第二季(Day 31 — 两数之和 II - 输入有序数组(11.10-11.20)分数到小数(11.30-12.30)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、题目两数之和 II - 输入有序数组示例提示二、思路三、代码四、题目分数到小数示例提示五、思路六、代码前言 没看出来跟 两数之和 I 有什么区别 一、题目 …

码农死磕这份Java高级开发文档,成功‘挤‘进一线大厂,这也太强了吧

前言 很多程序员一开始在学习上找不到方向&#xff0c;但我想在渡过了一段时间的新手期之后这类问题大多都会变得不再那么明显&#xff0c;工作的方向也会逐渐变得清晰起来。 但是没过多久&#xff0c;能了解到的资料就开始超过每天学习的能力&#xff0c;像是买了没看的书、…

内网渗透神器CobaltStrike之重定向服务配置(二)

重定向服务的概念 "重定向"是一个在CS服务器与目标主机进行网络传输之间的服务器, 不仅能保护CS服务器, 还能增强与目标网络传输的稳定性, 例如某一台重定向服务器倒塌了, 但是CS服务器还是能通过其他重定向服务器与目标网络进行信息传输 环境拓扑 域名: team.comD…

ELSEVIER期刊论文投稿全流程实例讲解

Elsevier期刊模板下载 从ELSEVIER搜索要投的期刊&#xff0c;进入期刊主页 https://www.elsevier.com/search-results?queryFuel

【附源码】Python计算机毕业设计体育场馆预定网站

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

基于随机森林算法完成鸢尾花卉品种预测任务 代码+数据

1.理论部分 随机森林(Random Forest),顾名思义,就是由很多决策树模型融合在一起的算法。 随机森林是一种运用了集成学习(ensemble learning)的决策树分类器。 随机森林是一种基于Bagging框架的模型融合算法,如图1.2所示。它通过多个基础的决策树模型进行训练,如何通过…

Android App事件交互中区分点击和长按动作以及识别手势滑动方向的讲解及实战(附源码 可直接使用)

运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一、区分点击和长按动作 区分点击和长按动作&#xff0c;只要看按压时长是否超过500毫秒即可&#xff0c;没超过的表示点击动作&#xff0c;超过了的表示长按动作。其实除了按压时长之外&#xff0c;按压力度也是一个重要的…

Isaac-gym(5):关于强化学习

官方链接&#xff1a; https://github.com/NVIDIA-Omniverse/IsaacGymEnvs 1、环境建立示例 import isaacgym import isaacgymenvs import torchenvs isaacgymenvs.make(seed0, task"Ant", #对应执行时用到的名称num_envs2000, sim_device"cuda:0"…