引言
一、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
等的传输协议(通过插件方式集成)。
二、部署环境
采用三台CentOS7.3
部署ElasticSearch
集群,部署ElasticSearch
集群就不得不提索引分片,以下是索引分片的简单介绍。
系统 | 节点名 | IP |
---|---|---|
CentOS7.3 | els1 | 172.18.68.11 |
CentOS7.3 | els2 | 172.18.68.12 |
CentOS7.3 | els3 | 172.18.68.13 |
ES
集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本。通过将一个单独的索引分为多个分片,我们可以处理不能在一个单一的服务器上面运行的大型索引,简单的说就是索引的大小过大,导致效率问题。
不能运行的原因可能是内存也可能是存储。由于每个分片可以有多个副本,通过将副本分配到多个服务器,可以提高查询的负载能力。
三、部署Elasticsearch集群
1. 安装JDK
Elasticsearch
是基于Java
开发的一个Java
程序,运行在Jvm
中,所以第一步要安装JDK
yum install -y java-1.8.0-openjdk-devel
2. 下载ElasticSearch
ElasticSearch Download 是ELasticSearch
的中文官方站点。
下载您所需要的版本,我这里是elasticsearch-6.4.2-linux-x86_64.tar.gz
[root@hadoop1 ~]# tar -zxvf elasticsearch-6.4.2-linux-x86_64.tar.gz
# 因为执行./bin/elasticsearch -d需要非root用户,因此需要创建elastic用户
[root@hadoop1 ~]# adduser elastic
# 修改elastic用户拥有root权限
[root@hadoop1 ~]# vim /etc/sudoers
# 添加权限
elastic ALL=(ALL) ALL
:wq!保存
#授权
[root@hadoop1 ~]# chmod 775 elasticsearch-6.4.2
[root@hadoop1 ~]# chown -R elastic:elastic elasticsearch-6.4.2
[root@hadoop1 ~]# mv elasticsearch-6.4.2 /home/elastic/
[root@hadoop1 ~]# su - elastic
[elastic@hadoop1 ~]$ cd
[elastic@hadoop1 ~]$ ll
drwxrwxr-x 8 elastic elastic 4096 Sep 26 2018 elasticsearch-6.4.2
3. 配置目录
安装完毕后会生成很多文件,包括配置文件、日志文件等等,下面几个是最主要的配置文件路径:
# ES的配置文件
/etc/elasticsearch/elasticsearch.yml
# JVM相关的配置,内存大小等等
/etc/elasticsearch/jvm.options
# 日志系统定义
/etc/elasticsearch/log4j2.properties
# 数据的默认存放位置
/var/lib/elasticsearch
4. 创建用于存放数据与日志的目录
数据文件会随着系统的运行飞速增长,所以默认的日志文件与数据文件的路径不能满足我们的需求,那么手动创建日志与数据文件路径,可以使用NFS
(Network File System
)、可以使用Raid
(磁盘阵列)等等方便以后的管理与扩展。
mkdir {logs,data}
5. 集群配置
集群配置中最重要的两项是node.name
与network.host
,每个节点都必须不同。其中node.name
是节点名称,主要是在Elasticsearch
自己的日志加以区分每一个节点信息。
discovery.zen.ping.unicast.hosts
是集群中的节点信息,可以使用IP
地址、可以使用主机名(必须可以解析)。
vim /home/elastic/elasticsearch-6.4.2/config/elasticsearch.yml
cluster.name: your-self-cluster
node.name: es-node1 # 节点名称,仅仅是描述名称,用于在日志中区分
path.data: /home/ozan/elasticsearch-6.4.2/data # 数据的默认存放路径
path.logs: /home/ozan/elasticsearch-6.4.2/logs # 日志的默认存放路径
network.host: 192.168.0.1 # 当前节点的IP地址
http.port: 9200 # 对外提供服务的端口,9300为集群服务的端口
discovery.zen.ping.unicast.hosts: ["172.18.68.11", "172.18.68.12","172.18.68.13"]
# 集群个节点IP地址,也可以使用els、els.shuaiguoxia.com等名称,需要各节点能够解析
discovery.zen.minimum_master_nodes: 2 # 为了避免脑裂,集群节点数最少为 半数+1
在最后加上这两句,要不然,外面浏览器就访问不了哈
http.cors.enabled: true
http.cors.allow-origin: "*"
6. JVM配置
由于Elasticsearch
是Java
开发的,所以可以通过/etc/elasticsearch/jvm.options
配置文件来设定JVM
的相关设定。如果没有特殊需求按默认即可。
不过其中还是有两项最重要的-Xmx
1g
与-Xms
1g
JVM的最大最小内存。如果太小会导致Elasticsearch
刚刚启动就立刻停止,太大会拖慢系统本身。
vim /etc/elasticsearch/jvm.options
-Xms1g # JVM最大使用内存
-Xmx1g # JVM最小使用内存
7. 启动Elasticsearch
由于启动Elasticsearch
会自动启动daemon-reload
所以最后一项可以省略。
[elastic@hadoop1 bin]$ ./elasticsearch -d
查看elasticsearch
的logs
:
8. 测试
Elasticsearch
提供了http
接口调用,所以直接使用curl
命令就可以查看到一些集群相关的信息。
可以使用curl命令来获取集群的相关的信息
_cat:代表查看信息
nodes:为查看节点信息,默认会显示为一行,所以就用?preety让信息更友好的显示
?preety:让输出信息更友好的显示