文章目录
1. Elasticsearch简介
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,是当前流行的企业级搜索引擎。用于构建高可用和可扩展的系统。
1.1 集群介绍
集群中有多个节点,其中有一个为主节点,主节点可以通过选举产生或者配置指定,主从节点是对于集群内部来说的。es的一个概念就是去中心化,对于集群外部来说是无中心节点的,从外部来看es集群,在逻辑上是个整体,与任何一个节点的通信和与整个es集群通信是等价的。
- 索引分片(shards):es把一个完整的索引分成多个分片,把一个大的索引拆分成多个小的索引并分布到不同的节点上,构成分布式搜索。分片的数量只能在索引创建前指定且索引创建后不能更改。
- 索引副本(replicas):es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点的分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。
- 数据恢复(recovery):es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,宕掉的节点重新启动时也会进行数据恢复。
- 数据源(river):表示数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。
- 快照存储方式(geteway):表示索引快照的存储方式,ES默认把索引存放到内存中,当内存满了再持久化到磁盘。geteway对索引快照进行存储,当这个集群关闭再重新启动时就会从geteway中读取索引备份数据。ES支持多种类型的gateway,如本地文件系统(默认)。
- 节点自动发现(discovery.zen):ES是一个基于P2P协议的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。
- 交互方式(transport):表示es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议、thrift、memcached、zeroMQ等传输协议。
2. 集群部署
2.1 部署环境
系统 | 节点名 | IP |
---|---|---|
CentOS7.3 | els1 | 192.168.1.11 |
CentOS7.3 | els2 | 192.168.1.12 |
CentOS7.3 | els3 | 192.168.1.13 |
2.2 ES部署
2.2.1 系统环境配置
#下载java8并解压
tar -zxvf jdk-8u111-linux-x64.tar.gz
#将java环境添加到系统配置文件中
vim /etc/profile
export JAVA_HOME=/opt/jdk1.8.0_111
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
#添加用户elsearch,应用不能使用root用户启动
useradd elsearch
#赋予文件夹权限
chown -R elsearch:elsearch /usr/local/elasticsearch
#为避免出现以下错误:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
#增加系统配置
vim /etc/sysctl.conf
vm.max_map_count=262144
sysctl -p
vim /etc/security/limits.conf
#allow user 'elsearch' mlockall
elsearch soft memlock unlimited
elsearch hard memlock unlimited
elsearch soft nproc 2048
elsearch hard nproc 2048
2.2.2 ES下载
从ELasticsearch的官方站点下载即可。
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.2.tar.gz
tar -zxvf elasticsearch-6.2.2.tar.gz
#相关配置文件
/etc/elasticsearch-6.2.2/elasticsearch.yml # ES的配置文件
/etc/elasticsearch-6.2.2/jvm.options # JVM相关的配置,内存大小等
/etc/elasticsearch-6.2.2/log4j2.properties # 系统日志配置文件
2.2.3 JVM配置
ES是Java开发的,可以通过elasticsearch-6.2.2/config/jvm.options文件来配置JVM参数。
#修改ES运行时能使用的内存,官方建议一个服务分配不超过32g内存
vim elasticsearch-6.2.2/config/jvm.options
-Xms1g
-Xmx1g
2.2.4 集群配置
cluster.name: my-elk # 集群名称,同集群节点名称相同
node.name: els1 # 节点名称,默认会随机取名称
path.data: /data/es-data # 数据的存放路径
path.logs: /var/log/elasticsearch/ # 日志的默认存放路径
bootstrap.memory_lock: true #JVM将在启动时锁定堆(heap)的初始(Xms)大小,提升性能
bootstrap.system_call_filter: false
network.host: 0.0.0.0 # 监听主机IP
http.port: 9200 # 监听端口
node.master: true # 表示节点是否具有成为主节点的资格
node.data: true #表示节点是否存储数据
# 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
discovery.zen.ping.unicast.hosts: ["192.168.1.11","192.168.1.12","192.168.1.13"]
# 为了避免集群脑裂,节点数最少为(n/2+1)
discovery.zen.minimum_master_nodes: 3
#是否启用对同一分片在同一个主机上出现多个分配实例的检测,这个选项只有在同一个node上启动多个es实例的情况下才有意义
cluster.routing.allocation.same_shard.host: true
#指定是否允许跨源 REST 请求
http.cors.enabled: true
http.cors.allow-origin: "*"
#节点负责存储数据,提供建立索引和查询索引的服务
node.master: false
node.data: true
#节点不会存储数据,有成为主节点的资格,维护整个集群的状态
node.master: true
node.data: false
#客户端节点,负责处理用户请求,实现请求转发、负载均衡等功能
node.master: false
node.data: false
2.2.5 启动与测试
#使用新建的用户elsearch来启动
/usr/local/elasticsearch/bin/elasticsearch -d
#测试
curl -XGET 'http://127.0.0.1:9200/_cat/nodes?pretty'
192.168.1.11 6 64 0 0.00 0.01 0.05 md - els1
192.168.1.12 8 62 0 0.00 0.01 0.05 md * els2
192.168.1.13 5 61 0 0.00 0.04 0.05 md - els3