elasticsearch集群部署-实操

elasticsearch(集群)

案例版本:elasticsearch 8.6.2

操作系统:CentOS 7

注意:全程使用普通用户操作。

0、节点信息

节点描述
192.168.127.10master
192.168.127.11slave
slave02

1、环境配置

1.1 修改文件 /etc/security/limits.conf

# 添加以下内容
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536# 重启服务配置
systemctl daemon-reload

1.2 修改文件 /etc/sysctl.conf

​ 系统虚拟内存默认最大映射数为65530,无法满足ES系统要求,需要调整为262144以上。

vm.max_map_count=655360
# 重新加载生效
sysctl -p

1.3 调整JVM运行内存

​ 修改使用的内存。可以视内存情况设定,生产一般建议是机器内存的一半,且不超过32G。

vi elasticsearch-8.6.2/config/jvm.options
# 新增
-Xms2g
-Xmx2g

2、上传解压

# 所有节点上传安装目录并解压
tar -zxvf elasticsearch-6.8.23.tar.gz

3、密码证书认证设置

3.1 生成证书

# 进入安装bin目录
cd elasticsearch-8.6.2/
./bin/elasticsearch-certutil ca
# 第一个是描述,不填跳过;第二是密码,输入123456(设置自己的密码)
# 会生成elastic-stack-ca.p12的文件

3.2 生成密钥

./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
# 输入上一步的密码123456,要输入路径直接回车,生成在当前目录下

3.3 迁移凭证地址到config目录下

# 创建目录
mkdir ./config/certs
# 移动凭证至指定目录下
mv ./elastic-certificates.p12 ./config/certs/# 移动凭证至集群其他节点
scp config/certs/elastic-certificates.p12 user@192.168.127.11:/home/elasticsearch/elasticsearch-8.6.2/config/certs/

3.4 各个集群节点都添加keystore密码

# 输入生成证书时的密码:123456
./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

4、elasticsearch.yml配置

master配置:

# 集群名称
cluster.name: my-application
# 结点名称 多个结点名称不同
node.name: node_1
# 日志和索引存储地址
path.data: /home/elasticsearch/es_data
path.logs: /home/elasticsearch/es_logs
# 服务器地址
network.host: 192.168.127.10
# 端口号
http.port: 9200
# 其他结点的路径
discovery.seed_hosts: ["192.168.127.10", "192.168.127.11"]
cluster.initial_master_nodes: ["node_1", "node_2"]# 设置证书密码访问 下面会说怎么生成证书
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /home/elasticsearch/elasticsearch-8.6.2/config/certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /home/elasticsearch/elasticsearch-8.6.2/config/certs/elastic-certificates.p12# 服务器启动会主动连接GeoLite2(一种免费的IP地理位置数据库),不需要时禁用,不然会报错
ingest.geoip.downloader.enabled: false

slave配置(如果多个节点,根据需要同样配置多个就行):

# 集群名称
cluster.name: my-application
# 结点名称 多个结点名称不同
node.name: node_2
# 日志和索引存储地址
path.data: /home/elasticsearch/es_data
path.logs: /home/elasticsearch/es_logs
# 服务器地址
network.host: 192.168.127.11
# 端口号
http.port: 9200
# 其他结点的路径
discovery.seed_hosts: ["192.168.127.10", "192.168.1127.11"]
cluster.initial_master_nodes: ["node_1", "node_2"]# 设置证书密码访问
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /home/elasticsearch/elasticsearch-8.6.2/config/certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /home/elasticsearch/elasticsearch-8.6.2/config/certs/elastic-certificates.p12# 服务器启动会主动连接GeoLite2(一种免费的IP地理位置数据库),不需要时禁用,不然会报错
ingest.geoip.downloader.enabled: false

5、启动ES服务

​ elasticsearch 不要用root用户启动。

cd elasticsearch-6.8.23/bin
./elasticsearch
# 后台启动
./elasticsearch -d

6、设置集群访问密码

需要先正常启动ES服务。
​ 会设置很多密码 elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,这里全部设置成了123456

./bin/elasticsearch-setup-passwords interactive

重置/更新密码

./bin/elasticsearch-reset-password -u elastic

7、浏览器访问

# 可以单独访问每台服务器
# 需要输入账号密码:elastic 123456
http://192.168.127.10:9200
http://192.168.127.11:9200# 查看各节点情况
http://192.168.127.10:9200/_cat/nodes

elasticsearch.yml 配置说明

