elk elasticsearch安装
elasticsearch安装
1.1 es基本概念
cluster
代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。
shards
代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
replicas
代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。
recovery
代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。
river
代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。
gateway
代表es索引快照的存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到本地硬盘。gateway对索引快照进行存储,当这个es集群关闭再重新启动时就会从gateway中读取索引备份数据。es支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务。
discovery.zen
代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。
Transport
代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)
2.1 安装java
2.1.1 安装java
elasticsearch和Logstash 的运行依赖于 Java 运行环境, Logstash 5.6 以上版本不低于 Oracle JDK version 1.8.0_131,7.0之后貌似对OpenJDK支持友好。出于习惯,这里采用的1.8.0_322
3.1 vm配置调整
3.1.1 调整最大打开文件数
elasticsearch要求65535否则报错
vi /etc/ssh/sshd_config
将# UseLogin no 改成 UseLogin yes,并重启 ssh
echo "* soft nofile 655350" >> /etc/security/limits.conf
echo "* hard nofile 655350" >> /etc/security/limits.conf
ulimit –Hu
ulimit -Su
3.1.2 调整可用内存
echo "vm.max_map_count=655360" >> /etc/sysctl.conf
sysctl -p
sysctl -a | grep max_map_count
4.1 安装
4.1.1 创建用户
useradd elasticsearch
4.1.2 新建日志和数据目录
mkdir -p /home/admin/elk/elasticsearch
chown -R elasticsearch: /home/admin/elk/elasticsearch
下载安装包
cd /home/admin/elk/elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.2.0-x86_64.rpm
rpm -ivh elasticsearch-7.2.0-x86_64.rpm --nodeps
4.1.3 配置
vim /etc/elasticsearch/elasticsearch.yml
cluster.name: elk-lvs #集群名称
node.name: elk-slave1 #另一台集群只有这个地方不一样,集群节点id,唯一
path.data: /home/admin/elk/elasticsearch/data #数据
path.logs: /home/admin/elk/elasticsearch/logs #日志
network.host: 192.168.40.128 #主机或IP
http.port: 9200 #http端口
cluster.initial_master_nodes: ["elk-slave1"] #设置默认master节点,7.0版本新特性,否则加入不了集群,很坑,head插件也用不了。集群中可以成为master节点的节点名,这里指定唯一的一个,防止脑裂
discovery.seed_hosts: ["192.168.40.128", "192.168.40.129"] #广播区域
5.1 启动
systemctl daemon-reload
systemctl start elasticsearch
systemctl enable elasticsearch
6.1 测试
curl 192.168.40.128:9200
页面访问:
7.1 优化
7.1.1 脑裂优化
vim /etc/elasticsearch/elasticsearch.yml
cluster.initial_master_nodes: ["elk-slave1"] #设置默认master节点,7.0版本新特性,否则加入不了集群,head插件也用不了。集群中可以成为master节点的节点名,这里指定唯一的一个,防止脑裂
discovery.zen.minimum_master_nodes: 2 #这个参数貌似在新版本中被优化掉了
脑裂是什么?
如果网络的故障导致一个集群被划分成两片,每片都有多个node,以及一个master。因为master是维护集群状态,以及shard的分配。如果出现了两个master,可能导致数据破损。discovery.zen.minimum_master_nodes的作用是只有足够的master候选节点时,才可以选举出一个master。该参数必须设置为集群中master候选节点的quorum数量。quorum的算法=master候选节点数量/2+1
举例:
1、如果有10个节点,都是data node,也是master的候选节点。则quorum=10/2+1=6
2、如果有3个master候选节点,100个数据节点。则quorum=3/2+1=2
3、如果有2个节点,都是data node,也是master的候选节点。则quorum=2/2+1=2(有问题)
如果其中一个节点挂了,那么master的候选节点只有一个,无法满足quorum数量。即无法选举出master。此时只能将quorum设置成1,但是设置为1有可能出现脑裂。
总结:一般es集群的节点至少要有3个,quorum设置为2
脑裂案例一:
两个同时重启后出现以下错误,选不出master,可能跟之前的历史数据有关系,我清空历史数据,重启就OK 了。
master not discovered or elected yet, an election requires a node with id
7.1.2 启动内存优化
vim /usr/lib/systemd/system/elasticsearch.service #可以最大化使用内存
[Service]
LimitMEMLOCK=infinity
vim /etc/elasticsearch/jvm.options #xmx和xms不要超过物理机器内存的一半
-Xms1g
-Xmx1g
修改完毕后重启 elasticsearch
8.1 cat查看节点信息
8.1.1 es集群部署
es的集群部署很简单,就是再部署一个es,配置文件有两处不一样
node.name: elk-slave2
network.host: 192.168.40.129
启动后就是一个es集群
9.1 健康检查
9.1.1 shell监控
curl -sXGET http://10.6.76.28:9200/_cluster/health?pretty=true