三、ElasticSearch集群搭建实战

  •  本篇ES集群搭建主要是在Linux VM上,未使用Docker方式, ES版本为7.10 ,选择7.10版本原因可以看往期文章介绍。

一、ElasticSearch集群搭建须知

JVM设置

Elasticsearch是基于Java运行的,es7.10可以使用jdk1.8 ~ jdk11之间的版本,更高版本还没测试过。ES运行期间很多计算都需要大量内存,所以内存这块需要提前根据机器规格进行适当配置,内存越大越好,单实例JVM堆内存官方建议最大设置到30G。

集群节点数

单个ES集群节点数据可以达到几百到上千,当单个集群满足不了业务时可以再搭新的ES集群。集群节点数以单数最好,可以避免脑裂,不过7.x及以上版本官方已经进行了优化,基本不会出现脑裂问题了。

ES启动用户

Linux下启动ES不能使用root用户, 需要单独建个系统用户来启动ES 。

二、ES集群部署架构

下面示例是以三个机器实例来搭建的ES集群

 单集群示例

  • 集群每个节点都可以设置为可参与master选举及是否是数据节点

 多集群示例

相较于单集群,多集群上层可以加一层负载均衡,统一管理及路由,方便业务使用。

集群访问规范建议

  出于安全及后续维护综合考虑,ES集群对外提供访问地址最好是一个域名,这样能避免IP到处暴露,也避免IP较高频率变化而导致系统经常升级。

三、ES集群搭建实战

软件下载

   es官方下载地址,es和kibana尽量下载同一版本

  • elasticsearch各版本下载地址

        https://www.elastic.co/cn/downloads/past-releases#elasticsearch

  • kibana (es的可视化管理工具)

        Past Releases of Elastic Stack Software | Elastic

搭建步骤    

以下搭建步骤均基于ES7.10版本,以该步骤在笔者公司内部测试环境、生产环境成功搭建过多次,并已稳定运行一年多。其它6.x、8.x版本搭建过程有些差异,请大家认准版本。

搭建过程中如果遇到问题也可以参考官方对应版本文档说明,以下是7.10官方文档。

 Installing Elasticsearch | Elasticsearch Guide [7.10] | Elastic

搭建集群时先在一台实例上把ES搭建好后,再Copy到实例上进行配置修改。

 1、堆内存设置 - jvm.options

        启动前先设置ES占用的堆内存,es还是需要比较多的内存,可以根据机器规则来设置。如果机器只有4g内存可以设置2-3g,如果是8g的话可以设置为6g,16G的话可以设置到14G。剩余一部分留给系统。

-Xms6g     
-Xmx6g

 如果在linux下启动出现以错时需要修改linux系统配置

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

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

sudo vim /etc/sysctl.conf#添加参数
vm.max_map_count = 262144#重新加载配置
sysctl -p

2、先搭建ES单个节点

  先找任一个节点修改elasticsearch.yml,并添加以下配置(此时不要添加集群和证书配置)

#数据和日志目录
path.data: /opt/data
path.logs: /opt/logs#http访问端口,程序或kibana使用
http.port: 9200#开启安全访问,集群搭建必选
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

3、启动ES

#启动命令,注意要使用非root账户
./bin/elasticsearch

观察启动是否ok,若ok进行第三步

4、设置安全账号信息(ES要启动状态)

  • 执行以下命令,给各账号设置密码,整个集群只需要设置一次即可

  • bin/elasticsearch-setup-passwords interactive

    警告:设置账户密码切记要在单实例非集群模式时配置,不能添加任何集群的配置,否则会设置失败

  • 似乎有8个账户都需要设置密码,方便期间密码全部设置成一样的即可,后续还可以再改。  

5、添加ES集群配置信息

  • 集群搭建需要开启安全验证,开启安全需要用到证书,证书生成参考【ES集群安全策略设置 X-pack】,生成后进行以下配置

  • elasticsearch.yml加入以下配置

  • 以下配置是集群搭建的关键配置,配置错就会导致集群节点之间可能无法通信、节点不能加入集群等各种问题