# ---------------------------------- Cluster -----------------------------------
# 多台服务器同一集群,名称要一致;不同集群,名称要保持唯一性。
cluster.name: my-application	# 集群名称# ------------------------------------ Node ------------------------------------
# 同一集群下节点,要保持唯一性。
node.name: node-1	# 节点名称# 主节点:负责管理集群级别的任务,例如对索引进行分片和副本分配,以及协调节点之间的数据复制和恢复过程。当一个主节点失效时,会重新选举一个新的主节点;一个集群中,最好只有少数几个主节点,以避免过多的选举和资源浪费。
node.master: true	# 是否可以被选举为主节点# 数据节点:在一个集群中,数据节点负责存储和处理数据,即对文档增删改查、聚合等操作。
node.data: true	# 是否可以存储数据
# 为了确保集群的稳定性和可靠性,建议集群中至少设置3个节点。在这种情况下,可以设置2个数据数据,1个主节点。# ----------------------------------- Paths ------------------------------------
# 每个节点应该有一个独立的数据目录。如果要在多个节点建立集群,应该为每个节点设置不同的数据目录。
# 这样可以通过在每个节点上设置不同的路径来实现。这样每个节点的数据都可以独立存储,不会出现冲突,如:
# node1:
#  path.data: /data/es/node1/data
# node2:
#  path.data: /data/es/node2/data
path.data: /path/to/data	# 数据目录# 和数据目录一样,每个节点应该有一个独立的日志目录。可以通过在每个节点上设置不同的路径来实现
path.logs: /path/to/logs	# 日志目录
# 默认es的日志和数据存储放在es的安装目录,这种在升级情况下很容易被删掉。推荐指定非安装目录的路径# ---------------------------------- Network -----------------------------------
# 设置为所在主机ip。帮助每个节点找到其他节点,以便节点能够识别并通信,从而建立集群
network.host: 192.168.0.1	# 节点绑定的IP或域名
#
# network.host: 0.0.0.0 会将节点绑定到所有的网络接口和IP地址上,这可能导致安全和通信问题;
# 安全问题:
#  ES将在所有可用的网络接口上公开,使得它更容易遭受攻击。攻击者可直接通过任何可用的网络接口访问ES,而不需要任何认证和授权。这可能导致数据泄露、损坏和其他问题。
# 通信问题:
#  将ES绑定到所有可用的网络接口上可能导致网络问题。可能出现网络堵塞、延迟和其他通信问题,从而影响集群的性能和可用性。
# 因此,建议将network.host设置为节点的实际IP和主机名,以确保节点绑定到正确的接口和地址。这样每个节点才能找到其他节点,从而建立集群。# 如果同一台设备上运行多个ES,则需要设置不同的值。
# 如果不想使用HTTP API,可以设置 http.port: -1,以禁用API。这将使ES只能通过Transport API进行通信。
# 但,如果使用Kibana或其他工具与ES进行交互,则需要启用HTTP API
http.port: 9200	# HTTP API监听的端口号。http请求端口# --------------------------------- Discovery ----------------------------------
# 集群中节点通信的端口。在构建集群通信时必须有这个配置,否则无法建立通信
transport.tcp.port: 9300# 指定了要用于发现其他节点的主机列表。在建立集群时,可以将已知的节点IP或主机名添加到此列表中
# 默认为空,这意味着节点将不会主动发现其他节点。如果是建立集群,需要设置此项包含其他节点,以便在启动时找到其他节点。
discovery.seed_hosts: ["host1", "host2"]
# 不需要设置端口,因为在ES中节点之间通信默认使用9300端口(传输、协调)和9200端口(用于HTTP REST API)# 指定集群中初始主节点。在启动集群时,必须指定一个或多个初始主节点。默认为“node-1”
# 指定多个节点时,ES会在启动时,会在其中选择一个初始主节点。
# 一般数量为奇数,以便在发生故障时能够进行正确的投票和决策。
cluster.initial_master_nodes: ["node-1", "node-2"]# ---------------------------------- Various -----------------------------------
# 默认为1。这意味着当集群中启动一个节点时,就开始执行恢复操作。但,如果集群节点数量太少,则可能导致性能下降。因此,可以指定启动多少个节点后才开始执行恢复操作,这个设置可以优化集群的性能和可用性。
# 恢复操作是指节点重启或加入集群时,ES自动恢复丢失或损坏的所以分片。索引分片是ES中的基本存储单元,它将索引数据分成多个部分以便分布式存储和处理。
# 当一个节点重启或加入集群时,它会丢失一部分索引分片,导致数据不完整或不可用。为了解决这个问题,ES会自动执行恢复操作,将丢失的分片从其他节点复制回来。
gateway.recover_after_nodes: 3# --------------------------------------------------------------------------------
# 允许来自任何地方的HTTP API连接
# 连接是加密的,需要用户认证
http.host: 0.0.0.0

