ES集群
1 集群的概念
ES 集群中主分片和副本分片是不能放到同一个服务器中的。这样可以保证主分片挂掉之后,数据依然可用。
2 搭建ES集群
搭建集群之前,如果之前有启动过,需要将节点数据删除。ES根目录下data文件夹下的node目录。
修改各个节点的配置文件
# 修改各个服务的名称, 每个服务的名称需要相同
cluster.name: es-cluster-name
# 修改节点名称,每个节点需要使用不同的名称
node.name: es-node1
# master代表它是一个主节点
node.master: true
# data代表它是一个数据节点
node.data: true
# 发现节点的host,配置上所有 节点的IP
discovery.seed_hosts: ["host1", "host2"]
# 配置初始化时的master节点
cluster.initial_master_nodes: ["es-node1"]
master设置为true的这些节点,如果当前主节点挂掉,其他的主节点就会被选举成master节点。 主节点的作用是负责管理整个集群,负责创建和删除索引,也可以去管理非master的节点。 数据节点主要是用于文档数据的处理,例如数据的增删改查等都是基于数据节点去处理。 每个节点的配置除了节点名称不一样,其他的都是相同的。
启动 每个几点分别启动,启动命令 进入到/usr/lcoal/elasticsearch/bin目录下
切换为esuser用户
su esuser
启动ES
./elasticsearch -d
使用时,我们连接任意节点的地址,效果都是一样的。
3 集群脑裂
当发生网络中断或者网络抖动、服务器宕机等等情况,服务器集群可能会被划分为两个部分,各自有自己的master节点来进行管理,这种情况就是集群脑裂。
当服务器1宕机后,服务器2可能会被选举为master节点,这时服务器1恢复了,并且也是master节点,这时就会出现集群割裂问题,原因是,选举master节点有一个最小投票人数的选举,服务器1本身就是一台服务器。
脑裂问题解决 需要修改最小投票人数,默认值是1,新版本的ES在ES内部已经解决了脑裂的问题,老版本需要注意一下以下配置。
# 这里的n是指master被设置成true的节点数量
discovery.zen.minimum_master_nodes = (n/2)+1
4 集群文档读写原理
1.首先会在服务器集群中选择一个协调节点,这个节点用于负责用户的请求和响应,当我们要做一个写操作,协调节点会做一个路由,根据hash算法去判断将数据写入到那个主分片内。
2.假设路由到了P1主分片,他会转发到P1主分片,数据写入到主分片内后,主分片会将数据同步到R1副本分片。
3.当数据同步完成之后,会将请求返回到协调节点,并相应给客户端。
5 文档读原理
1.当请求过来,请求到了第一个服务器上,这个节点将充当协调节点,协调节点根据请求参数,来计算文档存储在那个分片上,由于主分片和副本分片的数据是相同的,所以,当有下一个请求过来时,可能会请求到副本分片上,主分片和副本分片分配轮询读操作。