#数据和日志存储路径
path.data: /opt/data
path.logs: /opt/logs
#数据备份和恢复使用,可以一到多个目录
path.repo: ["/opt/backup/es", "/opt/backup/es1"]#http访问端口,程序或kibana使用
http.port: 9200#集群名称
cluster.name: es001
#节点名,每个节点名不能重复
node.name: node1#是否可以参与选举主节点
node.master: true
#是否是数据节点
node.data: true#允许访问的ip,4个0的话则允许任何ip进行访问
network.host: 0.0.0.0#es各节点通信端口
transport.tcp.port: 9300#集群每个节点IP地址,搭建过程一个一个填写,比如搭建第一个节点时,只填写一个ip和节点信息
discovery.seed_hosts: ["xxx.xx.xx.xx:9300", "xx.xx.xx:9300", "xx.xx.xx:9300"]                  
#es7.x新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node1", "node2", "node3"]  #配置是否压缩tcp传输时的数据,默认为false,不压缩
transport.tcp.compress: true
# 是否支持跨域,es-header插件使用
http.cors.enabled: true
# *表示支持所有域名跨域访问
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Type,Content-Length#集群模式开启安全 https://www.elastic.co/guide/en/elasticsearch/reference/7.17/security-minimal-setup.html
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12#默认为1s,指定了节点互相ping的时间间隔。
discovery.zen.fd.ping_interval: 1s
#默认为30s,指定了节点发送ping信息后等待响应的时间,超过此时间则认为对方节点无响应。
discovery.zen.fd.ping_timeout: 30s
#ping失败后重试次数,超过此次数则认为对方节点已停止工作。
discovery.zen.fd.ping_retries: 3

以上配置添加好后重启ES,验证是否能启动成功,如果启动不成功可根据ES日志进行排查解决,或者重新进行搭建。

是否启动成功可以使用以下方式进行验证

curl -XGET -u elastic:password localhost:9200/_cat/indices?v

curl -XGET -u elastic:password localhost:9200/_cat/health?v

在命令行行执行后看是否有数据返回,如果开启了安全验证,需要把上面的账号密码替换掉。

6、配置集群其它节点

    第5步如果验证成功后,可以把该实例的整个ES程序及配置打包copy到其它节点上,然后再修改elasticsearch.yml配置重点是把节点名称节点IP配置信息修改好,改好后直接启动该节点ES。

注意启动时观察日志是否有异常信息。 

7、集群验证

    当启动第二个节点后最好先验证节点是否已经加到集群里了,如果未成功加入集群说明搭建方法出现了问题,此时需要先把问题解决掉再进行后续的集群搭建。

 节点启动成功并不代表集群搭建就是成功后的,我们可以用以下两种方式来组合验证集群是否成功搭建:

  • 1、使用系统命令查看集群节点数量

curl -XGET -u elastic:password http://127.0.0.1:9200/_cluster/health?pretty"

 如果此时集群中有三个节点,执行以上操作后也返回了节点数量为3,则说明节点都已成功加入了集群。

  • 2、创建一个索引看集群中每个节点索引数据是否一致

    如果集群搭建成功,我们创建索引后ES集群会自动同步索引数据到所有的节点上,所以借助这点我们可以准确验证集群是否真正搭建成功。

    步骤: 

  • 1)首先在任意节点执行一个索引创建命令
curl -XPUT -u elastic:password "http://127.0.0.1:9200/test-index"

    以上创建了一个名为『test-index』的索引 

  • 2) 查看其它节点索引是否一致

  • curl -XGET -u elastic:password  "http://localhost:9200/_cat/indices?pretty"

     分别在每个节点执行以上命令看所有节点是否返回一致,如果集群搭建正常,在任意一个节点创建索引后都会自动同步到其它节点,如果返回不一致则认为集群搭建的是有问题的。

如果以上验证成功后,其它节点重复5、6步即可。

    

四、集群配置优化

1、关闭索引自动创建

  • 待es集群搭建完启动成功后,执行以下命令可以关闭索引自动创建功能,当然也可以不关闭,不关闭的话,在程序中调用ES Api保存数据时候如果索引不存在则会自动创建索引,线上环境可能会带来一些安全问题,所以尽量还是关闭由专门负责人统一来管理索引维护。

    PUT _cluster/settings
    {"persistent": {"action.auto_create_index": "false" }
    }

    以上命令是在kibana中执行

     注:如果后续装x-pak,可能需要修改 action.auto_create_index 值

   

2、修改es集群索引默认分片数

     7.x版本默认是1分片1备份,集群场景下1分片会完全不能发挥集群性能,所以需要设置一下默认分片数量,具体设置多少可以根据节点数,比如按2n来设置,3个节点,分片数可以设置为6。 

副本数1即可。

PUT _template/template_http_request_record
{"index_patterns": ["*"],"settings": {"number_of_shards": 6,"number_of_replicas": 1}
}

      index_patterns = * 代表对所有索引生效

      number_of_shards 是索引主分片数.

      number_of_replicas 是备份数量.

  

  • ES集群模式数据分布原理

一个ES集群至少有一个节点,一个节点就是一个 elasricsearch 进程,每个节点可以有多个索引,如果创建索引时设置为5个分片,一个副本,那么索引数据将会均匀划分到 5 个分片上 (primary shard,又称主分片),每个分片有一个副本(replica shard,又称复制分片)。为了保证数据的稳定性es会把某个分片及副本存储在不同的实例上。