es部署–常见问题

1、更新地图数据库

1.1 问题

[ERROR][o.e.i.g.GeoIpDownloader] [node-1] exception during geoip databases updateorg.elasticsearch.ElasticsearchException: not all primary shards of [.geoip_databases] index are active
  • 解决

修改 elasticsearch.yml

# ES启动时会去更新地图的一些数据库,直接禁掉即可
ingest.geoip.downloader.enabled: false

2、启动后无法访问

2.1 浏览器无法访问

​ 原因是Elasticsearch在Windows下开启了安全认证,虽然started成功,但访问http://localhost:9200/失败。

[WARN ][o.e.x.s.t.n.SecurityNetty4HttpServerTransport] [node-1] received 
plaintext http traffic on an https channel, closing connection Netty4HttpChannel
{localAddress=/172.168.102.183:9200, remoteAddress=/172.168.161.66:49222}
  • 解决

    修改 elasticsearch.yml

# 把安全认证开关从原先的true都改成false,实现免密登录访问即可
xpack.security.enabled: false	# 改成falsexpack.security.enrollment.enabled: true# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:enabled: false	# 改成falsekeystore.path: certs/http.p12

2.2 其他设备无法访问

​ 本地 curl localhost:9200 成功访问,其它机器通过ip无法访问。

$ vi elasticsearch-6.8.23/config/elasticsearch.yml
# 配置所有用户可访问
network.host: 0.0.0.0

3、启动报错

3.1 which: no java in

$ ./bin/elasticsearch
which: no java in (/opt/gvm/jdk1.8/bin:/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/gvmuser/.local/bin:/home/gvmuser/bin:/home/gvmuser/jdk1.8/bin:/home/gvmuser/jdk1.8/jre/bin)
warning: Falling back to java on path. This behavior is deprecated. Specify JAVA_HOME
could not find java; set JAVA_HOME
  • 解决

    安装jdk。

3.2、max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

ERROR: [1] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
  • 解决
vi /etc/security/limits.conf
# 追加以下内容
* soft nofile 65536
* hard nofile 65536
# 重启服务配置
systemctl daemon-reload
# 或修改后重新登录终端,使其生效

3.3、max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

​ 系统虚拟内存默认最大映射数为65530,无法满足ES系统要求,需要调整为262144以上。

ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
  • 解决
vi /etc/sysctl.conf
#添加参数
vm.max_map_count = 262144#重新加载生效
sysctl -p

4、GeoLite2-ASN.mmdb的数据库

遇到问题的版本:elasticsearch-8.6.2

[ERROR][o.e.i.g.GeoIpDownloader  ] [node-1] error downloading geoip database [GeoLite2-ASN.mmdb]
java.net.SocketTimeoutException: Connect timed out
  • 解决

​ GeoLite2/GeoIP全球ASN-IP离线定位库,官网地址:https://dev.maxmind.com/geoip/geolocate-an-ip?lang=en

​ 现在并不需要这个库,但是elasticsearch启动却需要连接这个库,所以需要将这个连接的配置关闭,让启动的时候不去连接这个库。

vim config/elasticsearch.yml
# 添加配置:
ingest.geoip.downloader.enabled: false

5、无法发现其他节点

master not discovered yet, this node has not previously joined a bootstrapped cluster, and this node must discover master-eligible nodes [node-1, node-2] to bootstrap a cluster: have discovered [{node-1}{l_KqE-gYTimBZbrvK9ijsQ}{2dYWd9TWTyqQToa-g8wB1w}{node-1}{192.168.127.10}{192.168.127.10:9300}{cdfhilmrstw}];  discovery will continue using [192.168.127.11:9300] from hosts providers and [{node-1}{l_KqE-gYTimBZbrvK9ijsQ}{2dYWd9TWTyqQToa-g8wB1w}{node-1}{192.168.127.10}{192.168.127.10:9300}{cdfhilmrstw}] from last-known cluster state;  node term 0, last-accepted version 0 in term 0
  • 解决
