核心概念
- 集群(Cluster)
一个Elasticsearch集群由多个节点(Node)组成,每个集群都有一个共同的集群名称作为标识
- 节点(Node)
- 一个Elasticsearch实例即一个Node,一台机器可以有多个实例,正常使用下每个实例都应该会部署在不同的机器上。Elasticsearch的配置文件中可以通过node.master、node.data来设置节点类型。
- node.master:表示节点是否具有成为主节点的资格
true代表的是有资格竞选主节点
false代表的是没有资格竞选主节点
- node.data:表示节点是否存储数据
- Node节点组合
- 主节点+数据节点(master+data) 默认
- 主节点+数据节点(master+data) 默认
node.master: true
node.data: true
- 数据节点(data) 节点没有成为主节点的资格,不参与选举,只会存储数据
node.master: false
node.data: true
- 客户端节点(client)不会成为主节点,也不会存储数据,主要是针对海量请求的时候可以进行负载均衡
node.master: false
node.data: false
- 分片
- 每个索引有1个或多个分片,每个分片存储不同的数据。分片可分为主分片(primaryshard)和复制分片(replica shard),复制分片是主分片的拷贝。默认每个主分片有一个复制分片,每个索引的复制分片的数量可以动态地调整,复制分片从不与它的主分片在同一个节点上
- 副本 主分片的拷贝
提高恢复能力:当主分片挂掉时,某个复制分片可以变成主分片;
提高性能:get 和 search 请求既可以由主分片又可以由复制分片处理;
Elasticsearch分布式架构
Elasticseasrch的架构遵循其基本概念:一个采用Restful API标准的高扩展性和高可用性的实时数据分析的全文搜索引擎。
特性
- 高扩展性:体现在Elasticsearch添加节点非常简单,新节点无需做复杂的配置,只要配置好集群信息将会被集群自动发现。
- 高可用性:因为Elasticsearch是分布式的,每个节点都会有备份,所以宕机一两个节点也不会出现问题,集群会通过备份进行自动复盘。
- 实时性:使用倒排索引来建立存储结构,搜索时常在百毫秒内就可完成。
解析Elasticsearch的分布式架构
分布式架构的透明隐藏特性
Elasticsearch是一个分布式系统,隐藏了复杂的处理机制
分片机制:将文本数据切割成n个小份存储在不同的节点上,减少大文件存储在单个节点上对设备带来的压力。
分片的副本:在集群中某个节点宕掉后,通过副本可以快速对缺失数据进行复盘
集群发现机制(cluster discovery):在当前启动了一个Elasticsearch进程,在启动第二个Elasticsearch进程时,这个进程将作为一个node自动就发现了集群,并自动加入,前提是这些node都必须配置一套集群信息。
Shard负载均衡:例如现在由10个 shard (分片),集群中由三个节点,Elasticsearch会进行均衡的分配,以保持每个节点均衡的负载请求。
扩容机制
垂直扩容:用新机器替换已有的机器,服务器台数不变容量增加。
水平扩容:直接增加新机器,服务器台数和容量都增加。
rebalance
增加或减少节点时会自动负载主节点
主节点的主要职则是和集群操作的相关内容,如创建或删除索引,跟踪哪些节点是集群的一部分,并决定哪些分片分配给相关的节点。稳定的主节点对集群的健康是非常重要的。节点对等
每个节点都能接受请求,每个节点接受到请求后都能把该请求路由到有相关数据的其它节点上,接受原始请求的节点负责采集数据并返回给客户端。
集群环境搭建
虚拟机内存要3g以上节点搭建
elasticsearch.yml配置文件说明
我们要只需要在之前的基础上,打开配置文件elasticsearch.yml,添加如下配置:cluster.name: my-es #集群名称 —- node.name: node-1 # 节点名称 node.master: true #当前节点是否可以被选举为master节点,是:true、否:false —- network.host: 0.0.0.0 http.port: 9200 transport.port: 9300 # —-
初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: [“node-1”,”node-2”,”node-3”]
写入候选主节点的设备地址 —-
discovery.seed_hosts: [“127.0.0.1:9300”, “127.0.0.1:9301”,”127.0.0.1:9302”] http.cors.enabled: true http.cors.allow-origin: “*”
修改完配置文件之后,一定要把之前的data目录下node数据删除再重新服务即可。
第二节点搭建
- 拷贝原来的ES节点elasticsearch 并命名为elasticsearch1,并授权
cp elasticsearch/ elasticsearch1 -rf
chown -R estest elasticsearch1
进入elasticsearch1目录confifig文件夹,修改elasticsearch.yml配置文件并保存。
修改node.name 和 http.port transport.port
node.name: node-2 http.port: 9201 transport.port: 9301
启动从环境1 一定要用estest用户来执行
cd bin/
./elasticsearch
- 第三节点配置
拷贝第一个节点 并命名为elasticsearch2,并授权 chown -R estest elasticsearch2
进入elasticsearch2目录confifig文件夹,修改elasticsearch.yml配置文件并保存
修改node.name 和 http.port transport.port
node.name: node-3
http.port: 9202
transport.port: 9302
启动从环境1 一定要用estest用户来执行
cd bin/
./elasticsearch
