当前位置: 首页 > 科技观察

进入高可用分布式集群的世界

时间:2023-03-19 21:32:29 科技观察

通向集群的大门高可用性(HighAvailability)是分布式系统架构设计中必须考虑的因素之一。提供的服务时间。如果系统每运行100个时间单位,就会有1个时间单位不能提供服务,我们说系统的可用性是99%。负载均衡将流量平均分配到不同的节点上,每个节点可以承担一部分负载,并且可以在节点之间动态分配负载以达到均衡。高性能将流量分配到不同的机器上,充分利用多台机器和多个CPU,将系统性能从串行计算提升到并行计算。es集群的基本核心概念Cluster集群一个Elasticsearch集群由一个或多个节点(Node)组成,每个集群都有一个共同的集群名作为标识。Node节点一个Elasticsearch实例就是一个Node。一台机器可以有多个实例。在正常使用情况下,每个实例应该部署在不同的机器上。节点类型可以通过Elasticsearch的配置文件中的node.master和node.data来设置。node.master:表示该节点是否具备成为主节点的资格。true表示它有资格运行master节点。false表示没有资格竞选主节点。node.data:表示节点是否存储数据。+data)节点有资格成为主节点,并存储数据:falsenode.data:true客户端节点(client)不会成为master节点,也不会存储数据,主要是为了负载均衡存储不同的数据。分片可以分为主分片和副本分片。副本分片是主分片的副本。默认情况下,每个主分片都有一个复制分片。索引的复制分片数可以动态调整。复制分片永远不会与其主分片位于同一节点上。教大家搭建es集群搭建步骤复制elasticsearch-7.2.0安装包3份,分别命名为es-a、es-b、es-c。分别修改elasticsearch.yml文件。分别启动三个节点a、b、c。打开浏览器输入:http://localhost:9200/_cat/health?v,如果返回的node.total为3,说明集群搭建成功,elasticsearch.yml文件配置#clusternamecluster.name:cyz-es#节点名node.name:node-1#是否符合master节点条件node.master:true#是否存储数据node.data:true#集群节点最大数量node.max_local_storage_nodes:3#网关addressnetwork.host:0.0.0.0#Porthttp.port:9200#内部节点之间的通信端口transport.tcp.port:9300#es7.xes7.x后的新配置写入候选主节点的设备地址,即服务启动后可以访问选为主节点discovery.seed_hosts:["localhost:9300","localhost:9400","localhost:9500"]#es7.x新增的配置,这个配置需要选初始化新集群时的mastercluster.initial_master_nodes:["node-1","node-2","node-3"]#数据和存储路径path.data:/usr/local/es/datapath.logs:/usr/local/es/logsnode.name:node-2http.port:9201transport.tcp.port:9400node.name:node-3http.port:9202transport.tcp.port:9500kibana开启配置kibana.yml,添加elasticsearch.hosts:["http://localhost:9200","http://localhost:9201","http://localhost:9202"]启动kibana,可以看到集群信息es集群索引分片管理介绍分片(shard):由于ES是一个分布式的搜索引擎,所以索引通常被分解成不同的部分,分布在不同节点上的数据就是分片。ES自动管理和组织分片,并在必要时重新平衡分片数据,所以用户基本上不用担心分片的细节。副本(replica):ES默认为一个索引创建1个primaryshard,并分别为其创建一个replicashard。也就是说,每个索引都由1个primaryshard作为cost,每个primaryshard都有一个对应的copy。Elasticsearch7.x之后,如果不指定索引分片,默认会创建一个primaryshard和一个secondaryshard,而7.x之前的版本,比如6.x,默认是创建5个索引主分片(未指定分片数量)PUTnba{"mappings":{"properties":{"birthDay":{"type":"date"},"birthDayStr":{"type":"keyword"},"age":{"type":"integer"},"code":{"type":"text"},"country":{"type":"text"},"countryEn":{"type":"text"},"displayAffiliation":{"type":"text"},"displayName":{"type":"text"},"displayNameEn":{"type":"text"},“草稿”:{“type”:“long”},“heightValue”:{“type”:“float”},“jerseyNo”:{“type”:“text”},“playYear”:{“type”:"long"},"playerId":{"type":"keyword"},"position":{"type":"text"},"schoolType":{"type":"text""},"teamCity":{"type":"text"},"teamCityEn":{"type":"text"},"teamConference":{"type":"keyword"},"teamConferenceEn":{"type":"keyword"},"teamName":{"type":"keyword"},"teamNameEn":{"type":"keyword"},"weight":{"type":"text"}}}}创建一个索引(指定分片数量)设置"settings":{"number_of_shards":3,"number_of_replicas":1},create构建索引PUTnba{"settings":{"number_of_shards":3,"number_of_replicas":1},"mappings":{"properties":{"birthDay":{"type":"date"},"birthDayStr":{"type":"keyword"},"age":{"type":"integer"},"code":{"type":"text"},"country":{"type":"text"},"countryEn":{"type":"text"},"displayAffiliation":{"type":"text"},"displayName":{"type":"text"},"displayNameEn":{"type":"text"},"draft":{"type":"long"},"heightValue":{"type":"float"},"jerseyNo":{"type":"text"},"playYear":{"type":"long"},"playerId":{"type":"keyword"},"position":{"type":"text"},"schoolType":{"type":"text"},"teamCity":{"type":"text"},"teamCityEn":{"type":"text"},"teamConference":{"type":"keyword"},"teamConferenceEn":{"type":"keyword"},"teamName":{"type":"keyword"},"teamNameEn":{"type":"keyword"},"weight":{"type":"text"}}}}Indexshardallocation分配shard的节点由ES自动管理。如果一个节点宕机,分片将被重新分配给其他节点。在单机中,节点没有Secondaryshards,因为只有一个节点,不需要生成secondaryshards,而且如果一个节点挂了,secondaryshards也会挂掉,完全是单机故障和没有存在的意义。在集群中,同一个分片的主从分片不会在同一个节点上,因为主从分片在同一个节点上。分机也挂了,别把你所有的鸡蛋都放在同一个篮子里。可以手动移动分片,例如将一个分片从节点1移动到节点2。创建索引时指定的主分片数量以后不能修改,所以主分片的数量取决于项目。如果真的要增加主分片,只能重建索引。二级分片的数量可以在以后修改。手动移动分片POST/_cluster/reroute{"commands":[{"move":{"index":"nba","shard":2,"from_node":"node-1","to_node":"node-3"}}]}修改子分片数量PUT/nba/_settings{"number_of_replicas":2}玩转es集群健康管理,查看集群健康状态http://127.0.0.1:9200/_猫/健康?vURL返回集群健康信息。返回信息status:集群的状态,红色表示集群不可用,有故障。黄色的脊表示集群不可靠但可用,这通常是单个节点的情况。绿色状态为正常,说明集群一切正常。node.total:节点数,这里是3,表示集群有3个节点。node.data:数据节点数,存储数据的节点数,这里是3。shards:表示我们把数据分成多少块存储。pri:primaryshards的个数,primaryshardsactive_shards_percent:活跃分片的百分比,可以理解为加载数据分片的数量。只有所有分片都加载完毕,集群才能正常启动。在启动过程中,如果我们不断刷新这个页面,我们会发现这个百分比会不断增加。查看集群索引号http://127.0.0.1:9200/_cat/indices?vURL返回集群中所有索引信息,我们可以看到所有索引的健康状态和具体信息。返回信息健康:索引健康,绿色表示正常,黄色表示索引不可靠(单节点),红色索引不可用。与集群的健康状态一致。status:状态表示索引是否打开,只有索引可以关闭。index:索引的名称uuid:索引内部分配的名称,索引的唯一表示pri:集群中主分片的数量docs.count:这里统计文档的数量。docs.deleted:这会计算已删除文档的数量。store.size:索引存储的总容量。pri.store.size:master各自容量查看磁盘分配http://192.168.1.128:9200/_cat/allocation?vURL返回各节点磁盘情况。返回信息shards:节点disk的分片数。indices:节点中所有索引在磁盘上的空间。disk.used:节点已经使用的磁盘容量disk.avail:节点可以使用的磁盘容量disk.total:节点的磁盘容量查看集群的节点信息http://127.0.0.1:9200/_cat/nodes?vURL返回集群中每个节点的状态。返回信息ip:ip地址heap.percent:堆内存使用情况ram.percent:运行内存使用情况cpu:cpu使用情况master:是否是master节点查看集群其他信息http://127.0.0.1:9200/_cat参考个人博客:http://www.sddzcyz.cn/