# 查看防火墙状态
service firewalld status
# 发现防火墙是开着的 Active: active (running)# 关闭防火墙
service firewalld stop

6、集群UUID

This node is a fully-formed single-node cluster with cluster UUID [ObqnTkiHQiGyFc5H2yywCQ], but it is configured as if to discover other nodes and form a multi-node cluster via the [discovery.seed_hosts=[192.168.127.11]] setting.  Fully-formed clusters do not attempt to discover other nodes, and nodes with different cluster UUIDs cannot belong to the same cluster.  The cluster UUID persists across restarts and can only be changed by deleting the contents of the node's data path(s).  Remove the discovery configuration to suppress this message.
  • 解决

    在新建集群之前启动过,需删除data目录。

7、分词器不能使用

​ 对应找不到 plugin-descriptor.properties文件。

java.lang.IllegalStateException: Could not load plugin descriptor for plugin directory [elasticsearch-analysis-ansj-8.3.3]
Likely root cause: java.nio.file.NoSuchFileException: /home/hd/elasticsearch-8.3.3/plugins/
elasticsearch-analysis-ansj-8.3.3/plugin-descriptor.properties
  • 解决

    原因是压缩包的内容不够完整,下载时应该在官网下载elasticsearch-analysis-ik-版本号.zip,而不是source code.zip与elasticsearch-analysis-ansj-8.3.3.tar.gz。

传送门:【部署ik分词器】
传送门:【部署kibana可视化平台】

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

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

相关文章

中国大学MOOC地下水污染与防治答案

本文转载自 众课帮 众工号 1、下列哪项不属于有机污染物综合指标( ) A、高锰酸盐指数 B、化学需氧量(COD) C、浊度 D、总有机碳(TOC) 答案:浊度 2、饮用水水质指标常说的“两虫”是指( ) A、贾…

【Java】抽奖系统———保姆学习教程

目录 一、抽奖系统介绍 二、代码实现 1、随机生成中奖号码 1.1、中奖号码createNumber方法 1.2、控制判断contains方法 2、用户输入中奖号码 3、判断中奖情况 3.1、判断奖项isWin方法 三、完整代码 一、抽奖系统介绍 抽奖的号码由6个红色球号码和1个蓝色球号码组成。红色…

第24节——react hooks组件传值 - 父子组件之间的传值

一、概念 一句话概括,react hook 父子组件之间通过props进行传值 二、父传子 父组件:在子组件标签上定义属性 子组件:函数组件接收一个props是一个对象,父组件传的属性名就是props对象的key,属性的值就是对应的val…

python实现Flask GET Demo

python代码 from flask import Flask, request, jsonifyapp Flask(__name__)#用/data路径路由 app.route(/data) def get_data():## 以下一行是从URL中获取参数的get方法data request.args.get(data)return jsonify(data data,info "success !",code "200…

十五、垃圾回收相关算法

目录 一、标记阶段:引用计算法对象存活判断引用计算法 二、标记阶段:可达性分析算法三、对象的finalization机制四、MAT和Jprofiler的GC Toots的溯源五、垃圾清除算法之标记-清除算法六、垃圾清除算法之复制算法七、垃圾清除算法之标记-压缩算法八、小结…

智慧园区:AI边缘计算技术与视频监控汇聚平台打造智慧园区解决方案

一、行业趋势与背景 智慧园区是现代城市发展的重要组成部分,通过智能化技术提高园区的运营效率、降低成本、增强环境可持续性等具有重要作用。在智慧园区中,人工智能和视频汇聚技术是重要的前置技术。人工智能技术可以实现对数据的智能化处理和分析&…

时序数据库 TimescaleDB 安装与使用

TimescaleDB 是一个时间序列数据库,建立在 PostgreSQL 之上。然而,不仅如此,它还是时间序列的关系数据库。使用 TimescaleDB 的开发人员将受益于专门构建的时间序列数据库以及经典的关系数据库 (PostgreSQL),所有这些都具有完整的…

2023/9/13 -- C++/QT

作业&#xff1a; 1> 将之前定义的栈类和队列类都实现成模板类 栈&#xff1a; #include <iostream> #define MAX 40 using namespace std;template <typename T> class Stack{ private:T *data;int top; public:Stack();~Stack();Stack(const Stack &ot…

TouchGFX之缓存位图

