1.简介
首先引用 Elasticsearch (下文简称 ES)官网的一段描述:
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。
本文主要介绍 Elasticsearch 集群的搭建。通过在一台服务器上创建 3 个 ES 实例来创建一个建议的 ES 集群。
Elasticsearch/ES
官方的Elasticsearch Reference 提供了不同版本的文档连接,真是赞!
如果英文的不想看,还提供了中文版的 Elasticsearch 2.x: 权威指南,版本不是最新的,但是了解基本概念也是有帮助的。
Elasticsearch 7.x 包里自包含了 OpenJDK 的包。如果你想要使用你自己配置好的 Java 版本,需要设置 JAVA_HOME
环境变量 —— 参考
官方文档 Set up Elasticsearch
有各个 OS 的安装指导,页面 Installing Elasticsearch 中提供了多种安装包对应的指导链接!
本文选择绿色安装包的的方式(tar.gz
)安装。
由于实验机器有限,可以在同一台机器上模拟出 3 个节点,安装 ES 集群
2.环境
1>三台真实服务器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 1.物理cpu数:主板上实际插入的cpu数量,可以数不重复的 physical id 有几个(physical id) $ cat /proc/cpuinfo| grep "physical id" | sort| uniq| wc -l 2 2.cpu核数:单块CPU上面能处理数据的芯片组的数量,如双核、四核等 (cpu cores) cat /proc/cpuinfo| grep "cpu cores" | uniq 3.逻辑cpu数:简单来说,它可使处理器中的1颗内核,如2颗内核那样在操作系统中发挥作用。 $ cat /proc/cpuinfo| grep "cpu cores" | uniq cpu cores : 8 4.查看cpu信息(型号) $ cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 32 Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz 5.查看服务器版本号 $ more /etc/redhat-release CentOS Linux release 7.6.1810 (Core) |
2>ES版本:elasticsearch-7.9.2-linux-x86_64.tar
3>kibana版本:kibana-7.9.2-linux-x86_64.tar
因是实体机器,所以这里的三台机器用1,2,3机器表示
3.ES下载
1 2 | 链接:https: //pan.baidu.com/s/1K7XGf0ewWeabIcHBHnCGAw 提取码:y2my |
4.ES集群安装
4.1调整linux系数相关参数设置
注意:
ES最新版本需要jdk11,需要修改环境变量
所有版本不能用root用户跑ES
改变其权限
1 | chown 用户:用户组 elasticsearch-7.9.2-linux-x86_64.tar.gz |
防火墙状态
1 2 3 4 5 6 7 8 9 10 11 12 | l firewall-cmd --state 运行则关闭防火墙 # 临时关闭防火墙 systemctl stop firewalld.service # 永久关闭防火墙` systemctl disable firewalld |
1 | selinux状态 |
1 2 3 4 5 6 7 8 9 10 11 12 | 查看selinux命令 /usr/sbin/sestatus 临时关闭 setenforce 0 永久关闭 vim /etc/selinux/config 将SELINUX=enforcing改为SELINUX=disabled,保存后退出 |
1 |
4.1.1修改最大文件数和锁内存限制以及用户最大线程数
1 2 3 4 5 6 7 8 | 打开文件vi /etc/security/limits.d/20-nproc.conf was soft nproc 20000 * soft nproc 4096 root soft nproc unlimited 修改完保存即可 |
1 | 同时修改 |
1 2 3 4 5 6 7 8 9 | vi /etc/security/limits.conf # End of file * soft nofile 300000 * hard nofile 300000 * soft nofile 65536 * hard nofile 65536 * hard memlock unlimited * soft memlock unlimited |
查看修改完结果
1 | # ulimit -a |
4.1.2更改一个进城能拥有的最大内存区域限制,编辑swappiness禁用交换分区
1 2 3 4 5 6 7 8 9 10 11 | vi /etc/sysctl.conf vm.max_map_count=262144 vm.swappiness=1 # sysctl -p vm.max_map_count = 262144 vm.swappiness = 1 |
4.1.3解压安装包
1 | tar -zxvf elasticsearch-7.9.2-linux-x86_64.tar.gz |
4.1.4进入文件,改其env
1 2 3 4 5 | vim /data/disk04/es/elasticsearch-7.9.2/bin/elasticsearch-env 在文件第一行加入下面变量 JAVA_HOME= "/data/disk04/es/elasticsearch-7.9.2/jdk/" |
4.1.5修改垃圾回收器需要转换(不转换不会报错,但是会有警告)
1 | vim /data/disk04/es/elasticsearch-7.9.2/config/jvm.options |
改之前
改之后
1 2 3 4 5 6 | 以 – 开头的行被视为jvm版本应用的选项 -Xmx2g 以n:-开头的行被视为依赖数字指明的JVM版本 8:- -Xmx2g 以n-n开始的行是指明要求了JVM的版本 8-13 |
4.1.6修改 yml文件(以下标明机器与节点只是例子,不应用本次实验)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | vi /data/disk04/es/elasticsearch-7.9.2/config/elasticsearch.yml ******集群名********** #集群的名字,每个节点的拥有同一个名字才能认为是同一个集群 #cluster.name: my-application cluster.name: es-cluster *****节点名字********** #节点的名字,保证唯一,每个节点不同,需要修改 #node.name: node-1 node.name: node-1(第一个节点) node.name: node-2 (第二个节点文件) node.name: node-3(第三个节点文件) ******自带属性 ******** #自定义的属性,这是官方文档中自带的 # Add custom attributes to the node: node.attr.rack: r1 *********网络****** *** #设置成 本机 或 0.0.0.0即可 http.cors.enabled: true http.cors.allow-origin: "*" http.port: 9200 transport.tcp.port: 9300 ******日志数据存放 ********* (目录需要有普通用户的权限) #根据自己的习惯配置data文件夹 #path.data: /path/to/data path.data: /app/elasticsearch-7.9.2/data # Path to log files: #path.logs: /path/to/logs path.logs: /app/elasticsearch-7.9.2/logs/logs *******内存 ************** #开启启动es时锁定内存 # Lock the memory on startup: # #bootstrap.memory_lock: true bootstrap.memory_lock: true ***********初始列表********** 第一个节点 discovery.seed_hosts: [ "10.135.139.11:9200" , "10.135.139.12:9200" , "10.135.139.13:9200" ] cluster.initial_master_nodes: [ "es-bd1701" ] client.transport.ping_timeout: 60s 第二个节点 discovery.seed_hosts: [ "10.135.139.11:9200" , "10.135.139.12:9200" , "10.135.139.13:9200" ] cluster.initial_master_nodes: [ "es-bd1702" ] client.transport.ping_timeout: 60s 第三个节点 discovery.seed_hosts: [ "10.135.139.11:9200" , "10.135.139.12:9200" , "10.135.139.13:9200" ] cluster.initial_master_nodes: [ "es-bd1703" ] client.transport.ping_timeout: 60s **********跨第三方插件访问 ************* http.cors.enabled: true http.cors.allow-origin: "*" |
例如本次实验的第一个节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | cluster.name: qqd-es-cluster node.name: 节点名 path.data: /data/disk04/es/es_data path.logs: /data/disk04/es/es_logs node.master: true network.host:节点IP node.data: true http.port: 9200 transport.tcp.port: 9300 transport.tcp.compress: true node.attr.rack: r1 transport.profiles. default .port: 9300 discovery.zen.minimum_master_nodes: 2 discovery.seed_hosts: [ "IP1:节点1" , "IP2:节点2" , "IP3:节点3" ] bootstrap.memory_lock: false bootstrap.system_call_filter: false cluster.initial_master_nodes: [ "节点1" , "节点2" , "节点3" ] gateway.recover_after_nodes: 3 http.cors.enabled: true http.cors.allow-origin: "*" |
4.1.7配置/etc/hosts
1 2 3 | 节点1ip 节点1名称 节点2ip 节点2名称 节点3ip 节点3名称 |
4.1.8配置环境变量
1 2 3 4 | vim /etc/profile #es环境变量 export ES_HOME=/data/disk04/es/elasticsearch-7.9.2 export PASH=$ES_HOME/bin:$PATH<br><br>source /etc/profile |
4.1.8修改jvm(最好不要超过机器内存的一半或者32以下)
1 2 3 4 5 6 | vi /data/disk04/es/elasticsearch-7.9.2/config/jvm.options -Xms31g -Xmx31g |
4.1.8启动es集群(可能会需要点时间)
1 | /data/disk04/es/elasticsearch-7.9.2/bin/elasticsearch |
4.1.9查看es集群(*号为主节点)
1 | http: //ip:9200/_cat/nodes?pretty |
4.1.10查看es节点
1 | http: //ip:9200/_cat/nodes?pretty |
集群的状态(status):red红表示集群不可用,有故障。yellow黄表示集群不可靠但可用,一般单节点时就是此状态。green正常状态,表示集群一切正常。
节点数(node.total):节点数,这里是3,表示该集群有三个节点。
数据节点数(node.data):存储数据的节点数,这里是3。数据节点在Elasticsearch概念介绍有。
分片数(shards : 表示我们把数据分成多少块存储。
主分片数(pri):primary shards,实际上是分片数的两倍,因为有一个副本,如果有两个副本,这里的数量应该是分片数的三倍,这个会跟后面的索引分片数对应起来,这里只是个总数。
激活的分片百分比(active_shards_percent):这里可以理解为加载的数据分片数,只有加载所有的分片数,集群才算正常启动,在启动的过程中,如果我们不断刷新这个页面,我们会发现这个百分比会不断加大。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?