希望本文能帮助顺利完成ES集群搭建

往期文章

Elasticsearch入门必读指南:到底选择哪个ES版本更合适

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

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

相关文章

R语言(数据导入,清洗,可视化,特征工程,建模)

记录一下痛失的超级轻松的数据分析实习(线上),hr问我有没有相关经历,我说我会用jupyter book进行数据导入,清洗,可视化,特征工程,建模,python学和用的比较多,…

2024不可不会的StableDiffusion之扩散模型(四)

1. 引言 这是我关于StableDiffusion学习系列的第四篇文章,如果之前的文章你还没有阅读,强烈推荐大家翻看前篇内容。在本文中,我们将学习构成StableDiffusion的第三个基础组件基于Unet的扩散模型,并针该组件的功能进行详细的阐述。…

Hbase-2.4.11_hadoop-3.1.3集群_大数据集群_SSH修改默认端口22为其他端口---记录025_大数据工作笔记0185

其实修改起来非常简单,但是在大数据集群中,使用到了很多的脚步,也需要修改, 这里把,大数据集群,整体如何修改SSH端口,为22022,进行总结一下: 0.hbase-2.4.11的话,hbase集群修改默认SSH端口22,修改成22022,需要修改 需要修改/opt/module/hbase-2.4.11/conf/hbase-env.sh 这里…

【Linux操作系统】:Linux开发工具编辑器vim

目录 Linux 软件包管理器 yum 什么是软件包 注意事项 查看软件包 如何安装软件 如何卸载软件 Linux 开发工具 Linux编辑器-vim使用 vim的基本概念 vim的基本操作 vim正常模式命令集 插入模式 插入模式切换为命令模式 移动光标 删除文字 复制 替换 撤销 跳至指…

操作系统(8)---进程的同步与互斥以及信号量机制

目录 一.进程的同步与互斥 1.进程的异步和同步 2.进程互斥 3.进程互斥的软件实现方法 (1)单标志法 (2)双标志法 (3)双标志后检查 (4)Peterson算法 4.进程互斥的硬件实现方法…

计算机网络-数据交换方式(电路交换 报文交换 分组交换及其两种方式 )

文章目录 为什么要数据交换?总览电路交换电路交换的各个阶段建立连接数据传输释放连接 电路交换的特点电路交换的优缺点 报文交换报文交换流程报文交换的优缺点 分组交换分组交换流程分组交换的优缺点 数据交换方式的选择分组交换的两种方式数据报方式数据报方式的特…

【超详细教程】GPT-SoVITs从零开始训练声音克隆教程(主要以云端AutoDL部署为例)

目录 一、前言 二、GPT-SoVITs使用教程 2.1、Windows一键启动 2.2、AutoDL云端部署 2.3、人声伴奏分离 2.4、语音切割 2.5、打标训练数据 2.6、数据集预处理 2.7、训练音频数据 2.8、推理模型 三、总结 一、前言 近日,RVC变声器的创始人(GitH…

回显服务器(基于UDP)

目录 基本概念 API学习 DatagramSocket DatagramPacket InetSocketAddress 回显服务器实现 服务端 思路分析 具体实现 完整代码 客户端 思路分析 具体实现 完整代码 运行测试 基本概念 发送端和接收端 在一次网络数据传输时: 发送端:…

还在担心报表不好做?不用怕,试试这个方法

前言 在各种业务场景中,我们经常需要生成各种报表,例如学校中的学生成绩表、商业场景中的销售单和发票单、测量检测场景中的检测报告等等。这些报表对于组织和管理数据非常重要,因为它们提供了直观、清晰的方式来展示和分析数据。 一般情况…

【习题】保存应用数据

判断题 1. 首选项是关系型数据库。 错误(False) 2. 应用中涉及到Student信息,如包含姓名,性别,年龄,身高等信息可以用首选项来存储。 错误(False) 3. 同一应用或进程中每个文件仅存在一个Preferences实例。 正确(True) 单选题 …

西瓜书学习笔记——密度聚类(公式推导+举例应用)

文章目录 算法介绍实验分析 算法介绍 密度聚类是一种无监督学习的聚类方法,其目标是根据数据点的密度分布将它们分组成不同的簇。与传统的基于距离的聚类方法(如K均值)不同,密度聚类方法不需要预先指定簇的数量,而是通…

【-快速录用】2024年大数据经济与社会文化国际学术会议(ICBDESC 2024)

【-快速录用】2024年大数据经济与社会文化国际学术会议(ICBDESC 2024) 2024 International Conference Big Data Economy and Social Culture 一、【会议简介】 随着大数据技术的飞速发展,全球范围内对大数据经济与社会文化的研究愈发深入。为了促进国际间学术交流…