00:00
前面我们搭建了red classluster集群,接下来来说一下search集群,那我以后呢就把它叫ES,那我们先来说一下S的这个集群原理,这个原理呢,我们在ES专门发布的这门课里边,我们讲的也非常清楚,那我们在搭集群之前把整个呢给大家串一下,首先ES里边我们每一个S实例,就是给服务器里边装上一个ES,我们都可以成为一个ES的节点,这个节点呢,ES的节点也有主节点和其他节点的区分,我们这个主节点能干什么?主节点呢,其实是来负责我们范围内的所有变更,我们的一些增删改,查这些数据,但是他不真正的来操作数据,他只是负责这些变更命令来做这些事情,而我们真正的会有一些数据节点,它是来存我们ES的这些数据的,所以主节点呢,大家就认为是一个控制节点,那既然我们每ES里边。
01:00
整个集群每一个节点都可以成为主节点,都可以设置为主节点,这都没任何问题,而且对我们这个用户来说,我们整个ES集群里边,我们无论想要对ES操作什么,我们可以发给任何一个节点都行,然后呢,我们的整个操作都可以成功,当然这个数据呢,最终被增删改放到哪个节点,这是由整个ES集群来进行调控的,而这一块的整个管理都是透明的,我们用户呢,可以不用去管这些事情,我们随便连上一个ES节点都能把数据给它查找出来,没问题。所以我们整个ES的集群呢,最大的目的也有另外一个就是分片,这个数据呢,我们可以在这个ES里边放,然后呢,别的数据可以放在别的ES里边,所以接下来就来看一下ES集群里边的这个分片,它是怎么做的。首先ES集群里边它的这个健康状况,由我们这几个字段叫green yellow和red,它这个status字段表示了我们集群里边的这些状态。
02:00
古润就代表我们所有的主封片,好,现在有一个概念叫主封片和所有的副本封片全部呢都是正常的,而yellow就是主封片正常的,但是副本封片呢并不是都正常,说明有些副本封片它的这个服务器可能没启动,然后呢,Rate就是我们整个主封片都没有运行,所以现在呢就来说一下我们ES里的封片,封片呢是我们ES里边的一个底层的原理部分,大家就认为我们这个封片就是我们ES,假设呢,现在有一个ES实例,我们要把存的数据呢,都有一个片区,在它实例内部就有一个片区,比如我们现在来给一个索引下保存数据blocks来保存博客数据,但我们说这个blocks,它的这个数据我们number of shots就是它的封片为三,然后呢,封片,每一片的副本为一,那就意思博客里边的这些数据我们分为三个片区存储,假设呢,一到十号,博客在这儿,十到30。
03:00
啊,在这儿,然后呢,30号到80号在这儿,现在呢,相当我们有三个分片,专门来存取我们博客里边的所有数据,但每一个分片呢,我们都让他再来有一个副本,所以在其他服务器上,可能光博客的这个数据它呢就被分散了,然后呢,每一个数据在其他服务器呢,又有副本,但如果在我们单节点的情况下,那单节的情况下,假设呢,我们这个集群说就blog这个,所以现在有三个封片,那就是P0 p1p2,我都给你准备好了,但如果是单节点,我们的这个健康状况不是谷润,而是yellow,因为我们现在呢,所有的主封片确实OK了,但是呢,我们又告诉他每一个呢都得有一个副本,相当于我们这个P0得在别的机器有一个副本,那为什么他自己不把副本建到他本地机器呢?因为没啥用,建到本地机机器了,还是有单点故障问题,我们单点这个ES实例宕机了,我们其他机器又没有保存P0这个片区的数据想要。
04:00
你这个数据呢,如果这个服务器都出现了问题,我们整个数据可能就丢掉了,所以我们默认单节点情况下,我们集群的健康状况肯定是yellow,但如果我们想要保证我们整个集群它是一个健康状况,那就可以,这样我们可以来新增上一个节点,那新增节点呢,默认如果我们是在同一台机器上,我们装了一个ES,我又装了一个,我又装了一个ES,那这样的话呢,只要我们在同一台机器,他们ES。每一个人配置文件里边指定的克拉斯name一模一样,相当于集群的名字一模一样,他们自动就会组成一个集群,那们也不需要做一个过多的配置,那假设我们现在呢已经组成集群,那就应该是这个样子,那么之前呢,有一个节点NODE1,然后呢,我们又起了一个节点NODE2,这一起了以后,我们就能满足NOTE1MASTER节点里边每一个数据都可以有一个副本,所以我们在NOE2里边replication r0相当于复制它的这个数据,R1复制它的,R2复制它的,那这样呢,我们两个节点,我们的集群健康状况就会变为骨人,那表示呢,我们现在六个封片三个主,我们三个副本封片,把这个呢称为副本封片,我们要保存一个副本,但是呢,如果我们要来进行水平扩容也是非常方便的,我们假设呢,又添了一台机器NOTE3,而且呢,我们只要再来添一台机器,以后我们整个ES集群会把我们整个分片呢,再来做一个重新分。
05:32
配,而且呢,这个一分配以后能提升我们负载能力,假设呢,NOE1节点原来呢是P0 p1p23个主封片都在NOE1,然后呢,我们发现多启动了这个机器,我们就可以把某一些主封片我们专门放到这个NOTE3节点里边,那这样我凡是查这个分片里面的数据,最终呢都会跑到这儿来进行查询,而查P1P2分片里面的数据就在这儿,想你们两个服务器分担了我们博客这个下边的所有文章的这个查询,好,那现在呢就进行了这个负载分散,而且呢也能满足我们的这一块,每一个分片都有一个副本,假设P0,他的副本呢,那就在R0,而且注意我们的这个副本,呃,永远呢不跟他自己的这个主封片待在一个服务器,因为待在一个服务器没啥用,所以呢,我们这个P1P2 p1呢,他的这个副本在这儿,然后P2呢,我们可以把副本放在这儿,这样就会出现一个。
06:32
啊,什么现象?只要我们有任何一个机器宕机,我们假设NOTE3宕机了,它还有主封片,我们也不会丢失数据,因为这个R0是主封片的一个副本封片,我们可以最终让他再来成为我们的主封片数据,所以也没任何问题。而且呢,假设我们动态调整了副本的数量,没以前呢,Repl是一,现在我们调整为二,意思每一个主封片都得有两个副本,那有两个副本的话,如果我们是三台机器,那就应该是这样子的,那三个主分片每一个有两个副本,那就有六个副本,那现在合起来就有九个我们的这个分片数据。
07:09
九个分片呢,其中三个是主分片,六个呢是副本分片,那现在呢就变成这样子了,如果我们调大我们的副本数片,那现在呢,我们P0P1,诶我们这个P1P2他们得有两个副本,我们P1的副本是R1 replication1复制了一个,然后呢,第二个副本是这个R1,我们在NOTE2NOTE3节点都有它的副本,然后呢,在我们的这个R2 p2呢,在NOTE2NOTE3节点也都有副本,而P0呢,在NOTE2和NOTE1节点都有副本,因为这个副本呢,不和它自个儿待在一块,好们现在呢,只要是这种情况下,我们无所谓任何节点出现故障都没有任何问题,假设我们NOTE1它呢还是一个master节点,然后呢,它崩溃了怎么办?只要我们关闭一个节点的时候,我们呢,整个ES的这个集群,它呢,就会重新来调整一个我们这个弄的节点,让他来作为主节点,主节点呢,然后把他的这个副本分片,之前的这个副本分片就可以来提升为。
08:09
诶,一个主封片,当然这个主封片呢,也可以来分散到我们这个多个服务器,我们现在NOTE3也可以来提升一个封片主封片,那这样呢,我们就可以来应对故障,即使我们这个NO1节点出现了失败,也没有任何问题,而且呢,我们说在ES中提升主风扇的这个过程是瞬间发生的,就只要弄得一一宕机,然后呢,它的这个其他副本,它立即呢就会提升成一个主封片,但是呢,我们此时集群的健康状况是yellow,而不是古润,不是古润的原因是因为我们要求每一个主封片,现在呢得有两个副本封片,但现在呢,每一个主封片就剩了一个副本了,所以呢,现在是一个yellow,我们的预警情况。但是呢,即使是yellow漏状态下,我们也不会导致我们这个单点问题们,任何一个节点出现问题,我们都可以让它正常工作,除非用呢,我们再来启动一个节点,我们的副本封片,再来复制上几个以后,我们又会变成骨润,这是我们说的这种现象,然后呢,我们现在如果使用ES,我们整个集群呢,又会出现一些问题,因为现在看到ES集群呢,其实还是我们的这个多个实例,然后呢,我们来进行分片存储,只不过它的这个分片就更细化了,而且每一个分片和副本都在其他的机器里边有。
09:29
但如果是以前我们这个S会出现我们称为的一个脑裂问题,脑裂是什么问题,我们可以先来了解一下ES集群里边的一些节点的信息,首先我们ES集群里边可以有一种节点叫主节点,这些主节点呢,就是来维护我们整个集群的这些节点状态信息的,我们每一个这些增删改的这个操作,我们这个主节点呢,都得维护这些信息,然后呢,它还有一种节点叫候选主节点,也就是呢,我们现在呢,有三个ES实力,只要呢,你的这一块配置noe master是true,那说明呢,他们都可以成为主节点,但同一时刻只能有一个主节呢存在,他来操控我们这些集群,但现在呢,假设我们集群里边呢,有十个我们这个节点,那么现在这个十个节点呢,由于我们一些网络问题出现了故障,导致呢,我们这七个节点成为了一个集群,这三个节点又成为了一个集群。
10:28
然后呢,我们就会发现这三个节点呢,它会有一个主节点,然后呢,这七个主节点又会有一个主节点,当网络一恢复以后呢,现在就出现了两个主节点的问题,这就是我们说的这个脑裂现象,那一旦出现了脑裂以后,门因为有了两个主节点,它呢对于主封片等等这些标识呢,都会发生一些分歧,出现问题,所以我们整个集群里边就会出现坏片这些现象,然后呢,在ES里边还有一种节点叫数据节点,我呢就不负责来做整个这些调度工作,我就负责来进行存储数据,我们可以来给它标志为node data是true的,那数据节点呢,它不来竞争来进行选处,但我们可以让一个节点既是master node master既是true,也能让他node data也是true,既是主节点又是数据节点,但既是主节点又是数据节点。
11:22
就有可能导致我们这个节点呢非常累,他呢既然要当主节点调配我们整个集群工作,自己呢还要增删改查,保存一些数据,这样在我们这个大并发亮相,我们这些主节点呢,经常会由于它还要负载这些数据,就会崩溃,出现一些问题,所以我们后来部署的时候,我们可以将主节点和数据节点就分开,主节点就只是来做调度工作的一个主节点,而数据节点呢,它来做存储的这些增删检查。还有我们说的一个叫客户端节点,这个客户端节点呢,相当于既不是主节点,也不是数据节点,只是来做我们这个负载均衡来用的,因为我们现在说ES呢,我们请求任何一些一个节点都能拿到这个数据,所以我们来多上几个,即不是主节点又不存数据的,我们即使来请求它也能在ES集群里边拿到我们的数据,相当于就分担了我们其他数据节点和主节点的这个工作,来做一些压力放单,那如果是这一节点呢,我们可以给他调整node data是false node mask也是for,既不是主也不存数据,这是我们说ES集群里边的这几种节点状态。
12:29
如果出现脑链问题,我们之前说的这个脑链问题,那么现在呢,十个节点,然后网络分区出现故障以后,这七个选了一个主,这四个选了一个主,那就会出现两组的问题,那这个两种问题呢,在我们ES之前的老版本里边,我们是需要解决的,我们可以通过这解决,第一个叫角色分离,就是我们来部署的时候,主节点就专门是主节点,我们给它调整成note master是处的,但note。的data是first的,它不来存数据,这样呢,我们主节点就不会产生我们这个压力过大的现象,然后我们的这个数据节点就来负责进行数据的存储,所以这是我们要做的第一个方案,只要它压力不过大,它们之间交互起来快,悬柱也快,那可能呢,影响呢就能小一点,这是第一个,第二个我们可以让它减少误判,因为默认的情况下呢,主节点三秒没响应其他的这些主节点,我们现在呢,假设12345,那现在有五个主节点,只要有一个这个主节点呢,三秒没响应,其他主节点就认为这个宕机了,又得重新选主,但网络呢,可能比较慢,正好呢,他在3.1秒又响应出来了,这个主角呢还在这儿,然后其他人又选了一个新主,那又会出现我们这个脑裂问题,所以我们可以让它减少误判,来加长一下我们这个主节点的这个ping时间,所以我们现在呢,以前是三秒,我让你检测十秒,只要这个主节点没响应了,那说明。
13:59
都出问题了,这样呢,我们就可以减少一定的误判,另外我们最有效的就是来做一个选举触发,来调整这个m master nos,就是我们最小的master节点数量,这个是什么样的设置呢?我们假设这么一个例子,那现在有十个节点的这个集群,然后呢,这十个节点每一个节点都有成为主节点资格,那现相当于就有十个主节点,他们都能呢,最终选种成为真正的主节点,然后正常情况下呢,这十个节点互相连接没任何问题,然后如果我们来调整它的这个meaning numbers是一个六,六的话呢,因为我们现在是十个,我们来大于一半加一,那我们现在来调一个六,相当于大多数节点,也就是说。
14:45
只有我们这个大多数节点同意,你呢才能成为主节点,那如果出现了一个问题,假设呢,我们出现了脑裂,不是脑裂,我们网络分区把这四个节点分出来了,这六个节点放在一起了,那这样的话,我们这六个节点它呢,判断它是我们这个大于六,好,假设我们这个七个节点吧,六不大于六,我们这七个节点它呢大于六,所以这七个节点是可以选主的,但剩下的这三个节点,由于我们设置的是六,它不大于六,所以你这三个主节点是一个少数人,你呢就别选主了,所以他这一块就不会选主,那最终网络恢复以后,他们还会跟从着大多数人的主节点来进行,所以这是我们说的这个主节点我们来可以改变它的选举出发,那官方给的这个建议值当然是我们整个候选的节点数除二再加一,我们现在是十个十除255加一呢,就是六,我们现在相当于只要呢有六个节点,大多数节点构成了一个集群,我就可。
15:45
A来进行一个选主,我们这三个人他永远呢选不了主,所以我们可以使用这种模式来防止我们这个脑裂问题。但是在我们这个新版ES里边,我们也无需来做这样的设置了。那下一节课我们就可以基于我们之前说的这些原理方式来搭建一个ES的集群,这些ES集群呢,我们最终还是来选中我们使用六个ES的节点,六个ES节点呢,三个master我们相当于三组,三组之间要互相选,然后三个data,他们专门来进行数据存储,这样我们任何一台master挂掉以后,我们可以让其他master继续来顶上。
16:25
那么现在呢,整个最终我们可以来部署成这个样子,如果防问脑力,我们可以这么来部署,假设我们我们以前啊,将我们整个ES实力都是这么来部署的,好,第一台服务器,第二台,第三台,然后呢,我们给它不分离存数据,以及master节点都是这一台服务器,都是这一个ES实例,这样呢,我们的主节点容易我们压力过大,出现问题,所以我们推荐大家呢,一定要做角色分离,我们在这一台服务器上可以单装一个ES,它呢是master,再来单装一个ES,它呢是data,我每一个服务器呢,都可以把master跟data真正的分离开。
17:05
相当于我们装上两个ES,我们放在这儿,然后呢一个存数据,一个master,但如果你能六台服务器,然后呢全部分开,这三台呢就是master,这三台呢就是data,那也更好,不过那我们接下来我们就使用这种方式来搭建我们的ES集群,好,那我们就下一节课继续。
我来说两句