位图缓存是专用RAM缓冲区&#xff0c;应用可将位图保存&#xff08;或缓存&#xff09;在其中。 如果缓存了位图&#xff0c;在绘制位图时&#xff0c;TouchGFX将自动使用RAM缓存作为像素来源。位图缓存在许多情况下十分有用。 从RAM读取数据通常比从闪存读取要快&#xff08;特…

Linux下Minio分布式存储安装配置(图文详细)

文章目录 Linux下Minio分布式存储安装配置(图文详细)1 资源准备1.1 创建存储目录1.2 获取Minio Server资源1.3 获取Minio Client资源 2 Minio Server安装配置2.1 切换目录2.2 后台启动2.3 查看进程2.4 控制台测试 3 Minio Client安装配置3.1 切换目录3.2 移动mc脚本3.2 运行mc命…

结构型设计模式

结构型设计模式 结构型设计模式主要总结了一些类或对象组合在一起的经典结构&#xff0c;这些经典的结构可以解决特定应用场景的问题。结构模式包括&#xff1a;代理模式、桥接模式、装饰器模式、适配器模式、门面模式、组合模式、亨元模式。 1. 代理模式 实现方式&#xff…

Vue3后台管理系统Element-plus_侧边栏制作_无限递归

在home.view中添加代码 <template><div><div class"common-layout"><el-container><el-header class"common-header flex-float"><div class"flex"><img class"logo" src"../assets/logo…

【Redis】Redis实现分布式锁

【Redis】Redis常见面试题&#xff08;1&#xff09; 文章目录 【Redis】Redis常见面试题&#xff08;1&#xff09;1. 为什么要用分布式锁2. Redis如何实现分布式锁3. Redis接受多个请求模拟演示4. 使用Redis实现分布式锁会存在什么问题4.1 一个锁被长时间占用4.2 锁误删 【Re…

vue2+element-ui批量导入方法并判断上传的文件是否为xls或xlsx

业务需求: 代码结构: <el-dialogtitle"批量导入":close-on-click-modal"true"close"close()":visible"true"width"35%":center"true"><div class"el-dialog-div"><!-- 头部区域布局 -…

【基本数据结构 四】线性数据结构:队列

学习了栈后,再来看看第四种线性表结构,也就是队列,队列和栈一样也是一种受限的线性表结构,和栈后进先出的操作方式不同的是,队列是FIFO的结构,也就是先进先出的操作方式。 队列的定义 队列这个概念非常好理解。可以把它想象成排队买票,先来的先买,后来的人只能站末尾…

软考知识汇总--结构化开发方法

文章目录 1 结构化开发2 耦合3 内聚4 设计原则5 系统文档6 数据流图6.1 数据流图的基本图形元素 7 数据字典 1 结构化开发 结构化方法总的指导思想是自顶向下、逐层分解&#xff0c;它的基本原则是功能的分解与抽象。它是软件工程中最早出现的开发方法&#xff0c;特别适合于数…

「C++程序设计 (面向对象进阶)」学习笔记・二

0、引言 本专栏的系列文章是在学习 北京邮电大学 崔毅东 老师的《C程序设计 (面向对象进阶)》课程过程中整理的。欢迎前往专栏了解更多相关内容~ &#x1f600; 有关于现代 C 的基本介绍&#xff0c;请前往《现代C基本介绍》&#xff01; &#x1f514; 先决条件 本专栏的系列…

定时器+BOM

9.定时器BOM 1.定时器 **概念:**重复执行一个函数 1.1setInterval() setInterval(“代码/函数”,时间,参数),返回定时器的序列号,默认从1开始 clearInterval(序列号)清除定时 <button class"start">开启定时器</button><button class"close…

通过Power Platform自定义D365 CE 业务需求 - 3. 使用Microsoft Power应用程序

Microsoft Power Apps是一个用于开发应用程序的无代码、无代码平台。Power应用程序可以在Dataverse之上配置为数据库。尽管您可以连接Salesforce、OneDrive、Dropbox等多种云源,但Dataverse也可以用作内部数据库来构建应用程序,并通过连接器连接其他数据源进行集成。 Power应…

Java开发之Redis核心内容【面试篇 完结版】

文章目录 前言一、redis使用场景1. 知识分布2. 缓存穿透① 问题引入② 举例说明③ 解决方案④ 实战面试 3. 缓存击穿① 问题引入② 举例说明③ 解决方案④ 实战面试 4. 缓存雪崩① 问题引入② 举例说明③ 解决方案④ 实战面试 5. 缓存-双写一致性① 问题引入② 举例说明③ 解决…