ES集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本。通过将一个单独的索引分为多个分片,我们可以处理不能在一个单一的服务器上面运行的大型索引,简单的说就是索引的大小过大,导致效率问题。不能运行的原因可能是内存也可能是存储。由于每个分片可以有多个副本,通过将副本分配到多个服务器,可以提高查询的负载能力。默认情况下是一个索引5个主分片,每个主分片对应一个副分片。如果是单节点ES,可以用GET _cat/health查看ES集群健康值。显示为yello,因为副分片无法分配,副分片和主分片不能在同一机器上,如果该机器宕机,那么这个副分片就毫无意义。
- GET _cat/health
- 搭建ES集群3台机器
-
节点名称 IP地址 node-1 192.168.184.133 node-2 192.168.184.135 node-3 192.168.184.136 -
参考单机版安装:https://blog.csdn.net/qq_39669058/article/details/86314632
-
修改3台机器的ES机器配置为相同,看看单个独立能不能起来,再修改为ES集群配置
-
如图启动成功
-
3台节点搭建ES集群相关配置
-
vim elasticsearch.yml
-
cluster.name: my-application //该3个ES节点的集群名称必须相同
-
node.name:node-1 //每个节点名称不能相同,另外两台分别为node-1 ,node-2
-
discovery.zen.ping.unicast.hosts: ["192.168.184.133", "192.168.184.135","192.168.184.136"] //将所有节点discovery.zen.ping.unicast.hosts的 []里面的地址修改为所有节点的IP,","除了逗号不要有空格
-
discovery.zen.minimum_master_nodes: 2 //默认是1,3台节点建议修改为2,防止ES脑裂
-
查看集群效果
-
192.168.184.135 node-2是主节点
-
查看集群状态为green
-
把135停掉,下图显示133 node-1是主节点
-
把133听到,如图发送请求到136,显示请求失败
-
单机节点不能处理请求,因为设置了discovery.zen.minimum_master_nodes: 2,这样用复制分片来构建高可用性失效了,因为在每台机器上都存放着一个索引的完整数据,只不过有的是以副本的形式存在
-
重新启动133,135,显示133,135加入集群
-
如果discovery.zen.minimum_master_nodes设置为2了,两节点集群可以有效的避免脑裂,但是高可用就废了,如果3节点集群设置为2可以减少脑裂的可能性,又能提高ES集群的高可用性