Elasticsearch集群
目录
1.每个节点指定协调器的list(elasticsearch.yml)
3.防止集群发生"脑裂",为集群配置最大的有效master个数
1.类bully(RBULLY)算法将master选举出来(master参加)
11.在进群中连接负载均衡器写入一些数据(index01,index02)
一.集群的结构和角色
1.结构
2.角色和任务(elaticsearch.yml)
- node.master: true 主节点相关
- node.data: true 数据节点相关
- node.ingest: true 负载均衡节点相关
默认的一个es节点具备master角色,data节点角色,负载均衡器
- master角色:管理真个集群的meta data(元数据);元数据:描述数据本身的信息形成的内容称之为元数据.多个master形成的集群(保证高可用)同一时间只有一个主节点(具备master角色能力的节点,会进行选举),剩下的主节点进行meta data 的数据备份.
- data角色:就是负责master计算后交给他的与数据有关的任务(读写操作)
- 负载均衡器:外界连接的es节点,负责和master内部通信,获取信息;
- 协调器:任何一个es节点无论你的master,data,ingest的值是true还是false都可以成为一个集群的协调器(发现节点功能)
二.配置搭建三个节点的集群
1.前提条件注意
ik分词器(造成其他节点同步数据时,没有ik分词器的错误)保持一致;
如果你将ik分词器删除,保证之前使用ik分词器的所有相关数据(索引)也要删除.
- [root@10-42-60-249 elasticsearch-5.5.2]# rm -rf data
- [root@10-42-60-249 elasticsearch-5.5.2]# rm -rf *
- [root@10-42-60-249 elasticsearch-5.5.2]# rm -rf logs/
2.配置集群的配置文件
- 保证集群名称一致elasticsearch
- 保证节点名称不一致es01 es02 es03
1.每个节点指定协调器的list(elasticsearch.yml)
每一个的名称都要不同
2.修改对应配置
3.防止集群发生"脑裂",为集群配置最大的有效master个数
公式: 所有master个数/2+1(过半数) 3个配置俩个即可
修改一下配置
由于网络波动,形成多个大脑指挥,
- 在master集群中,本来应该互相有效通信的集群,出现波动后,形成2个多个master集群,同时操作dataNode节点们,可能造成执行的命令冲突导致数据错乱---集群的脑裂;
- ES防止脑裂的出现,就是利用最小master数量过半定义的.
- 结论:在ES防止脑裂的配置过半master后,集群无论如何出现脑裂的情况,至多只有一个有效的master集群满足最小master数量;
3.启动集群的所有节点
1.类bully(RBULLY)算法将master选举出来(master参加)
- 1 启动的master节点到协调器获取集群所有master信息(id)
- 2 如果activeMaster(正在提供主节点的信息list),有值,说明集群已经选举完毕master.如果有就选举完毕
- 3 如果activeMaster中没有数据是空(获取断开剔除),没有值(节点信息),将会把从协调器获取的所有master信息放到后补list candidateMaster.
- 4 判断candidateMaster里面存储的master节点数量是否满足最小master有效数量
- 5 如果不满足,从新回到第一步
- 6 如果满足,从里面将id值最小的master选举成为activeMaster的值
最终集群中activeMaster里的节点,就是被选举出来的主节点.
2.先启动Head插件观察
3.启动第一个ES
4.启动成功,一直循环读取
- 1 启动的master节点到协调器获取集群所有master信息(id) 满足,因为初始设置的为主节点(因为只启动一个,只有一个主节点)
- 2 如果activeMaster(正在提供主节点的信息list),有值,说明集群已经选举完毕master.如果有就选举完毕 不满足(刚启动,没有选举完毕,)
- 3 如果activeMaster中没有数据是空(获取断开剔除),没有值(节点信息),将会把从协调器获取的所有master信息放到后补list candidateMaster. 满足 (有且只要一个)
- 4 判断candidateMaster里面存储的master节点数量是否满足最小master有效数量 不满足(最小maste设置为2,目前只为1)
- 5 如果不满足,从新回到第一步 不满足(重新获取)
- 6 如果满足,从里面将id值最小的master选举成为activeMaster的值 不执行
所以目前,只做一到四的循环读取
5.启动第二个节点
6.启动成功
- 1 启动的master节点到协调器获取集群所有master信息(id) 满足,因为初始设置的为主节点(启动二个,有二个主节点)
- 2 如果activeMaster(正在提供主节点的信息list),有值,说明集群已经选举完毕master.如果有就选举完毕 不满足(刚启动,没有选举完毕,)
- 3 如果activeMaster中没有数据是空(获取断开剔除),没有值(节点信息),将会把从协调器获取的所有master信息放到后补list (防止一次放进多个)candidateMaster. 满足 (有二个)
- 4 判断candidateMaster里面存储的master节点数量是否满足最小master有效数量 满足(最小maste设置为2)
- 5 如果不满足,从新回到第一步 满足
- 6 如果满足,从里面将id值最小的master选举成为activeMaster的值 满足
所以目前,做一到六的读取
7.HEAD插件查看
选出01做主节点
8.启动第三个节点
9.启动成功
因为选举已经结束,所以不会改变结果
10.head查看
11.在进群中连接负载均衡器写入一些数据(index01,index02)
#curl -XPUT http://IP:9200/index06
实现高可用,当01宕机.02,03 选举id最小的顶替,
- 配置文件中的分片和副本默认值
- index.number_of_shards: 5
- 设置索引的副本数,默认为1:
- index.number_of_replicas: 1
index06在创建时,会经过master(activeMaster)根据配置文件计算
分片数量,副本数量,记录metadata 将索引数据切分到datanode
PS:分片无法控制,是选举的master负责分配
ES集群搭建完成