为什么集群
集群是为一组互联的完整计算机,一起作为一个统一的计算资源而工作,给人以一台机器的感觉。
集群有三大优点,所以很多系统都以集群的形式出现:
- 高性价比:使用普通的计算机来构建集群,能够以非常低的价格,获得比大型机更高的性能。
- 高可用性:因为集群中的每个节点都是一台独立的计算机(或者部署在其上),集群服务都有容错能力,所以某一个节点的故障不意味着集群服务的失败。
- 可伸缩性:可以通过横向调整集群节点的伸缩,实现集群的服务能力。
elasticsearch以集群的形式服务也是基于上面原因。
集群模型
分布式集群业界一般有两种模型,中心化集群和去中心化集群。
- 中心化:中心化集群包含有主节点,用来对非主节点进行协调;非主节点负责任务执行。如hadoop。
- 去中心化:去中心化化集群实现比较复杂,所有节点都对等的,如 Cassandra、Redis-cluster。
elasticsearch集群属于中心化集群。
- 在众多节点中选举一个节点作为mater,维护元数据信息(meta、routing等)。
- index\type等读写操作、集群state、reroute等操作通过master实现,参见TransportMasterNodeAction的子类。
- 数据的查询、写入等操作通过集群所有节点(scatter),存储节点(gather)完成,减轻了master节点的计算。
模型实现
涉及模块
主要包含了es的gateway模块(元数据读写)、cluster模块(集群状态处理)、discovery模块(集群发现服务)三大模块完成集群功能。