00:01
大家好,欢迎大家继续收看上硅谷的Linux云计算视频,我是刘川老师。那么我们上节课呢,讲了关于数据库的一个基础的一些命令的讲解,那我们不断的提到我们数据库啊,这个对于我们这个方向而言,它的考察重点在集群上,那所以说呢,我们给大家准备了相关的集群方向的一个面试题,那么来看一下对应的题目。MY呢,这个一多从啊,一主多从。然后呢,主库宕机了,如何的合理切换到从库,以及其他的从库又怎么来进行一个处理啊,其他从库又怎么来处理,那这个呢,首先它是一个故障解决类问题啊,故障解决类问题,那其实呢,它也包含了一些纯概念类的问题,比如说我们需要先梳理一下什么叫主从以及。主从和一主多从是什么样的啊?艺术当中什么样的?OK,那我们来看一下我们的总结。
01:03
首先呢,MYSQ的储存工作原理,这个是。必须要梳理一下子,第二个就是从服务器切换为主,服务器的切换方式和切换途径是什么?OK,那我们首先来看一下主存公原理。那这个地方呢?我用一张图来给大家描述。啊,来给大家描述,很简单,左边这个呢,是一个叫my master的服务器,那就是主服务器,而右边两个叫做my slave,那如果啊是一主一从的话,那就是没有另外一台。一主一从,就是一个主的,一个从的。主从之间的工作方式很简单啊,主服务器负责什么呢?接收用户的写入和接收用户的查询,从服务器的作用只是用来备份主服务器上的数据的。这就是主从的关系,那也就是说用户的查询和写入会和my sleep有关系吗?没有关系。注意,主从默认情况下只是为了让从服务器对主服务器做一个备份。
02:06
啊,做一个备份和备用,防止我们主服务器啊,由于出现故障导致数据丢失而造成一个损失,OK,那我们有了备份就安全多了。那现在的问题是我们的这个主从它这个就是这个模式,我们知道了它的实现方式是什么样的,OK,那我们来看一下下边的描述。对应的主从啊,其实实现的技术点是利用了它的一种特殊的日志,我们称之为叫B浪日志,也叫做二进制日志啊,也叫做。二进制日志。那对应的这种二二进日志,它的一个工作方式什么呢?是这样的。首先要想进行主从设置,必须要让主服务器开启b log日志的记录功能啊,让主服务器开启并log日志的记录功能。当主服务器把我们b log日志功能开启之后,那主服务器再进行数据的插入的时候啊,数据的删除的时候,数据的修改的时候,就会将相应的行为记录到我们的什么这个b log日志里边,那当然这个地方我需要说一下啊。
03:16
这个b log日志并不是所有的都记录,为什么如果他所有的都记录,它就不叫特殊的日志记录了,那它只记录对应的对数据库的什么进行了数据修改的操作。进行了数据修改的操作。比如说增删改授权、取消授权,这些都是我们对数据库的一些修改操作,那这些操作才会被记录到我们的b log日志当中。上才会被记录到病床,大家就是说少了一条,少什么少查了对。查询操作是没有必要记录到二进制的,为啥查询操作是不会引起数据变化的,反而记查询是没有意义的,我们的最终目的只是为了把数据保存下来,那你是怎么创建的,怎么增加的,怎么修改的,怎么删除的,我只要记住你这些修改。
04:13
我后续就可以通过你这些指令把数据完完整整的再刻回一遍来。什么意思啊,回到上一个图。主上把槟榔日志开启了,曾。外中。减,我也减。在我。查询,哎,对不起,我也不查询,为什么呢?没有必要。我这个地方并不对外提供查询请求,你说我执行那个查询操作有意义吗?没有任何意义,所以说呢,我们的主服务器啊,那个b log日志当中啊,只记录对应的增删改授权,取消授权这些有修改性的指令。而对应的那些查询指令是不会记录到日志的。
05:00
然后当我们的MYSQL主服务器产生了B格式之后,然后干嘛呢?然后从服务器会主动的向主服务器索要日志文件。注意。这个地方的不同点在于从服务器是向主服务器索要我们的bin log日志文件,就是二进日志文件,那并且呢,这个索要还不是说你要我就给,为什么?主从这个模式,如果随随便便谁都可以当主,谁都可以当从的话,那别人不就可以直接窃取我服务器资源了吗?所以说当我们要设置主从的时候,一般情况下这个从服务器是经过主服务器授权允许的。也就是说。我让你成为我的从。你才有权限从我这取数据,我没有让你成为我的从服务器,我没有授权给你这样的身份,那你就没法从我这取数据,所以说这个过程当中呢,就在完成主从。
06:01
取数据之前呢,还要经历一个主数据库身份和从数据库身份的这样一个声明和这样一个授权啊,这样一个授权,那当主从服务器的这个关系形成之后,主服务器所产生的日志才会允许从服务器来进行一个什么取。那当然主从服务器搭建完成之后,我们的从服务器想从主服务间取数据,就会发起一个什么专门的一个这样的一个进程请求,然后把对应的什么数据库的这种日志文件传输到自己的服务器上。当这个日志被什么下载到从服务器之后,从服务器就会规规矩矩完完整整的把这个日志文件里边所有进行了数据修改的操作都执行一遍。都执行一遍,那你想想。这不就是模仿吗?你干什么,我干什么?那你想想,对于这种模仿操作来说,也就是说主服务器的变化从服务器上会完美的刻画一遍,那也就意味着我们主服务器上的数据。
07:12
最终会在从服务器上重新生成一份一模一样的数据,那这不就是备份吗?那这不就是备份吗?这比直接把主服务器所保存的数据文件,把数据文件传过来,效率要高得多,而且要更方便,占用的资源更少一些,更少一些。那这个时候呢?这个过程当中呢,有两个线程啊,有两个线程,一个呢叫做连接线程,所谓的连接线程就是从服务器连接主服务器,要求下载什么这个日志文件的,还有第二个线程叫做什么呢?叫做解析线程。解析线程的作用是为了。是为了把下载过来的这个这个日志文件进行一个代码解析,进行一个命令解析,然后把解析里的命令再执行一遍,当把所有的指令都执行一遍之后,从服务器里边和主服务器里边的数据就。
08:11
完全一模一样啊,完全一模一样了。OK,那这就是我们主从的一个工作原理,那这个地方呢,我是画了一个主两个从,那这个东西怎么来操作,那其实一样的,你会做一主一从,就会做一主多从,为什么?无非就是一主一从是一个主服务器授权,一个从服务器授权一次,而如果你是一主多从,就是除了给这个从服务器授权之外,再给另外一台也授一个权限就可以了。那比如说为什么会有易主多从这种模式呢?很简单,易主易从就可靠吗?我完全不可能说百分百确认我的主服务器和从服务器会同时损坏这种事比就说那你设置一主多从就一定安全吗?我也不敢保证。但起码。
09:02
一主多从要比一主一从要安全得多。啊,起码出现同时损坏三台或三台以上这种服务器的几率,要远小于两台同时一块要坏的这种几率。所以说你一主一从可能。哎,损坏几率还是有的,一株多重同时损坏三块的几率就小一些了,那我们只要保留其中的某一块,就能保证我们。数据库的数据正常的,安全的一个完整性。好了,这就是我们主从的一个工作原理,那接下来呢,我们再来说一下关于我们的一个,呃。主从的主,如果出现了故障,如何来进行一个故障解决啊,如何来进行一个故障解决?故障解决的方案是这样的,我给大家总结了三条,很简单啊。既然大家都知道了我们主从的原理,也就意味着从服务器上的数据和主服务器上应该是一样的,但是啊,也有一些偏差,比如说万一突然出现了故障,这个时候呢,我们有些数据啊,是可能来得及保存到了我们的这个主库上,但是并没有来得及保存存库上,原因很简单,就是那个二进制的文件可能没有诶。
10:15
这个及时的传过来,但是不要紧,丢也只是丢很少一部分,那绝大多数都是正常的,那首先主的出现了故障,那你就登录到从服务器上查看,从服务器的post信息,所谓的post信息就是。存服务器保存了多少个主服务器的这?修改指令,比如说。我们从服务器和主服务器之间同步到了哪一个步骤啊?同步到了哪一个步骤?我们可以通过观察post,然后呢知道我们从服务器到了哪一个步骤,然后呢,按照最大的post。值作为新的,就是比如说我们有两个存库,看看哪一个存库里的post值更大一些,就让哪一个存库作为主副器。原因很简单,Posts值大代表这个从库从主服务器上同步过来的数据更多更完整。OK,那找到那个POS值最大的那个作为新的主库。
11:17
新的库。怎么将它提升为主服务器呢?很简单啊,第一步先停止掉它的从服务器的身份,就是说本来主服器授权为你为一个从服务器,那现在你已经不是从服务器了,所以说你要stop sleep,停止了自己的从的这个身份。其次。打开my circlel的配置文件my.cnf,这个配置文件开启从服务器的B和日志文件,为什么这个时候既然你不再是这个从服务器,而是主服务器了,你就要开启blog,然后你这边要进行记录数据的增删。改授权。需要授权等等,然后并且重启服务,让二进日志开始记录,然后再登录到数据库执行restart master,就是让我们自己这个从服务器变成。
12:08
主服器。看主服器,然后再查看主服信息,最后呢去创建授权同步用户已对应的权限啊,然后呢,对我们其他的库进行一个授权啊。进行一个授权。啊,进行一个授权那。也就意味着按照图上边这个操作的话,应该就是这样的。挂了是吧,OK,我提升为主服务器,我把我的b log日志功能开启。想以后由我来记录数据的增删改,授权需要授权,然后呢,我还要把我的身份提升为主服务器,那就是stop掉我的身份,并且start我的。服务器的身份。这个时候呢,在使用这个从服务器对其他的服务器进行一个用户身份的授权,然后呢,并且其他这个从服务器要进行什么呀。Change master。
13:01
所有的change就是修改嘛,修改主服器一开始你是认它为主,你从它上面来获取这个我们的这个并日志文件,现在呢,这个主服器挂掉了,那你就应该以任务为主,以我作为标准,从我这个地方获取我们的什么这个2B b log日志文件,然后进行一个数据的这个。保存和备份。这就是我们的一个主从故障切换的一个方式啊,主从故障切换的一个方式那。这个呢,要登录其他的从库执行change master,然后最终来查看一下同这个同步的效果才可以啊。这就是我们这个关于,嗯。MY1多重啊?并且主库宕机之后的一个切换的一个方式啊。大家把这个对应的一个处理的一个方案总结一下,OK。然后呢,我们再来讲一个对应的一个扩展的题目,那。扩展的。
14:01
扩展题目的要求是这样的。单台MYSQL啊,会达到一定的性能瓶颈,那我们如何来去解决单台MYSQ达到信息瓶颈之后的一个这种问题呢?其实啊,这个呢,会上升到一些我们集群的概念当中,但是呢,并不影响我们讲解这个东西啊,OK,那首先来说。这个扩展啊,或者说击碎性能瓶颈啊,我们可以有横向扩展和纵向扩展两种方式啊,两种方式那所谓的纵向扩展呢,其实就是提升单台服务器的性能,比如说我们修这个增加对应的一些配置,然后替换箱的硬件,比如说你这个一开始内存。只有这个32G,我给你增加成64G啊。给你增加128G都行。比如说一开始你的CPU只有一颗,我现在给你上成两颗,哎,都行,这都是增加了这个。硬件本身的性能来通过一次提升单台服务器性能,但是这些东西终归是有限的,比如说服务器的CPU的插槽数量来是有限的,其次内存的插槽数量也是有限的,而且呢,它们之间的性能瓶颈其实并不是看单个谁最大,而是他们看它们。
15:14
所有的配置当中那个最短短的短板,比如说你有一台配置非常牛逼的服务器,但是你这个服务器所接入的带宽只有一兆,那我问你这个服务器能干啥呢?啊,能干啥呢?能处理很庞大的网络流量吗?对不起,处理不了,为什么的,带宽太小了,所以说往往我们看一个服务器或者说一组服务器整体性能的时候,往往要看它的最短短板。暗算短板。那这个时候呢,我们这种纵向扩展就是这种。纵向扩展的方式呢?它的性价比不太合适,原因很简单,纵向扩展就是通过什么,通过增加硬件,修改硬件的配置来增加我们的性能,这个时候你会发现越往上提升,性能提升越难,而且价格越昂贵。所以说纵向提升并不是我们。
16:01
想要的,而横向扩展就是我们想要的了,所有的横向扩展就是你一台服务器。啊,达到了瓶颈,那一台服务器达到了瓶颈,我两台可不可以,我三台可不可以,我要更多台的服务器来完成一个这种性能的提升和任务的一个处理,那这就相当于完成了一个性能平均的一个击碎,所以说这种通过横向扩展方式完成性能提升的也是没有问题的。那OK,我们来看一下。那在生产环境中呢,我们有一个呃,代理工具,也叫做这个中间线工具啊,数据库代理工具,中间线工具这个工具呢,叫做阿米巴啊阿米巴,那阿米巴呢,它呢是一个专门致力于MY的。分布式的前端代理服务器啊,前端代理服务器,那我们先来看它的结构。那这就是它的结构,哎,这是它的结构,诶,有人说这个图好熟悉啊,啊,没错啊,为什么熟悉啊,这个图和之前我每次讲NG的时候的那个图非常相似啊,为什么?
17:07
如果这个地方换成NG,这个地方换成两台阿帕奇,那就不就是阿帕奇,对呃,那不就是NG对两台阿帕奇做反向代理吗?然后呢,用户请求请求到NG上,然后由NG处理完之后再交给阿帕奇来处理。那同样,那这个地方呢,啊,米BA所扮演的身份就类似于N身份,那阿米BA就是一个反向代理服务器的中间键工具,OK。我们呢有my circle和SLAVE2台服务器啊,两台数据库,按照之前我们的想法就是my circle和MY的master和slave呢,这个master工作slave来备份,但是啊,大家想想。做备份那个服务器啊,他光搁那运行着,光备份没有其他操作,说实话没有太大意义。既然你从服务器上所存放的数据和主服务器上完全一模一样的话,那为什么我不把从服务器上的数据利用起来呢?
18:07
啊,为什么不把从服务器数据利用起来呢?那当我把从服务器数据利用起来之后,那我就可以什么利用两台服务器进行压力的分摊了,那进行压力的分摊了,所以说呢,我们的阿米巴这个反向代理中元件就帮我们实现了把MY的master slave以及阿米巴结合在一起,形成这样一个格式,这样形成这样的格式,那我们再来看文字描述。OK,那它的主要的作用是在应用层方面进行对MYSQL访问时,充当一个SQL语句路由的功能。然后呢,会把。所有发送到阿米巴上的这种数据库查询命令。来给它分配到后边的啊,我们的那个MYSQL的主从服务器上,比如说阿米巴来接收SQL语句,但是阿米巴不处理,而是阿米巴把这些语句交给后台的两台MYSQL来处理,所以说它的作用就属于一个代理作用啊,转发作用。
19:09
并且呢,由于呢,它本身具有负载均衡的一个功能啊,本身具有负载均衡的功能,所以负载均衡就是它可以根据对应的一个配置,实现对哪个服务器查询,对哪个服务器不查询,查询的时候两台服务器之间任务分配的方式啊,任务分配的方式。比如说我们再看一下那个图。那阿米巴在进行对任务分配时,我们可以稍微有针对性的去分配,比如说我们这个master啊,既要进行数据写入,又要进行数据读取,那其实它的资源效果相对就要多一些,那我们从服务器呢。根本不需要往里写数据,因为它的数据都是来自于主服务器,它不需要写入数据,它只需要提供对外读取数据的功能就可以了。同样还有另外另外一个原因就是,如果我们把写请求发到了重服务器上,也是没有任何效果的,原因很简单。
20:03
你是一个从服器,我写你身上之后,主服器是不是不会来同步你啊,那这个时候这个数据相当于只有一份,那肯定不行的,所以说我们一般情况下不会把写。操作放入到从服务器上,那这个时候由于它只有独操作,那你会发现它的压力要稍微的小于我们的主服务器,那可以这样,我们的任务分配可以按这样的比例来分,比如说查询操作,它是占一,他占二,什么意思呀?当我们有九个查询操作时。每从主副线查三次,从从浮线查六次。我们可以分配两个服务器的一个什么,这种任务处理的占比啊,任务处理的占比,这就是负载均衡的一些算法啊,负载均衡一些算法。OK,我们再回到我们的文本当中啊,再回到我们的文本当中。除了对应的进行一个反向代理之外呢,它还可以实现一种叫做读写分离的功能啊,读写分离的功能,所有的读写分离呢,就是可以这样。
21:03
如果我们的规模更大了,那我可以是master slave slave。K是一主两从,那阿米巴在进行操作时就可以这样操作。所有的用户的这种对数据库的操作请求到阿米巴之后,阿米巴会对这种操作进行一个分类,比如说是想进行数据插入的,那我就可以把这个请求交给master处理。比如说有这个用户请求进来之后,发现是要对数据库内容进行查询,那这个时候我们的啊密把可以把我们的查询请求只往两个slave上冲零项,而不交给master,也就意味着我们的主服务器只负责数据的插入更新。而从服务器来承担对应的查询压力和操作,那以这样的方式降低了主服务器的查询压力之后,你会发现我们主服务器的这种。负载就会降低下来,它能够承受得了更多的用户的访问和数据的更新。
22:04
所以说我们的啊密保还有将这个什么读和写分离开的这种能力啊,读和写分离开这种能力。OK,所以说呢啊米板呢,是一个非常好用的高性能的负载均衡的,然后呢,读写分离的这么一个服务器,当然也可以是高可用,那提到了高可用呢,其实这个地方就相当于提到了什么呢。啊咪把的备用机,那我们这个模型当中呢,会发现啊咪把是一个脆弱点,为什么当有用户请求进来之后,他会转发,那当他挂了之后,用户还能,用户群还能进来吗?进不来,但我们的数据库是不是正常的呀,所以说有些时候呀,我们会为了安全啊,准备两台R密码。啊,准备两台密码,两台M8呢,这两这另外这台M密码呢,也保存着,对两台这种从服,这个对下下边服务器的一个连接,只不过呢,平常这台服务器啊,一般情况下是不工作的,那只有当这个正常大密码。
23:06
出现故障之后,这台备用密码才会工作,然后所有的用户请求就会请求到。备用的啊,密码服务器上,以此来完成一个这样的故障的切换,完成我们的故障切换,那这种高可用模式下呢,由于可以快速的完成故障切换,可以降低我们网站的一个这种。损失以及不会说影响用户的一个体验度啊,不会影响用户的一个体验度,当然呃,高可用啊,负载均衡啊,这些概念其实已经呃属于我们集群当中的内容了。那我们这个地方呢,就简单提及一下就可以了。OK,那这个呢,其实就是我们啊咪把这个东西的功能,我们可以通过它来。提升我们整个MYSQ集群的性能,OK。那这就是我们整个这个文档所讲的内容,那我们主要是讲了我们的,呃。
24:01
MYSQL的集群,主从主从从以及阿米巴,以及这个读写分离等等。这些操作那。这就是我们本节课要讲的内容,那我们本节课就到这儿,我们下节课再见。
我来说两句