00:00
好,同学们,接下来我们进入第三部分高可用集群篇,那对比起前两个部分,我们第三部分呢,基本就不敲什么代码了,第一个部分我们是围绕着一个前后分离来编写了一个后台管理系统,熟悉了一下增删改查和基本的我们业务。而第二部分我们在高级片里边主要开发我们电商系统里边的一些核心业务,围绕这些核心业务要熟悉我们整个分布式的开发,以及我们高并发的一些手段。而第三部分我们更多关注的就是我们服务器的搭建,我们集群的管理,以及我们后来的运维相关的知识。所以在我们第三部分呢,我们是整个是围绕着环境为基础的,那么第三部分呢,所有的环境我们都是以K8S来作为基时,也就是Co notice来参照我们整个微服务的架构图,我们前边呢,在这一块都是我们的代码区,我们无论是高级片还是基础篇。我们这一。
01:00
块呢,都是我们的代码区这一块的环境搭建,我们先没有搭建集群来做了简单的测试,那我们整个代码全部编写完成以后,我们就要部署到服务器环境里边,那服务器环境呢,我们现在不是以云上的环境为作为基础,我们现在就在本地来进行搭建,云上环境呢,需要一定付费,所以我们在本地直接模拟出整个集群环境以后上云,那是一个简单的事情,那么这个本地呢,我们就要牵扯到我们的这个注册中心,配置中心,那是我们这个之前的服务的调用链追踪,我们之前呢也做了,那么现在接下来就是所有的性能监控以及预警,以及我们所有的部署环节,自动化的部署流程,所以接下来我们的高级片,那就关注于下面这一部分,Cooper notice来做一个我们整个的集群,以及我们上面部分来做我们服务器的各种预警监控功能,特别是我们后来还会使用cooper notice搭建的所有集群环境来围绕金。
02:00
我们来做一个自动化的运维,最终我们的代码只要上传到gihab,我们最终呢会使用Jenkins从giub拉取到代码,然后呢,把代码使用Co自动的部署到我们各个的服务器,实现我们整个的高可用集群,我们随便一处代码出现故障,它都能再来启动另外一处,或者呢,我们这个代码直接可以在三五台服务器同时来启动。任何一台服务器崩溃都不会导致我们整个项目崩溃,那所有的文档呢,我们就放给大家,我们在编写了一个文档,就是K8S的部署,以及DS dev OPS,那后来我们再来说这一块的事情。那我们所有在做所有事情之前,我们得先了解一下Co notice,就是我们说的K8S,你们所有的环境呢,都是使用它来作为基时的,那么先来了解一下什么叫cober notice,我们这个K8S就是我们cober notice的简称,它呢是我们用来自动部署扩展和管理容器化应用的开源系统,其实说白了就是简单一句话,Cooper notice帮我们分布式的能部署起我们的整个系统和管理我们的整个系统,所以在部署环节我们cober notice呢是非常有用的,那我们可以来对比一下他们的一些文档,诶这一块呢,有几个文档我们非常建议呢,大家是参照cooper notice的官方文档来点进来,官方文档呢也写的非常详细,包括它有所有的入门程序,还有我们的这个社区文档,那这个社区里边呢,集中了非常多的中文文档,这个中文文档呢,比如我们在这儿,它其实都是源自于我们这个官方文。
03:44
文档的,所以我们也是非常参照大家来使用官方文档,还有我们的这个官方文档的主页呢,就是这,如果大家想要看官方文档,我们现在当前是1.7,而且大家可以在这来切换语言环境,我们现在就来使用中文环境环境,然后我们来点击文档,我们就可以看到公官方文档,而且我们这个官方文档呢,分为各个几个部分,让大家来学习cooper native,我们官方文档呢,非常建议大家从这一块我们学习基础知识开始,然后参照我们官方文档给我们编排的顺序,我们先了解cuer notice能做什么,包括我们cuer notice呢,我们分为六步。
04:20
我们先创建一个coer notice的集群,然后呢,我们使用cuer notice来部署我们想要做的任何应用,然后接下来我们看应用里边我们能干什么,以及我们这个应用如何让外部访问,包括我们是如何使用Co把一个应用复制多份来进行部署,以及我们这个应用最后要更新,就是我们后来说的要做灰度发布等各种怎么办?所有的东西呢,我们都可以参照文档,而且我们来点进去文档也有我们使用好的这个Co ne集群,这有一个交互式教程,如果大家学会了科学上网,那在这一块呢,我们可以完全访问整个的交互式过程,那么在这里边可以使用它自己搭建的服务器来创建出我们自己的东西。
05:04
所以我们现在呢,最主要做的就是要搭建好我们cooperer notice的集群环境,当然搭建之前我们来了解一下什么是cooperer notice,想要知道它,我们先来参照我们这个cooper notice的中文文档,好,我们全部呢都是以这个文档开始来点击这个入门这一块呢帮我们搭建环环境,我们来看概念,首先什么是coer notice,在我们这个概念里边,他介绍我们这个Co notice有什么主控件,还有我们其他各个节点,后来我们说我们在这一块概述来看什么是Google notice,我们先来了解一下我们为什么要用它,那在我们这个传统的部署时代,我们以前呢是这么来做的,比如我们这有一个硬件,我们有一台服务器或者多台服务器,服务器上呢,跑了linu克X系统等等,然后我们想要把我们的应用部署到我们系统里边,我们以前呢,都是在我们这个系统里边搭建我们应用的环境,然后把应用打包,然后我们放到我们系统里的某个文件夹下,我让它运行或者怎么着,但这样呢。
06:04
早期的部署会导致我们资源分配的问题,这是什么呢?也就说比如我们这个服务器上运行了多个应用,就是我们假设呢,这有两个APP,那就可能会出现我们这个应用呢,访问量超大,它占用了大量资源,然后导致我们这个应用呢,可能都没法访问,所以呢,现在我们资源的这个分配边界不是很清楚,也就是说他们之间不具有隔离性,包括如果我们一个应用的故障,内存泄露,导致了我们整个服务器的内存全部占用完,我们服务器宕机们可能导致其他应用全部不可用,所以在我们这个传统部署时代,我们整个资源呢,利用的不充分,不隔离,就会导致我们所有的问题,包括我们部署的复杂性,如果我们想要迁移到另外一个系统,那所有的环境呢,从头到尾我们可能都得搭建一件,当我们可以把整个系统克隆再迁移,但是这样呢,都是很麻烦的操作,所以我们来到了虚拟化时代,那虚拟化时代呢,我们可以在我们。
07:05
单个服务器上,比如我们这儿有一个服务器,我这装好了操作系统,我们现在呢,想要创建应用什么的,我们直接呢,基于操作系统之上,基于它的虚拟化技术,我们直接创建一个虚拟机,这样我们这个虚拟机呢,能做到资源的隔离,那么这个虚拟机。里边假设这个虚拟机里边跑了两个程序,这个跑了两个程序,那这样的话呢,我们这个虚拟机里边的程序,它的资源再来占用我们呢,都有一个界限,我们来做了隔离,也就是说我们这个虚拟机即使崩溃不能使用,我们这个依然可用,如果我们想要再来复制,复制多份,我们搬家的那就是整个虚拟机,我们把将所有虚拟机的配置,我们可以做成一个虚拟机的镜像,我们可以搬家到我们其他物理的操作系统,那这样呢,在我们这个虚拟机时代,我们使用虚拟化技术,我们其实可以非常容易的复制上我们一个虚拟机的镜像,包括呢,我们资源也可能做好的隔离,而且呢,我们整个硬件也能得到充分的利用,但是呢,在我们这个虚拟化时代,看起来非趁,但是呢,我们说这个虚拟机其实带来了非常大的资源浪费,因为每一个虚拟机上都会有一个完整的系统和完整的环境。
08:17
那所以呢,最终我们进阶到容器化时代,我们这个容器化时代呢,最是大家熟悉的那就是docker了,我们会发现,只要呢,我们现在有这么几台服务器,我们这个服务器上呢,全部都装好我们的docker环境以后,然后接下来我们所有想要运行的东西,我们都可以是一个容器,比如说我们全部跑在docker上,是一个一个的容器,运行时的容器,而我们想要把它部署到其他服务里边,我们doer呢,可以允许我们这个容器来打包成一个镜像,包括我们这个容器呢,本身就是从镜像产生的,所以我们只需要有一个镜像,我们通过这个镜像,我们可以运行在任何安装了docker的服务器上,那这样的话呢,我们不是像以前我们这个服务,它想要运行它还得有一个完整的虚拟机,有完整的操作系统,这样就很麻烦,所以有了docker以后,我们的这个服务的打包质量就更高。
09:17
更具有他们的隔离性,而且呢,他们之间只需要占用很少量的资源,我们在云容器的运行式环境里边,所有的东西呢都有了,那么接下来所有的应用想要用运行他们自己呢,启动自己的一个容器,在这个容器里边呢,它以一个最小化的资源占用方式来启动它,比如我们这个应用,它现在呢只需要一个Java环境,那么现在这个容器里边只有一个Java环境,不像是我们以前,我们现在呢,要跑两个应用,这个需要Java环境,这个需要PHP环境,我们只给一台虚拟机上呢,两个环境都得装,所以有了我们这个容器化技术,我们能完全做到我们的资源隔离,而且呢,在我们这个容器化时代,由于他们之间的CPU、内存等等各种都是隔离使用的,而且他们可以打包成一个镜像,我们想要再来启动,然后拿着它的镜像再来启动一个容器就行了,而容器的启动是非踌的,不像我们虚拟机,虚拟机呢,可能我们一个创建到整个启动过程可能。
10:17
要一个小时等各种左右,而我们这个容器呢,就是一个秒级启动,所以在我们这个容器化时代,我们非常容易做到我们的大量的分布式部署,如无论是我们有多少台服务器,把我们这个容器可以无论跑到哪几个服务器上,我们都可以非常容易的进行一个扩展,所以容器呢会给我们带来非常多的好处,比如我们是以应用程序为中心的管理,抽象级别呢会更高。它们之间的资源呢,也是做到了我们整个完整的隔离,以及我们更多的特性,我们松散耦合,分布式弹性解放的微服务这一块呢非常重要,那么应用呢,跟我们系统之间,跟应用之间我们都可以解耦,然后我们可以把它分布式的部署到任何地方,而且可以弹性伸缩。每一台服务器不够了,我们给它部署上三五台,但是呢,现在在我们这个容器时代,那产生的另外一个问题,那就是管理容器,所以接下来就是我们为什么要使用cuber notice了。那么现在来看一下,如果是我们容器时代,我们使用docker,那我们现在呢,假设有三台服务器,那么这个服务器呢,上面都安装了docker这个运行式环境,那这个docker上呢,我们都跑了大量的容器,M docker是这个小金鱼,它拖了非常多的集装箱,每个集装箱呢,就是我们一个容器,它们之间互相隔离。
11:40
那现在呢,我们这个三台五台服务器,这些所有的刀客上管理的所有这些容器,那我们如何来做一个编排,假设我们这个一号服务器,我们跑了一个服务,我们这个购物车服务,我们现在要把它扩充到三号服务器,五号服务器,我们想要给它扩充流量,一大以后呢,我想要扩充流量,小了以后呢,我又想要缩回来。
12:04
我们让他少部署几台服务器,给更多的人腾出资源,包括我们要部署一个新的应用程序,我们应该找一个比较闲的服务器,或者呢,合适部署这个应用程序的服务器,我们来去来部署,所以我们整个的编排工作很麻烦,我们相当于要管理我们这么多容器,管理我们这么多docker的集群,那以前如果我们使用docker docker官方呢,有一个docker swm,它可以来管理我们docker的集群,来帮我们部署docker里面的容器,我们可以使用SWM来指定,比如我们这个容器,我们现在来跑购物车服务的这个容器,它呢要部署三份,那么这个SWM呢,就会。找到我们三台服务器的docker,给每一个里边跑一份容器,如果有一个宕机了,比如我们有四五台服务器,他还会把这个宕机的他能感知到给我们再来部署到另外一台,总是保持我们有三台服务器都在同时运行我们这个容器,所以以前呢,由我们这个docker swamp用这个来做,我们可以通过一个命令行来做到这个。
13:11
但官方呢做的这个SW,它的功能呢比较简单,它呢就是来原生管理我们这个docker的,但是我们说我们在现实我们开发中有非常多的运行式容器环境,不止有docker这一家,所以我们现在呢,非常缺少一个能管理我们所有服务器,能编排我们所有服务器,他们所有的这个运行式环境的。一个工具,那由此我们这个cooper notice就产生了,Cooper notice呢,有非常多的功能,服务的发现和负载均衡,比如cooperer notice,它可以把它的这个容器部署到多台服务器,如果我们这个,比如我们现在有几个服务,A服务我要调用B服务cooperer notice呢,可以把A服务部署到多台服务器,123,然后呢,B服务部署到478,我们想要调用呢,Cooper notice从它的这个级别都可以使用它的DNS,你想要调用B,他知道B它被部署到478了,他随便呢就会找一个去来调用,所以他也有这个服务发现和负载均衡,那针对于我们cloud来说,那super cloud的服务发现和负载均衡其实只是针对于我们这个Java应用的,当然我们cooper notice的服务发现和负载均衡针对任何应用都有效,因为它是把我们所有的应用分布式部署起来,由它来进行管控。他知道,在。
14:36
哪所以呢,它是一个更广泛级别的服务发现和负载均衡,还有它的存储编排,包括cooper呢,也可以让我们整个服务器的集群环境,比如我们现在有多台服务器。我们可以自主的呢,选择我们这个文件的存储系统,可以挂载到哪,你可以存储到本地,这个本地呢,你也可以做一个高可用集群,比如我这儿有一个,这儿还有一个备份,这儿还有一个备份,这儿还有一个备份,包括呢,我们也可以用一些云服务商提供的我们这个服务,而且呢,它还可以帮我们来进行自动部署和回滚,我们想要部署什么应用,它可以基于我们应用的这些状态,把分布式的部署到多台服务器上,而且呢,某一台服务器宕机了,它还会把这个应用自动再放到另外一台服务器上,而且我们这个应用部署好了,我们发现这个版本不对,也可以使用Co ne来进行回滚,回滚它到上一次的部署,包括它的自动打包,自我修复功能,那就是我们说的,如果有一个容器重启失败了,比如我们现在呢,有几台服务器,我们部署的这个应用呢?
15:46
各种原因导致失败了,他们就会把这个替换掉,杀死我们这些不响应的应用,给我们别的服务器部署的一台好的,所以它可以拥有自我修复功能,以及它也有非常完善的安全与密钥管理机制。包括我们来看官方文档,Cooper notice不是什么,其实cooper notice说白了就是来管理我们整个服务器集群的一个东西。那文档这一块呢,举了非常多的例子,比如我们这个cooper notice,它可以支持我们各种应用,我们想要部署什么应用它都能支持,包括呢,Co notice,它不部署源代码。
16:22
就是说他不帮我们来构建应用,比如我们这个Java写的这个程序,他帮我们来编译,干嘛他不做?我们该怎么做呢?是来取决于我们自己来制定的,我们整个交付和部署流程,相当于我们cooper ne里边即使要编译我们这个Java,我们自己呢也要定义好我们相关的东西,比如Java环境和埋工具等等,以及我们这个cooper ne不提供我们这些东西,比如消息中间键啦,我们数据库啦等等等等,因为我们这个cooper ne ne是来管理集群的们想要用数据库了,你使用cooper notice来部署上多个就行了,包括呢,Cooper notice不指定日志的记录,监控报警方案等等等等。
17:00
还是一句话,Co ne只是帮我们来部署和管理集群的,你想要做任何的监控日志,你有相关的日志的这个组件了,比如我们的EK组合,那你就去来部署他们就行了,我们cooperer ne不做具体的活,我们只来做管理和部署工作,以及我们说cooper ne不提供,或者我们说不要求任何配置语言系统等等等等,一句话就是呢,Cooper notice它是呢一个编排系统,那它编排呢,它就得考虑到相当于我们说的分布式的整个集群管理编排,那他肯定呢,就得考虑到我们编排里边的所有其他更多的问题,所以只要是我们集群部署编排的问题,他都有考虑,最终呢,我们可以使用Co来形成一个非常强大的、健壮的、弹性的和可扩展性的一个分布式系统。所以呢,一句话,替代我们以前手工部署的方式,我们直接可以使用Co notice来做我们整个集群化的管理和部署工作。这是我们给大家介绍了一下什么是cooper notice,以及我们为什么要用它,再来举上我们这几个例子,比如们说cooper notice呢,它可以做的第一种事情调度,比如我们现在呢,有这么几台服务器,1234,我们现在呢,十台服务器集群,每台服务器呢都跑着不同的容器都已经在跑了,然后呢,如果我们现在呢,想要让cooper notice来进行部署,我们现在要想要部署这么多的东西,然后cooper呢,就会将所有的部署工作临时呢先保存起来,他呢接下来调度所有的集群来部署我们这些项目,他呢,会把我们将要部署的这个项目,比如我们这个红颜色的,蓝颜色的,黄颜色的,绿颜色的,紫颜色的,这都代表像他呢,去部署到一个合适的地方,他自己呢,比如看我们这台服务器合适部署它Co natives呢,帮部署到这儿,然后呢,我们这。
18:51
啊,蓝色你想要部署多个cooper notice呢,给你随便挑两台服务器给你一部署,包括还按照我们这个要求可以来做到全部的部署工作,这是我们说的调度,比如就像我们刚才把这个红颜色呢,Cooper最终决定。
19:07
把这个红颜色部署到我们这台服务器里边,还有Co notice的自我恢复功能,Co可以自动检查我们集群里边,比如某一个节点不能响应了,节点就是我们说的服务器cos能管理非常多的服务器,他呢发现这个服务器呢不响应了,这个服务器呢,它之前部署了一些应用,这个节点呢已经不响应了,怎么办呢?Co可以自动的把这个应用转移恢复到另外一个服务器上,从另外一个服务器上重新拉起我们这个应用。我们这个应用呢,还能照常工作。这是我们说的自动恢复,包括cooper的水平伸缩功能。举一个例子,我们现在黄色的应用太忙了,超过我们这个业务负载了,比如CPU都80%,内存都80%了,明显忙不过来了,怎么办呢?库那次检查到这个状态,可以直接将我们这个非常忙的应用,我们呢直接复制到多台服务器,比如我们这放一个,这放一个,原来这里边呢两个呢都没有,所以我们可以自动的伸缩。
20:08
包括如果应用闲了,不需要这么多资源了,他可以把它再来剔除掉,保持我们最新的状态,这是我们库,Nets能做到所有工作,一句话,它呢就是一个分布式的整个编排系统,就是管理我们分布式集群的。
我来说两句