es系列6-elasticsearch集群进阶

author author     2023-03-20     325

关键词:

参考技术A

  当集群中只有一个节点在运行时,意味着会有一个单点故障问题——没有冗余。 幸运的是,我们只需再启动一个节点即可防止数据丢失。当你在同一台机器上启动了第二个节点时,只要它和第一个节点有同样的 cluster.name 配置,它就会自动发现集群并加入到其中。但是在不同机器上启动节点的时候,为了加入到同一集群,你需要配置一个可连接到的单播主机列表。之所以配置为使用单播发现,以防止节点无意中加入集群。只有在同一台机器上
运行的节点才会自动组成集群。

  如果启动了第二个节点,集群将会拥有两个节点 : 所有主分片和副本分片都已被分配 。

  通过 elasticsearch-head 插件查看集群情况

  集群健康值:green( 3 of 6 ):表示所有 6 个分片(包括 3 个主分片和 3 个副本分片)都在正常运行。

:3 个主分片正常。

  怎样为我们的正在增长中的应用程序按需扩容呢?当启动了第三个节点,我们的集群将会拥有三个节点的集群 : 为了分散负载而对分片进行重新分配 。

通过 elasticsearch-head 插件查看集群情况。

集群健康值:green( 3 of 6 ):表示所有 6 个分片(包括 3 个主分片和 3 个副本分片)都在正常运行。

Node 1 和 Node 2 上各有一个分片被迁移到了新的 Node 3 节点,现在每个节点上都拥有 2 个分片, 而不是之前的 3 个。 这表示每个节点的硬件资源(CPU, RAM, I/O)将被更少的分片所共享,每个分片 的性能将会得到提升。

分片是一个功能完整的搜索引擎,它拥有使用一个节点上的所有资源的能力。 我们这个拥有 6 个分 片(3 个主分片和 3 个副本分片)的索引可以最大扩容到 6 个节点,每个节点上存在一个分片,并且每个 分片拥有所在节点的全部资源。

但是如果我们想要扩容超过 6 个节点怎么办呢?
主分片的数目在索引创建时就已经确定了下来。实际上,这个数目定义了这个索引能够存储 的最大数据量。(实际大小取决于你的数据、硬件和使用场景。) 但是,读操作——搜索和返回数据——可以同时被主分片 或 副本分片所处理,所以当你拥有越多的副本分片时,也将拥有越高的吞吐量。

在运行中的集群上是可以动态调整副本分片数目的,我们可以按需伸缩集群。让我们把副本数从默认的 1 增加到 2。

users 索引现在拥有 9 个分片: 3 个主分片和 6 个副本分片。 这意味着我们可以将集群扩容到 9 个节点,每个节点上一个分片。相比原来 3 个节点时,集群搜索性能可以提升 3 倍。

通过 elasticsearch-head 插件查看集群情况:

当然,如果只是在相同节点数目的集群上增加更多的副本分片并不能提高性能,因为每个分片从节点上获得的资源会变少。 你需要增加更多的硬件资源来提升吞吐量。

但是更多的副本分片数提高了数据冗余量:按照上面的节点配置,我们可以在失去 2 个节点的情况下不丢失任何数据。

我们关闭第一个节点,这时集群的状态为:关闭了一个节点后的集群。

我们关闭的节点是一个主节点。而集群必须拥有一个主节点来保证正常工作,所以发生的第一件事情就是选举一个新的主节点: Node 2 。在我们关闭 Node 1 的同时也失去了主分片 1 和 2 ,并且在缺失主分片的时候索引也不能正常工作。 如果此时来检查集群的状况,我们看到的状态将会为 red :不是所有主分片都在正常工作。

幸运的是,在其它节点上存在着这两个主分片的完整副本, 所以新的主节点立即将这些分片在 Node 2 和 Node 3 上对应的副本分片提升为主分片, 此时集群的状态将会为yellow。这个提升主分片的过程是瞬间发生的,如同按下一个开关一般。

