上面一片文章我们叙述了,如何搭建一个es集群,也仅仅是搭建了一个集群。
centos搭建es集群 诸如如何选择master节点个数,如何防止负载,如何防止脑裂这些问题,都没有考虑在内,
这篇文章旨在完善上面的群集,限于服务器数量的约束,多数内容不再做示例了。选择摘抄文档来解释。

节点(Node),node是es集群最基本的元素,每次启动集群里面的一个es服务,都是启动一个节点,这些节点又对应着不同的角色.

es7.9版本中对应有以下主要角色
master    #该节点具有mster权限,能够参与选举成为控制集群的主节点
data      #该节点具有数据的操作权限,能够进行数据的curd操作
ingest     #这个节点一般用来处理复杂业务,对data节点返回的数据结果记性复杂加工
remote_cluster_client   #该节点可用作远程连接的客户端,默认任何节点都有这样的属性
transform   # 这个节点用于转换处理API请求
ml      #  机器学习节点,如果要使用机器学习功能必须要有一个这个节点,
voting_only     #仅投票资格节点,这个节点只能参与选举投票,但是不会成为主节点

在官方文档中给出import警告,transform,ml和voting_only 只能在elasticsearch的发行版中使用,不可在OSS发行版中使用,否则会无法启动,
如果不设置角色,都是默认开启的角色,可以在配置文件中配置各个节点的角色

node.roles: [master,data]

没有修改角色的节点默认角色,

es 集群红色_发行版

现在我们修改下角色看看

node.roles: [master,data]

es 集群红色_发行版_02

重新启动后,查看角色,只有设置的两个角色了
如果es节点又shard数据,但是该节点在配置角色的时候,没有data角色,那么就会报错
java.lang.IllegalStateException: node does not have the data role but has shard data:
这个时候需要可以使用命令去清楚shard数据

./elasticsearch-node repurpose

es集群节点数量配置
es官方推荐,为了保证集群的稳定运行,master最少需要3个节点,并且是基数,为了防止脑裂,在配置文件选项:discovery.zen.minimum_master_nodes:的值需要设置为
具有master选举权限的一半+1个,为了保证稳定性,
如果master节点是3个,此处的值将是(3/2)+1 = 2

iscovery.zen.minimum_master_nodes: 2

也可以通过url设置这个值

curl -X PUT “localhost:9200/_cluster/settings?pretty” -H ‘Content-Type: application/json’ -d’
 {
 “transient”: {
 “discovery.zen.minimum_master_nodes”: 2
 }
 }

分片(shard)
分片是es存储数据的最小单元块,es会把所有的数据整理成索引index,每个索引又由多个分片组成,每个分片都是Lucene实例。
创建索引的时候,默认每个索引会有个5个分片以及一个副本。索引创建完成后,分片数量就不允许修改了。这就要求我们在创建index的时候判断这个index有多大,
这很大程度上和数据库的表分区一样。因为分片不是免费的,不消耗资源的,每个索引和分片都会消耗系统资源,选择正确的分片数量,可以极大的优化查询效率。
es官方建议:分片过小会导致段过小,进而致使开销增加。您要尽量将分片的平均大小控制在至少几 GB 到几十 GB 之间。对时序型数据用例而言,分片大小通常介于 20GB 至 40GB 之间。
es集群新增节点,shard会重新分配,保持平衡。。

Node-3没有data角色前

es 集群红色_发行版_03

Node-3有data角色后

es 集群红色_配置文件_04

Elasticsearch 禁止同一个分片的主分片和副本分片在同一个节点上