一、ES核心概念

1. ES基本概念名词:
Cluster

代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。

Shards

代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。

replicas

代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

Recovery

代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

2. ES集群核心原理分析:

es数据存储方式:

  1. 每个索引会被分成多个分片shards进行存储,默认创建索引是分配5个分片进行存储。
    每个分片都会分布式部署在多个不同的节点上进行部署,该分片成为primary shards。
    注意:索引的主分片primary shards定义好后,后面不能做修改。

  2. 为了实现高可用数据的高可用,主分片可以有对应的备分片replics shards,replic shards分片承载了负责容错、以及请求的负载均衡。
    注意: 每一个主分片为了实现高可用,都会有自己对应的备分片,主分片对应的备分片不能存放同一台服务器上。主分片primary shards可以和其他replics shards存放在同一个node节点上。

注:ES集群中,主节点做增删,主节点和其他节点都可以做查询,当master节点宕机后,自动选举leader。

3. ES为什么要做集群?
  1. 在单台ES服务器节点上,随着业务量的发展索引文件慢慢增多,会影响到效率和内存存储问题等。

  2. 我们可以采用ES集群,将单个索引的分片到多个不同分布式物理机器上存储,从而可以实现高可用、容错性等。

  3. ES集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本。通过将一个单独的索引分为多个分片,我们可以处理不能在一个单一的服务器上面运行的大型索引,简单的说就是索引的大小过大,导致效率问题。不能运行的原因可能是内存也可能是存储。由于每个分片可以有多个副本,通过将副本分配到多个服务器,可以提高查询的负载能力。

4. 简单介绍ES分片技术Shards

ES为了高可用,主分片默认5个,每个主分片默认有1个对应的副分片。
注:主分片定义好就不能修改了。

为什么ES主分片对应的备分片不在同一台节点存放?
因为主分片和备分片存在在同一节点,若该节点宕机后,备分片数据也没有没,这时从其他节点访问的数据就不完整。

注:单台服务器是没有备分片的,因为没有意义。

索引的主分片定义好后为什么不能做修改?

  1. 其实这跟 documnet routing(数据路由)有关,当客户端发起创建document的时候,es需要确定这个document放在该index哪个shard上。这个过程就是数据路由。
    路由算法:shard = hash(routing) % number_of_primary_shards

  2. 如果number_of_primary_shards在查询的时候取余发生的变化,无法获取到该数据

ES水平拓展节点增加副分片
算法:副分片 = node² 即:副分片数量等于ES节点的平方
每个ES节点中都存在一个完整数据(如两个ES节点,一个完整数据的组合可能是 P1+P2 、P1+P2、R1+R2)

主节点宕机后,通过选举产生新的Leader,当宕机的服务恢复后会重新进行分片计算。

查看索引分片数量(_settings接口):
查询myindex索引的分片信息: http://192.168.2.100/myindex/_settings

二、ES高可用集群环境搭建

ES集群很简单,只需要保证每个节点cluster.name一致和其他简单配置即可实现集群。

1. 服务器环境

虚拟三台服务器做集群,下面是我虚拟的3台服务器:服务器名称 IP地址
node-0  192.168.2.100
node-1  192.168.2.101
node-2  192.168.2.102

2. 服务集群配置
进入Elasticsearch的config目录执行 vim elasticsearch.yml,配置如下:

cluster.name: myes    # 保证三台服务器节点集群名称相同
node.name: node-0  # 每个节点名称不一样 其他两台为node-1 ,node-2
network.host: 192.168.2.180  # 实际服务器ip地址
# 多个服务集群ip
discovery.zen.ping.unicast.hosts: ["192.168.2.100", "192.168.2.101","192.168.2.102"]
discovery.zen.minimum_master_nodes: 1

关闭防火墙 systemctl stop firewalld.service
默认底层开启9300 集群

3. 验证集群效果
浏览器访问/_cat/nodes接口:http://192.168.2.101:9200/_cat/nodes

有*号的表示为master节点

集群环境启动报错:

  • 报错:failed to send join request to master 或 with the same id but is a different node instance
  • 原因:是因为克隆虚拟机时,elsticsearch时,将elsticsearch文件夹下的data文件夹一并克隆了,
    data文件会导致数据不同步。而在前面测试时,data文件夹下已经产生了data数据,于是报上面的错误。
  • 解决方法:直接删除每台ES服务器的data目录下的文件

4. 测试各节点数据同步
192.168.2.101节点添加id为20的数据:

192.168.2.102进行访问刚刚添加的id为20的数据,我们发现能够正确访问到数据:


到这里就大功告成了,其实ES要学习的还有很多,这里仅仅是入门,学习下主要ES的一些设计思想及简单使用,要在项目中用好还需要多加实战。

Elasticsearch高级(Shards、高可用集群搭建)相关推荐

  1. RabbitMQ 高级指南:从配置、使用到高可用集群搭建

    博主说:在项目中,通过 RabbitMQ,咱们可以将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量. 正文 1 Rab ...

  2. RabbitMQ高级指南:从配置、使用到高可用集群搭建

    本文大纲: 1. RabbitMQ简介 2. RabbitMQ安装与配置 3. C# 如何使用RabbitMQ 4. 几种Exchange模式 5. RPC 远程过程调用 6. RabbitMQ高可用 ...

  3. mycat mysql好可用架构_想要学会MyCat高可用集群搭建,但是这些知识点却还玩不明白?...

    一.集群架构 1.MyCat实现读写分离架构 在我前面的文章, 我已经讲解过了通过MyCat来实现MySQL的读写分离, 从而完成MySQL集群的负载均衡 , 如下面的结构图: 但是以上架构存在问题 ...

  4. RabbitMQ高可用集群搭建

    RabbitMQ高可用集群搭建 摘要:实际生产应用中都会采用消息队列的集群方案,如果选择RabbitMQ那么有必要了解下它的集群方案原理一般来说,如果只是为了学习RabbitMQ或者验证业务工程的正确 ...

  5. Hadoop HA 高可用集群搭建

    Hadoop HA 高可用集群搭建 一.首先配置集群信息 1 vi /etc/hosts 二.安装zookeeper 1.解压至/usr/hadoop/下 1 tar -zxvf zookeeper- ...

  6. Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

    一.服务器环境 主机名 IP 用户名 密码 安装目录 master 192.168.142.124 root xxx /usr/hadoop-2.6.5/ slave1 192.168.142.125 ...

  7. Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...

  8. RabbitMQ 高可用集群搭建

    RabbitMQ 高可用集群搭建 1 集群简介 1.1 集群架构 ​ 当单台 RabbitMQ 服务器的处理消息的能力达到瓶颈时,此时可以通过 RabbitMQ 集群来进行扩展,从而达到提升吞吐量的目 ...

  9. k8s高可用集群搭建部署

    简介 k8s普通搭建出来只是单master节点,如果该节点挂掉,则整个集群都无法调度,K8s高可用集群是用多个master节点加负载均衡节点组成,外层再接高可用分布式存储集群例如ceph集群,实现计算 ...

最新文章

  1. 如何提高UI自动化测试的质量
  2. smart pointer in gamedev
  3. 使用Log4j - Java异常处理
  4. windows系统采用了那种访问控制模型_Linux-3.2 系统与硬件(下)(连载)
  5. CF1497C k-LCM
  6. Haproxy实现负载均衡
  7. OEL6.1下oracle 11gr2 ASM安装
  8. 直接在低版本IE6/7/8浏览器中使用HTML5的audio和video标签播放视频音频的办法
  9. PSD分层模板素材丨只需掌握三大规则!电商海报秒脱俗套
  10. jenkins创建任务运行windows命令扫描C#代码
  11. linux/windows双系统安装、启动顺序设置及重新设置
  12. vue 移动端选择器
  13. oracle 9i/10g/11g(11.2.0.3)安装包和PATCH下载地址汇总
  14. 动态SLIC加载(DBSLDR)激活win7
  15. Linux信号量以及互斥体
  16. 数据人需要掌握的技能,从底层到应用
  17. 02. 一元线性回归公式推导
  18. 【环境部署系列 06】Ascend 310(推理)X86服务器 Ubuntu系统环境部署
  19. 计算机少了4个磁盘,电脑硬盘突然少了几个分区,这是怎么回事?如何修复?...
  20. html的JEE安装,JEE ( Java 企业级开发技术)

热门文章

  1. php crc16计算,如何在PHP HEX中计算CRC16 CCITT?
  2. 网罗天下 v1.0 下载
  3. 启用系统保护是灰色的#win10系统
  4. 降噪蓝牙耳机评测排行榜最新,综合表现好的降噪蓝牙耳机分享
  5. 华为 Mate 40 系⁠列详细参数对比,Mate 40\40Pro\40Pro+\40RS
  6. 中泰XTP极速交易系统缔造者:为量化而生
  7. Android之黄油刀(butterknife)
  8. 肿瘤浸润免疫细胞量化分析简介
  9. 2017-2018-1 20155228 《信息安全系统设计基础》第一周学习总结
  10. Redis学习、缓存、持久化、哨兵模式