为什么我们集群状态是 yellow 而不是 green 呢?
虽然我们拥有所有的三个主分片,但是同时设置了每个主分片需要对应 2 份副本分片,而此时只存在一份副本分片。 所以集群不能为 green 的状态,不过我们不必过于担心:如果我们同样关闭了 Node 2 ,我们的程序 依然 可以保持在不丢任何数据的情况下运行,因为Node 3 为每一个分片都保留着一份副本。

如果想回复原来的样子,要确保Node-1的配置文件有如下配置:

集群可以将缺失的副本分片再次进行分配,那么集群的状态也将恢复成之前的状态。 如果 Node 1 依然拥有着之前的分片,它将尝试去重用它们,同时仅从主分片复制发生了修改的数据文件。和之前的集群相比,只是 Master 节点切换了。

当索引一个文档的时候,文档会被存储到一个主分片中。 Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?当我们创建文档时,它如何决定这个文档应当被存储在分片 1 还是分片 2 中呢?首先这肯定不会是随机的,否则将来要获取文档的时候我们就不知道从何处寻找了。实际上,这个过程是根据下面这个公式决定的:

routing 是一个可变值,默认是文档的 _id ,也可以设置成一个自定义的值。 routing 通过hash 函数生成一个数字,然后这个数字再除以 number_of_primary_shards (主分片的数量)后得到余数 。这个分布在 0 到 number_of_primary_shards-1 之间的余数,就是我们所寻求的文档所在分片的位置。

这就解释了为什么我们要在创建索引的时候就确定好主分片的数量并且永远不会改变这个数量:因为如果数量变化了,那么所有之前路由的值都会无效,文档也再也找不到了。

所有的文档API ( get . index . delete 、 bulk , update以及 mget )都接受一个叫做routing 的路由参数,通过这个参数我们可以自定义文档到分片的映射。一个自定义的路由参数可以用来确保所有相关的文档—一例如所有属于同一个用户的文档——都被存储到同一个分片中。

我们可以发送请求到集群中的任一节点。每个节点都有能力处理任意请求。每个节点都知道集群中任一文档位置,所以可以直接将请求转发到需要的节点上。在下面的例子中,如果将所有的请求发送到Node 1001,我们将其称为协调节点coordinating node。

当发送请求的时候, 为了扩展负载,更好的做法是轮询集群中所有的节点。

java进阶之光!手动搭建高可用的redis5-0分片集群

ES集群架构演进之路1、初始阶段订单中心ES初始阶段如一张白纸,架设方案基本没有,很多配置都是保持集群默认配置。整个集群部署在集团的弹性云上,ES集群的节点以及机器部署都比较混乱。同时按照集群维度来... 查看详情

6、elasticsearch添加密码验证机制(规避了诸多小坑的操作步骤)

参考技术AElasticSearch版本7.6.21、验证当前版本是否支持安全功能2、是否打开安全设置3、基于FIPS的一些验证4、配置节点间通讯传输的安全性5、配置内置用户的密码/6、选择用户验证用户身份的领域类型7、设置角色和用户以控制... 查看详情

es系列:es集群搭建问题:memorylockingrequestedforelasticsearchprocessbutmemoryisnotlocked

现象日志memorylockingrequestedforelasticsearchprocessbutmemoryisnotlocked方案1/etc/elasticsearch/elasticsearch.yml关闭bootstrap.memory_lock:,会影响性能bootstrap.memory_lock:false方案2/etc/elasticsearch/elasticsearch.ymlbootstrap.memory_lock:true/etc/security/limits.conf,... 查看详情

es系列

一、CenOS7安装ES6.3.1二、CenOS7安装EShead6.3.1三、配置ES集群 查看详情

laravel 6 + elasticsearch-php 7.6 + xampp:在您的集群中找不到活动节点

】laravel6+elasticsearch-php7.6+xampp:在您的集群中找不到活动节点【英文标题】:laravel6+elasticsearch-php7.6+xampp:Noalivenodesfoundinyourcluster【发布时间】:2020-06-1411:21:15【问题描述】:我在带有XAMPP的laravel应用中使用elasticsearch-php。版本:PH... 查看详情

大数据之es系列——第一篇elasticsearch2.2集群安装部署

