00:00
嗨,同学们好,那么这节课呢,给大家来讲一讲,呃,NG的四层代理,也就是基于TCP协议上直接去做这个负载均衡和返向代理,呃,在这儿呢,呃,我们以一个MYSQ的多主集群的这么一个例子给大家做这个实验。呃,首先啊,我们先看一下这个如何才能完成啊。Nice,这不NG呢,有这么一个模块,就叫stream模块啊,它在这个NG X stream module在这。那么这个拈呢,它默认没有给我们打包编译到呃,最开始的这个NG格字里,那需要我们在刚开始的时候呢,呃,需要把它给编译进去,然后在这个模块的这个官方网站上啊,我们可以看到它是在1.9之后才支持的,也就是1.9以前的这个N是不支持这个stream的这种反向代理的。那这个stream的反向代理,呃,在使用的时候啊,相对来说就比较简单了,除了配置上的稍有差异,其他的和我们正常的之前学的负载均衡的,呃这个逻辑基本上也都一样啊,然后呢,我们在这给大家呃部署起来,看看这个实验的效果是啥样,首先我们先把这个NG给它给呃编译好。
01:13
嗯,找到咱们这台机器,还是在这去编译它,然后confi。更perfect user local跟S,然后再接下来加上这个withream,把它给一块编译进去,这不需要我们额外去下载啊你。咱们这课已经讲这么久了,大家能发现,如果在原来就已经打包在这个NGS发行版里的这个模块的话,你用例子就可以了,我们自己下载这些第三方的这个模块呢,啊要用这个A对吧。Stream。然后make。
02:11
这make make过程这次怎么这么长?然后接下来拷这个文件啊,这么还是先把原来的挪走。NG个词给他挪走。的。然后CP一下。狗鼻。N的死。几个字。靠过去之后重启。估计重启也会不错。因为我们之前的配置里边有好多呃,和这个缓存相关,就是连那个red之前我们对吧,把那个一些配置呢,我们先给它清了。
03:12
嗯。应该就是这些命令,那如果你想看这个报错的详细信息的话,它这也直接提示了应该怎么去做,我们可以用这个status。呃,先去看一下,这个是简单的,然后呢,在这个后边呢,加一个杠L就可以看它完整的这个报错命,报错的这个内容,当然还可以看日志啊,这样比较简单一点,但unknown,呃,Directive,然后这个RED2QUERY,就是我们之前那个配置。已经不能用了,对吧,因为那模块我们没编译进来,能把这些都给删了。嗯,Catch的也删了。那其他的呢,呃。就暂时先不用关了。
04:00
把这个给删了吧。然后我们再重启。哎,现在没有问题了,那没有问题之后,接下来我们配一下这个,呃,对于买S,对于这个MYS去做这个负载均衡啊,它这个主备集群。那这个先跟大家说一下,买soco的这个集群方式呢,有好多种啊,最简单的就是一主一从,然后呢一主多从,还有这个多主。呃,互相这个同步数据这个,呃,就是就是这个MSMSS和MMM,那这个对于买SQ集群这种管理的和配置的这种工具有很多啊,比如说这个官方的它就支持集群。呃,然后另外就是可以通过一些这个其他的这种脚本工具啊,比如说用这个per写这mha啊,还有这MMM这种技术框架,再有就是呢,还有另外的一些开发上的一些中间件,比如mycat啊,可以把mycat认为是一个中间件,直接是一个服务器,他跑起来帮他,他帮我们去做这种透明代理。
05:04
然后再有就是这个,呃,我们用这个像沙丁fair尔啊这种这个更轻量级化的在客户端去运行这种,呃主备这种插件,那我们在这儿呢,用这个呃,NGS去做这个,呃my circle这种负载均衡,它其实嗯怎么说呢,它更纯粹更简单一些吧,它可以对于我们的开发者来说,呃更加透明,它大概的这个架构逻辑啊,给大家简单的说一下。好卡呀。我这台机器已经这个内存已经有点顶不住了。就是这种这个。呃,这这种授课的16G的内存其实有点不太够用,我现在这个现在疫情搞得没法出去,就去去搞这个内存。也是看到这是我们的用户,然后用户以前我们的买SQ的主,这个主备架构呢,他在中间的,比如说用my cat。
06:03
这买cat作为一个透明代理在后边呢去呃,搭建这个MYSQL的集群。DB1。DB2。这myca也可以完成这个负载均衡的操作,但是myca呢,相对来说呃,功能呢,会更完善,更加全面一些啊,就是myca such fair是直接在客户端去跑的,对吧,然后还有这个一些其他PAR写的脚本也都可以,然后这个呃。Myca在中间呢,它不只是可以做这个呃代理工作,他在里边还可以进行这个分库分表等等这一些,那么用这个NG在这替换这个myca这一类的,呃代理工具呢。呃,其实它就是执行效率会更高一些啊,比如说我们买SQ集群,它本身我这配好了这个主这个多主这个同步就就是这个这个SS或者是呃呃不是MM这master到master啊。
07:00
呃,这种多主同步已经做好了,然后直接就通过一个NG。让他来做这个负载均衡就可以了,负载均衡并且还能做到这个,呃,这个这个这个。呃,高可用啊,就是访问一个这个数据库的时候呢,如果要是这个数据库宕机了,它还能帮他分配到另外一个这个数据库上,呃,在这儿买cat呢,因为它的这个功能比较强大,那在这它就显得更加笨重一些,实际上他能完成的工作就是返向代理,这个工作和NG基本上也差不多啊,需要他干的活呢,也就是。做这个主备的这种切换嘛,啊,做这个负载均衡,因为N更干净更纯粹一些,执行起来的这个执行效率也会更高一些,如果我们的客户端,呃,就只想把这个集群作为反应代理,同时再做一下这个负载均衡,呃在再有一点这个高可用这种感觉,那么我们用NS做这个,呃,MYS的代理其实也够用了啊。当然前提是你不需要提供哪开的一些额外的功能,像这个呃,这这种这种跨跨边。
08:04
甚至跨库跨库转这种更复杂,这种集群化的查询啊,那N呢。在这做这个返佣代理,这个原理基本上给大家说清楚了,这是买狗的条件下,如果要是一些其他的这个,呃,这个上游的服务,它没有像买cat这种比较好用的这种中间件的话,那我们我们也可以通过这个NG格去做这种,呃,负载均衡高可用,那比如说我们这是DNS服务器啊,那官网实例里边呢,也给大家举这个例子了啊,可以走udp协议,甚至啊直接是1STREAM,连udp都能发出去。啊,有的这个服务它不它没有这种像买CA的这种呃,特别成熟这种这种中间键,那么我们也可以用N几个直接去代理啊,这就是它基本的原理啊在这儿呢,我们呃再给大家多说一嘴,在这个这个环节下,这个NG格是在我们的应用。
09:00
这个这个应用层就是比如说我们用Java写的一些程序,它本来就要访问这个数据库,所以呢,呃,我们提供负载均衡的时候,在中间加一层代理啊,不管是my cat还是NG,都是由这个应用程序发起的,然后在这个最前边呢。我们这是用户。嗯,这还会有一个NG是做这个应用上的返修代理的。比如我的应用还有好多个在这,还可以再做这个负责均衡,它是这么一个逻辑啊,它并不是说这个N直接让我们的用户去,这个N不会让我们直接让我们用户去访问啊,这对于后端这些这个四层协议的这种,呃应用去做,呃返佣代理的。那我们这个已经装完了,接下来我们带着大家来配置一下,这个的配置呢,和之前的反应代理配置啊啊基本差不太多啊,我们先把这个MY给它起来,我们先看看。嗯。
10:02
诶。这。呃,Na呢,这有两台机间已经装好了,我们把它给起来一个master一个slave啊这里边呢,呃,它做这个这个主备主备集群,然后这个主节点的可写可读,然后从节点的只读是吧。这个不重要啊,但一般来说这两台机器上的数据它肯定是一样的,如果要是不一样的话,那这样做的话就有另外一种说法了,不是说不行,比如说我做灰度发布啊,那么另外一台比如slave上的这个数据呢,是是最新数据,Master上是也不叫master了啊,就是两台MY,一个是最新的数据,一个是呃已经成熟稳定的数据,那么还可以在这个负载均衡的时候呢,给他去做灰度发布,呃,我可以去,我可以去这个让用户随机去选择呃获取到的数据,或者是按照一定的比例去让他去,呃获取到现在的这个,我想让他展示的这个数据啊,也不是说这两台。
11:00
服务器上数据就不一样,我们做负载均衡就不合理啊,这也是有这个有这种情况啊,也可以这么做。然后这个my circle起来了的话,那接下来啊,我们把这配一下,在这儿配这个。呃,四层的这个返向代理的话,和这个我们原来的这个呢很像,但是它已经不是在我们这个server这个块,它已经不是在这个这个这个HTTP这个这个这个这个这个模块下了,它和HTTP是同级的。我们需要在这儿呢,加上一个stream的这么一个模块,注意啊,它是平级的啊,在这加stream。然后在这里边呢,同样也是写这个server。然后在这儿呢,还有这个upstream啊,基本上都一样的,我把这个锥给抠过来。Upstream,我们在这定义一个叫MY的。然后这两台机器的IP,我我看一下。
12:03
Master slave1211个212是吧。都连上了。然后整两台。211,然后这儿的端口3306。然后再来一个212,然后也3306,然后在这个server这块的配置呢,呃,我们可以这个在这儿,呃,跟跟这个之前的基本没基本没啥区别。Listen。看着不像3306。然后接下来这个process啊。到这个直接买,这不需要写这个任何的协议,这样就可以了。调整一下格式。
13:07
OK,然后呢,我们重启一下。诶,他没有报错对吧,那么接下来去访问一下这个MYSQL数据库,你可以啊,呃,用你的这些工具,比如说navy k呀,或者是my SQL fo,然后你去连这个NGS,这个反应代理服务器,然后然后加上端口号,这样直接就能连了,我在这儿呢,直接用这个,呃,这个命令行去连就得了啊就现在这是我们的这个。呃,这这个这个MYSQL服务器,这有一个MYSQL客户端嘛。我买so。然后杠u root,然后杠P,然后杠H,杠H后边就是接这个主机地址192.168。点44.101对吧,然后走,你看能不能连上,诶没问题,那连上了对吧,那如果这两台机器上这个,呃,数据是一致的,那我这会儿就可以做负载均衡,如果不一样呢,我们可以做这个灰度发布嘛,对吧,因为这是受贝塔贝。
14:15
是吧,这是其实它是向这个,呃,我们的这个44.101发的请求啊。嗯,这是这个NG对这个MY的负载均衡的配置,那我们看啊,你如果要是印证一下它就究竟是不是通过它去完成连接,那我们把这这个MYS你看重启,把这NG的所谓的重启一下。然后你在这再设data base连接直接就丢失了嘛,对吧,因为它连的就是这个我们的这个,呃,101这台机器。呃,这是,嗯,恩吉格斯洛斯的四层的这个,呃,四层协议,但是它不只是TCP,呃,这个udp的协议也可以,那主要就是针对于这个。呃,想要做做这种负载均衡透明化,也就是说不需要让客户端知道后台有多少台机器,你像沙丁fair呢,他得知道,呃,整个这个集群里边有多少台机器啊,对吧,然后这个mycat如果要做MYSQ的这个负载均衡的话,它显得又比较重了一些,然后同时这个。
15:14
啊,NG还可以给很多这个后端应用去做这种负载均衡,比如说这个像呃消息件件啊,像一些搜索的一些,呃这个这个这个呃终端啊,这个组件啊等等等等这些都可以,这就是四层的负载均衡啊。
我来说两句