序言

ES数据架构的主要概念(与关系数据库Mysql对比)

集群(cluster)

  集群,一个ES集群由一个或多个节点(Node)组成,每个集群都有一个cluster name作为标识。一下是我们的4节点集群。

节点(node)

  节点,一个ES实例就是一个node,一个机器可以有多个实例,所以并不能说一台机器就是一个node,大多数情况下每个node运行在一个独立的环境或虚拟机上。

索引(index)

  索引,即一系列documents的集合。

类型(type)

分片(shard)

  一个拥有两个主分片一份副本的索引可以在四个节点中横向扩展。

分片是什么?

  简单来讲就是咱们在ES中所有数据的文件块,也是数据的最小单元块,整个ES集群的核心就是对所有分片的分布、索引、负载、路由等达到惊人的速度。 

  实列场景:

  假设 IndexA 有2个分片,我们向 IndexA 中插入10条数据 (10个文档),那么这10条数据会尽可能平均的分为5条存储在第一个分片,剩下的5条会存储在另一个分片中。

  和主流关系型数据库的表分区的概念有点类似,如果你比较熟悉关系型数据库的话。

创建 IndexName 索引时候,在 Mapping 中可以如下设置分片 (curl)

PUT indexName
{
"settings": {
"number_of_shards": 5
}
}

Elastic 官方文档建议:一个 Node 最好不要多于三个 shards。注意 索引建立后,分片个数是不可以更改的。

在进行历史数据入库的时候,建议先在settings中将备份设为0,refresh关闭来提升索引效率,数据入库完毕可恢复需要值。

"settings": {
"number_of_shards": 5,
"number_of_replicas": 0,
"refresh_interval": -1
}

分片好处

  1.分片,ES是分布式搜索引擎,每个索引有一个或多个分片,索引的数据被分配到各个分片上,相当于一桶水用了N个杯子装

  2.分片有助于横向扩展,N个分片会被尽可能平均地(rebalance)分配在不同的节点上(例如你有2个节点,4个主分片(不考虑备份),那么每个节点会分到2个分片,后来你增加了2个节点,那么你这4个节点上都会有1个分片,这个过程叫relocation,ES感知后自动完成)

  3.分片是独立的,对于一个Search Request的行为,每个分片都会执行这个Request.

  4.每个分片都是一个Lucene Index,所以一个分片只能存放 Integer.MAX_VALUE - 128 = 2,147,483,519 个docs。

分片个数

建议:(仅参考)

  1、每一个分片数据文件小于30GB

  2、每一个索引中的一个分片对应一个节点

  3、节点数大于等于分片数

副本(replica)

  1.复制,可以理解为备份分片,相应地有primary shard(主分片)

  2.主分片和备分片不会出现在同一个节点上(防止单点故障),默认情况下一个索引创建5个分片一个备份(即5primary+5replica=10个分片)

  3.如果你只有一个节点,那么5个replica都无法分配(unassigned),此时cluster status会变成Yellow。

通过调整副本数来均衡节点负载

  事实上节点 3 持有两个副本分片,然而没有主分片并不重要。副本分片与主分片做着相同的工作;它们只是扮演着略微不同的角色。没有必要确保主分片均匀地分布在所有节点中。

  从这个图我发现两个Node节点 ,5个shard分片,1个replica备份,没毛病啊,每个节点就是有完整的信息:

  ok,这里是3个node,3个shard,1份replica,发现了吗,这边的话每个节点并没有完整的数据,但是任意两个节点有完整的数据即使一台机器宕机,剩下两个节点依然可以提供完整的数据,依然满足高可用。

结论
  发现规律了吗?其实很简单 如果每个机器上要有完整的数据 ,需要满足 分片数*节点数的总分片数量,当然,这里的总分片数量包含了 主分片和副本分片。因此,我们得出一个公式:副本数replica =(shardNum*nodeNum-shardNum)/shardNum。当replica大于此值时,满足要求。

 

资料

https://www.elastic.co/guide/cn/elasticsearch/guide/current/_analytics.html

https://www.cnblogs.com/52fhy/p/9826356.html

https://blog.csdn.net/yzhujue/article/details/53128813?utm_source=blogxgwz0

http://www.lanrenkaifa.com/post/57

IK分词

https://github.com/medcl/elasticsearch-analysis-ik/releases

ELK下载地址

https://www.elastic.co/cn/downloads/past-releases

https://www.yiibai.com/elasticsearch/elasticsearch-getting-start.html

最新文章

  1. DB2数据库参数建议(Linux)
  2. Linux 之加密类型,CA,Openssl,Openssh
  3. 51Nod 1380 夹克老爷的逢三抽一
  4. thinkPHP实现瀑布流的方法
  5. SVN服务器搭建和使用
  6. [译]PyUnit—Python单元测试框架(1)
  7. UVa 10025: The ? 1 ? 2 ? ... ? n = k problem
  8. Windows主机和Linux虚拟机之间传输文件
  9. HTML5游戏开发引擎Pixi.js完全入门手册(二)元素对象属性解析
  10. 在iOS中获取UIView的所有层级结构 相关
  11. 教你用.Net来玩微信跳一跳
  12. 理解 Node.js 的 Event loop
  13. iOS 单选框
  14. C# 异步(上)
  15. MongoDB的数据备份与恢复
  16. 第8章 CentOS包管理详解
  17. HDU 1074 (DP + 状态压缩)
  18. tensorflow(3):神经网络优化(ema,regularization)
  19. Django视图层、虚拟环境
  20. C#使用iTextSharp+ZXing.Net+FreeSpire.PDF生成和打印pdf文档

热门文章

  1. Java面试&编写程序:使子线程循环10次,紧接着主线程循环100次,来回50次
  2. Internet History, Technology and Security (Week 2)
  3. SQLSERVER 修改实例名以及架构信息
  4. es6 const关键字
  5. docker-py安装
  6. RHEL/Centos下Sendmail服务器搭建
  7. jquery 半透明遮罩效果 小结
  8. java传统的文件拷贝 相当于两个大缸需要通过一个勺子(字节数组)一点一点运过去
  9. 多进程编程之守护进程Daemonize
  10. Mybatis笔记三:MyBatis的API文档