当前位置:网站首页>安装ES7.x集群
安装ES7.x集群
2022-08-11 08:49:00 【探路者之旅】
安装ES集群
一、环境准备
1.1 准备三台Linux主机
可以是物理机、虚拟机、云主机
- 三台主机均安装同一版本的JDK,建议JDK8;
- 三台主机的名称和IP-主机名称映射尽量配置下;
- 三台主机确保相互通信,SSH免密登录可选;
- 主机的单节点内存不要太小,生产环境建议64G内存;
1.2 ES集群环境规划
规划节点 | 节点1 | 节点2 | 节点2 |
---|---|---|---|
IP地址 | 172.16.247.153 | 172.16.247.154 | 172.16.247.155 |
节点功能 | 主+数据节点 | 主+数据节点 | 主+数据节点 |
HostName | es-node1 | es-node2 | es-node3 |
jdk-8u151-linux-x64 | Y | Y | Y |
elasticsearch-7.2.1-linux-x86_64 | Y | Y | Y |
kibana-7.2.1-linux-x86_64 | Y |
1.3 修改/etc/hosts
三台节点都要进行操作
,根据各自环境改成具体真实的IP地址
172.16.247.153 es-node1
172.16.247.154 es-node2
172.16.247.155 es-node3
二、下载部署包
2.1下载jdk部署包
(已经有安装包,此处忽略)
官方下载JDK8的tar包 https://www.oracle.com/java/technologies/downloads/#java8
2.2下载ES相关部署包
(已经有安装包,此处忽略)
下载相应的组件包,要保持版本一致,并解压放置在对应的机器目录中(注意Kibana此处只部署了一台)
官网下载ES的Linux版本的tar包:https://www.elastic.co/cn/downloads/elasticsearch
官网下载Kibana的Linux版本的tar包:https://www.elastic.co/cn/downloads/kibana
GitHub下载IK分词器的ZIP包:https://github.com/medcl/elasticsearch-analysis-ik/releases
elasticsearch-head插件 https://github.com/mobz/elasticsearch-head
cerebro 插件 https://github.com/lmenezes/cerebro/releases/download/v0.9.4/cerebro-0.9.4.tgz
三、环境安装
三台节点都要进行操作
3.1安装JDK8环境
(如果环境原本已经存在JDK8环境,此项可忽略)
3.1.1.上传并解压
/usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。这里主要存放那些手动安装的软件。
/usr/local下没有名为jdk1.8的文件夹,则将jdk1.8.0_151移动到到/usr/local
下并且更名为jdk1.8
[[email protected] ]# tar -zxvf jdk-8u151-linux-x64.tar.gz
[[email protected] ]# mv jdk1.8.0_151 /usr/local/jdk1.8
3.1.2.修改配置文件
/etc/profile是一个全局配置文件, 所有用户登录都会使用该文件构建用户环境 。与windows配置环境变量是一个道理。Linux中
export
命令用于设置或显示环境变量。
[[email protected] ]# vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.8
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
3.1.3.刷新配置并验证
[[email protected] ]# source /etc/profile
[[email protected] ]# java -version
3.2安装ES服务
3.2.1上传并解压
# 放入linux的目录并解压
[[email protected] ]# tar -zxvf elasticsearch-7.2.1-linux-x86_64.tar.gz
[[email protected] ]# mv elasticsearch-7.2.1 /usr/local/elasticsearch
# 建立两个文件夹,用于存放日志和数据,
[[email protected] ]# mkdir -p /opt/elasticsearch-data
[[email protected] ]# mkdir -p /opt/elasticsearch-log
3.2.2配置elasticsearch.yml
[[email protected] ]# vi /usr/local/elasticsearch/config/elasticsearch.yml
es-node1节点配置
node.name: es-node1
es-node2节点配置
node.name: es-node2
es-node3节点配置
node.name: es-node3
3.2.4 补充配置文件说明:
#---------------------------------- Cluster -----------------------------------
#集群名称
cluster.name: es-cluster
#---------------------------------- Node -----------------------------------
#节点名称 es-node1、es-node2、es-node3 (自定义,用于区分集群中每个节点)
node.name: es-node1
#是否可以成为主节点
node.master: true
#是否存放数据
node.data: true
#---------------------------------- Paths -----------------------------------
#存放数据和日志的路径
path.data: /opt/elasticsearch-data/
path.logs: /opt/elasticsearch-log/
#path.repo: [ "/data/daily","/data/weekly" ]
#---------------------------------- Network -----------------------------------
#设置是否压缩tcp传输时的数据,默认为false,不压缩。
transport.tcp.compress: true
#设置节点之间交互的tcp端口,默认是9300。
transport.tcp.port: 19300
#本机IP地址,多个网卡使用具体ip
network.host: 0.0.0.0
http.port: 19200
#开启跨域访问支持,默认为false
http.cors.enabled: true
#跨域访问允许的域名地址,(允许所有域名)以上使用正则
http.cors.allow-origin: /.*/
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
#--------------------------------- Discovery ----------------------------------
#设置自动发现的Node,以便集群中的节点可以相互发现并选举一个主节点。
discovery.seed_hosts: ["es-node1","es-node2","es-node3"]
#初始化主节点,当第一次启动 ES 集群时, 集群引导步骤会确定在第一次选举中计票的符合主节点资格的节点集。
cluster.initial_master_nodes: ["es-node1","es-node2","es-node3"]
#冷热数据分离 hot cool
#node.attr.box_type: hot
#设置节点在再次询问其对等方之后将等待多长时间,然后才认为请求失败。默认为3s.
discovery.request_peers_timeout: 30s
#--------------------------------- Gateway ----------------------------------
#设置集群中N个数据节点加入集群后就可以进行数据恢复
gateway.recover_after_data_nodes: 2
#设置初始化数据恢复进程的超时时间,默认是5分钟。
gateway.recover_after_time: 3m
#集群中预期的数据节点数。当预期数量的数据节点加入集群时,本地分片的恢复开始。默认为0.
gateway.expected_data_nodes: 3
#--------------------------------- Index ----------------------------------
#这个关闭了自动创建索引。为的也是安全考虑,否则即使是内网,也有很多扫描程序,一旦开启,扫描程序会自动给你创建很多索引。
#action.auto_create_index: false
# .monitoring-kibana*,.monitoring-data*,.watches,.kibana,.watcher-history*,.monitoring-es*,.security,.triggered_watches
#---------------------------------- Security ----------------------------------
#xpack.security.enabled: true
#xpack.security.transport.ssl.enabled: true
#xpack.security.transport.ssl.verification_mode: certificate
#xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/config/elastic-certificates.p12
#xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/config/elastic-certificates.p12
3.2.3系统参数调整
3.2.3.1 修改es的JVM运行内存
生产环境,jvm参数资源可以调整大一些,系统的内存的一半给ES服务,最大不超过32G,剩下的资源留给底层Lucene缓冲;独立部署ES服务,可以使用64G内存的节点最合适;
例如:64G内存节点,可以配置为31G; 例如:128G内存的物理机节点,64G用于给ES服务,剩余可用于其他服务部署,合理利用资源;
因测试环境资源有限,节点内存为8G,所以此处配置为4G ;
[[email protected] ]# vi /usr/local/elasticsearch/config/jvm.options
-Xms4g
-Xmx4g
3.2.3.2 修改Linux系统相关配置
文件句柄:在 Linux 环境中,任何事物都是用文件来表示,设备是文件,目录是文件,socket 也是文件。用来表示所处理对象的接口和唯一接口就是文件。应用程序在读/写一个文件时,首先需要打开这个文件,打开的过程其实质就是在进程与文件之间建立起连接,句柄的作用就是唯一标识此连接。此后对文件的读/写时,目标文件就由这个句柄作为代表。最后关闭文件其实就是释放这个句柄的过程,使得进程与文件之间的连接断开。
服务器上的 ulimit 都需要我们自己设置,而不能使用系统默认1024的设定,否则会出现文件描述符耗尽的问题。文件句柄达到上限之后的常见错误有:
Too many open files
或者Socket/File: Can’t open so many files
等。
1.增大进程可以打开的文件数(用户级)
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[[email protected] ]# vi /etc/security/limits.conf
* soft nofile 655350
* hard nofile 655350
生效方式:shell重新连接就生效,应该是新的会话就生效
2.增大进程可以创建的线程数
max number of threads [3818] for user [es] is too low, increase to at least [4096]
[[email protected] ]# vi /etc/security/limits.conf
* soft nproc 10240
* hard nproc 409600
生效方式:shell重新连接就生效,应该是新的会话就生效
3.允许进程锁定内存
[[email protected] ]# vi /etc/security/limits.conf
* soft memlock unlimited
* hard memlock unlimited
生效方式:shell重新连接就生效,应该是新的会话就生效
4.修改可以分配的vma数量(mmap计数)
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[[email protected] ]# vi /etc/sysctl.conf
vm.max_map_count = 655360
生效方式: sysctl -p
5.调整系统句柄限制(系统级)
max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
[[email protected] ]# vi /etc/sysctl.conf
fs.file-max = 1000000
生效方式: sysctl -p
6.设置尽可能低的使用swap
(物理内存很充裕可以设置为0,低于50G可以适当调整)
[[email protected] ]# vi /etc/sysctl.conf
vm.swappiness=0
生效方式: sysctl -p
3.2.4启动Elasticsearch服务
(ES只能使用普通用户启动)
#添加esuser用户,并授权目录
[[email protected] ]# useradd esuser
[[email protected] ]# chown -R esuser /usr/local/elasticsearch/
[[email protected] ]# chown -R esuser /opt/elasticsearch-data/
[[email protected] ]# chown -R esuser /opt/elasticsearch-log/
#切换到普通esuser用户,启动服务
[[email protected] ]# su - esuser
[[email protected] ]# /usr/local/elasticsearch/bin/elasticsearch -d
3.2.5验证Elasticsearch服务
三个节点执行
172.16.247.153:19200/_cat
/_cat/allocation #查看单节点的shard分配整体情况
/_cat/shards #查看各shard的详细情况
/_cat/shards/{index} #查看指定分片的详细情况
/_cat/master #查看master节点信息
/_cat/nodes #查看所有节点信息
/_cat/indices #查看集群中所有index的详细信息
/_cat/indices/{index} #查看集群中指定index的详细信息
/_cat/segments #查看各index的segment详细信息,包括segment名, 所属shard, 内存(磁盘)占用大小, 是否刷盘
/_cat/segments/{index} #查看指定index的segment详细信息
/_cat/count #查看当前集群的doc数量
/_cat/count/{index} #查看指定索引的doc数量
/_cat/recovery #查看集群内每个shard的recovery过程.调整replica。
/_cat/recovery/{index} #查看指定索引shard的recovery过程
/_cat/health #查看集群当前状态:红、黄、绿
/_cat/pending_tasks #查看当前集群的pending task
/_cat/aliases #查看集群中所有alias信息,路由配置等
/_cat/aliases/{alias} #查看指定索引的alias信息
/_cat/thread_pool #查看集群各节点内部不同类型的threadpool的统计信息,
/_cat/plugins #查看集群各个节点上的plugin信息
/_cat/fielddata #查看当前集群各个节点的fielddata内存使用情况
/_cat/fielddata/{fields} #查看指定field的内存使用情况,里面传field属性对应的值
/_cat/nodeattrs #查看单节点的自定义属性
/_cat/repositories #输出集群中注册快照存储库
/_cat/templates #输出当前正在存在的模板信息
附录
1、linux的nofile和nproc参数
nofile**
nofile
表示单个进程可以打开的最大文件句柄数(默认值,软限制:1024,硬限制:4096)/proc/sys/fs/file-max
表示整个系统内核可以分配的最大文件句柄数(默认值约为物理内存转换成kb的值/10),如需修改执行命令:
- echo ‘fs.file-max=104857600’ >> /etc/sysctl.conf && sysctl -q -p
/proc/sys/fs/file-nr
表示整个系统内核的文件句柄统计数据(只读),包含三个值,
- 1:整个系统内核已分配的文件句柄数
- 2:整个系统内核已分配但未使用的文件句柄数(一般情况下为0)
- 3:整个系统内核可以分配的最大文件句柄数(等于file-max)
/proc/sys/fs/nr_open
表示单个进程可以分配的最大文件句柄数(默认值为1048576),如需修改执行命令:
- echo ‘fs.nr_open=2097152’ >> /etc/sysctl.conf && sysctl -q -p
nofile
的值不能超过nr_open
的值,如果配置文件中nofile
的硬限制的值超过nr_open
的值将会导致无法登录系统- 单个进程可以打开的最大文件句柄数由
nofile
和file-max
同时约束,假如一个进程已打开的文件句柄数小于nofile
,但整个系统内核所有进程打开的文件句柄数已经达到file-max
,此时这个进程也不能再打开文件句柄了nproc
nproc
表示单个用户创建的进程数(默认值,软限制:threads-max/2,硬限制:threads-max/2),线程的实现其实是一个轻量级的进程,所以线程也算进程
/proc/sys/kernel/threads-max
表示整个系统内核可以分配的最大线程数,如需修改执行命令:
- echo ‘kernel.threads-max=1048576’ >> /etc/sysctl.conf && sysctl -q -p
/proc/sys/kernel/pid_max
表示整个系统内核可以分配的最大进程ID(默认值为32768,2个字节的最大值),也就是说,整个系统内核最多只能分配pid_max个进程或线程,如需修改执行命令:
- echo ‘kernel.pid_max=1048576’ >> /etc/sysctl.conf && sysctl -q -p
/proc/sys/vm/max_map_count
表示单个进程可以分配的内存映射区域的最大数量(默认值为65530),由于java中每创建一个线程需要分配2个内存映射区域,并且jvm本身也要占用部分内存映射区域,所以java程序理论上最多可以创建的线程数为略小于max_map_count/2(实际上还受jvm参数-Xms、-Xmx、-Xss以及操作系统物理内存的影响),如需修改执行命令:
- echo ‘vm.max_map_count=2097152’ >> /etc/sysctl.conf && sysctl -q -p
单个进程可以创建的线程数由
nproc
、threads-max
、pid_max
、max_map_count
以及系统资源
同时约束,达到其中一个的上限就不能再创建线程了
注意事项
domain中具体用户比通配符(*)优先级高
软限制不能大于硬限制,如果配置文件中软限制设置的比硬限制高,则软限制会使用硬限制的值,通过ulimit命令设置软限制不能超过硬限制。root用户可以通过ulimit命令降低和提高硬限制(nofile的值不能超过nr_open的值)。非root用户可以通过ulimit命令降低硬限制,但不可以通过ulimit命令提高硬限制。
查看进程的相关命令
1.查看当前用户(esuser )所有进程情况
ps -u esuser -L | wc -l
2.看具体进程句柄信息
ps axu|grep elasticsearch (获取进程pid)
ls /proc/$pid/fd | wc -l (当前这个进程已经占用多少文件句柄)
cat /proc/$pid/limits | grep file (查看这个进程设置的最大文件句柄)
2、linux的vm.swappiness参数
内核参数vm.swappiness控制换出运行时内存的相对权重,参数值大小对如何使用swap分区有很大联系。值越大,表示越积极使用swap分区,越小表示越积极使用物理内存。默认值swappiness=60,表示内存使用率超过100-60=40%时开始使用交换分区。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间;swappiness=100的时候表示积极使用swap分区,并把内存上的数据及时搬运到swap空间。(对于3.5以后的内核和RedHat 2.6.32之后的内核,设置为0会禁止使用swap,从而引发out of memory,这种情况可以设置为1。)
边栏推荐
猜你喜欢
设置Vagrant创建的虚拟机名称和内存
Rust从入门到精通06-函数
2022年值得关注的NFT发展趋势
Inventorying Four Entry-Level SSL Certificates
机器学习(一)数据的预处理
Nuget can't find the package problem
VoLTE基础自学系列 | 3GPP规范解读之Rx接口(上集)
中国电子学会五级考点详解(一)-string类型字符串
盘点四个入门级SSL证书
go-grpc TSL authentication solution transport: authentication handshake failed: x509 certificate relies on ... ...
随机推荐
链式编程注解
Kotlin算法入门计算素数以及优化
Go 语言的诞生
Openlayers Aggregate Graph, Weight Aggregate Graph, and Aggregate Graph Click Events
eureka和consul的区别
借问变量何处存,牧童笑称用指针,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang类型指针(Pointer)的使用EP05
Alibaba Sentinel - Slot chain解析
Getting Started with Kotlin Algorithm to Calculate the Number of Daffodils
关于架构的认知
SDUT 2877:angry_birds_again_and_again
JUC Concurrent Programming
Birth of the Go language
idea 方法注释:自定义修改method的return和params,void不显示
AUTOSAR从入门到精通番外篇(八)-C语言常用技巧50个
dsu on tree(树上启发式合并)学习笔记
AcWing 272. 最长公共上升子序列
法律顾问成了律所鸡肋产品了吗?
Kotlin算法入门求自由落体
Features of LoRa Chips
如何仅更改 QGroupBox 标题的字体?