...nbsp;192.168.160.182hc13.spads 192.168.160.183 准备软件包:elasticsearch-2.2.0.tar.gz注:将以上软件包上传至各主机节点/opt/softwareRes/目录下。第二部分安装配置e 查看详情

es实战系列-elasticsearch安装(代码片段)

文章目录Elasticsearch安装下载7.8.1版本集群部署安装报错创建用户ES安装集群安装管理注意事项es不能使用root用户运行错误:索引文件个数限制bind错误发送信息给master失败插件安装ES-HEADES-SQLcerebro安装kibana安装7.8.1安装中文分词... 查看详情

02es集群搭建(代码片段)

前言呵呵最近有一系列环境搭建的相关需求记录一下es三个节点:192.168.110.150,192.168.110.151,192.168.110.152150为master,151为slave01,152为slave02三台机器都做了trustedshell  es单节点docker搭建创建docker-compose.yml如下,然后docker-composeup-d启动es即可... 查看详情

02es集群搭建(代码片段)

前言呵呵最近有一系列环境搭建的相关需求记录一下es三个节点:192.168.110.150,192.168.110.151,192.168.110.152150为master,151为slave01,152为slave02三台机器都做了trustedshell  es单节点docker搭建创建docker-compose.yml如下,然后docker-composeup-d启动es即可... 查看详情

elkdocker6.elasticsearch集群启动多节点+解决es节点集群状态为yellow

...动的是单个的ES节点。 系列文章:【ELK】【docker】【elasticsearch】1.使用Docker和Elasticsearch+kibana5.6.9搭建全文本搜索引擎应用集群,安装ik分词器【ELK】【docker】【elasticsearch】2.使用elasticSearch+kibana+logstash+ik分词器+pinyin分词器+繁... 查看详情

elasticsearch顶尖高手系列-高手进阶篇视频教程

...ava精品高级架构课,缓存架构,深入Jvm虚拟机,全文检索Elasticsearch,Dubbo分布式Restful服务,并发原理编程,SpringBoot,SpringCloud,RocketMQ中间件,Mysql分布式集群,服务架构,运维架构视频教程 14套精品课程介绍:1、14套精品... 查看详情

es入门与进阶

ES类比MySqlMySqlESdatabase(数据库)index(索引库)table(表)type(类型)7.x被废弃row(行)document(文档)column(列)field(字段)一、ES介绍二、ES安装1.1、ES的安装三、ES基本操作1.2、ES语法1.3、ES核心概念四、使用java操作ES五、ES的各种查询【代码】5.0... 查看详情

kubernetes进阶之路(十)service系列之loadbalance

参考技术A通常需要第三方云提供商支持,有约束性IngressexposesHTTPandHTTPSroutesfromoutsidetheclustertoserviceswithinthecluster.TrafficroutingiscontrolledbyrulesdefinedontheIngressresource.可以发现,Ingress就是帮助我们访问集群内的服务的。为了彰显其优势... 查看详情

[前端学习]es6进阶学习

async/awaitEventLoop(同步和异步)API接口案例总结 查看详情

[前端学习]es6进阶学习

async/awaitEventLoop(同步和异步)API接口案例总结 查看详情

kubernetes进阶之路(九)service系列之clusterip&nodeport

参考技术A在定义Service的时候可以指定一个自己需要的类型的Service,如果不指定的话默认是ClusterIP类型。可以使用的服务类型如下:通过集群的内部IP暴露服务,选择该值,服务只能够在集群内部可以访问,这也是默认的Service类... 查看详情

elasticsearch系列术语

elasticsearch(以下简称es)是一款开源的搜索引擎,基于apachlucene。最近在做nlp的时候顺便研究一下。下面是官方列举的术语解释NearRealtime接近实时的查询,通常情况下,延迟在1s以内 Cluster一个集群由1个或者多个节点组成,这... 查看详情

第二篇:二进制部署k8s集群进阶使用

二进制部署K8s集群进阶使用之第1节关于K8s证书二进制部署K8s集群进阶使用之第2节kubectl-陈述式资源管理二进制部署K8s集群进阶使用之第3节kubectl-声明式资源管理二进制部署K8s集群进阶使用之第4节pod控制器 查看详情