欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 36_01 _Linux集群系列之一——集群基础概念 有大用

image.png



scale on 向上扩展    (换cpu,内存,换io吞吐能力强的磁盘)

4G内存,2cpu 变成 16G内存,8cpu;;;

硬件带来的增长比例与性能的增长比例不是线性的,一定范围内上升,最后反而下降

8颗cpu,有仲裁策略,分配策略,会争资源,架构不好,性能反而下降

硬件扩展4倍,价格远不止4倍

硬件扩展有瓶颈(不可能无限制cpu,无限制内存)

向上扩展只能在一定范围内使用,而且代价高昂,中小型企业难以承受

而且切换cpu,内存,硬盘都要时间

image.png



scale out:向外扩展

        再加个服务器,,再再加个服务器,

image.png


dns服务器解析(解析多个ip地址)的时候.轮流返回不同的地址

负载均衡,dns进行负载均衡( load balancing ),有缺陷,比如北京联通,,有了dns缓存,,所有北京联通的用户都集中访问那个服务器(哪怕在某个时间,有且仅有2000个用户,都只是集中访问那个服务器),,,,,,所以dns负截均衡不特别理想;;所以我们不能依赖 dns 服务器的机制来实现负载均衡


image.png



提供一个前端,只有一个ip地址,前端服务器不提供任何服务,根据一定的调度机制,根据一定的算法,将用户的请求分发到后端服务器

image.png


round robin:轮调,轮询,轮流  这是一种算法

WRR: (w weight 权重; RR 就是 round robin)

image.png

image.png

同一个浏览(多线程),访问同一个网站,可能来自不同的主机,是并发,速度快

假如三台服务器不一样,第一台性能好,(如果平均的话,后面两台就很吃力)

所以调度器,分发器,应该能应付多个不同的场景,要兼顾效率与公平

WRR:可以设定三台服务器权重为 2:1:1,,,,接受请求的数量比为 2:1:1


cluster 

        LB  :  (LB: Load Balancing)负载均衡集群        其中有一台挂了,只要调度器重新调度用户的请求,用户照样可以获得服务(它也有高可用的能力),是依赖于前端的服务器调度的,,,但是它不是高可用集群(HA),因为LB没有向其它人通知自己在线的信息的能力  

                是以提高服务的并发处理能力为根本着眼点的(增加处理能力)


        HA :  (High Avaliablity)高可用集群  它需要向其它人通知自己在线的信息

               是以提升服务的始终在线能力为根本着眼点的(增加服务可用性)


        HP(HPC): (HP: High performance)高性能计算集群     

                是以处理一个海量计算的任务的(又称为科学运算集群)(处理复杂问题解决科学计算)

                       向量机 (这是早期的)(一个主板上弄上千个cpu,但是数据放在一个简单的一千块硬盘组成的raid0上,IO能力依然有限),cpu多了,架构设计不好,性能上会有问题

                       并行处理集群 (也叫并行计算执行) (hadoop就是并行处理集群)

                                分布式文件系统

                                将大任务切割成小任务,分别进行计算的机制


生产环境中 ,LB和HA集群用得最多,,,HP集群现在已经火起来了,



LB下,后端服务器的健康状态检查(health check 健康检查),(前端调度器知道后端的服务器坏了)     前端调度器会每隔1秒钟检查后端服务器是否坏了(一般检查三次),如果坏的话,就不再向这个后端服务器转发用户的请求;;;

前端调度器还要检查,坏的后端服务器是否已经好了,如果好了,就重新加过来,向这个后端服务器转发用户的请求




        在第一个贴子发在第一个服务器,查看的时候在第二台 服务器也能够看到?

        我们独立出来一个mysql服务器放数据,,独立出来nfs文件放上传的附件

        页面文件应该放在各自的本地,它们如何同步

         第一个服务器的网站目录有变化,第二第三台根据第一台的变化,同步数据 (类似于dns共享服务,区域传送 主服务器任何资源改变了,从服务器都能立即同步,因为主服务器会发出通知;;从服务器每隔一段时间去复制,叫刷新时间)

        rsync:是一个文件同步工具,能够实现文件复制,复制方式比较独特,比较两个目录是否有相同的文件,跳过相同的,只复制那些不同的文件,支持远程复制,,我们可以在第二台服务器上 crontab 每小时任务,从主服务器上复制(刷新)一下,,,,,,从服务器刚刷新后,主服务器文件改变了,那么会发出通知,,,,

     文件内容本身发生变化是内核管理的,内核监控文件本身是否发生变化的功能输出给用户空间以后,,,用户空间才有能力知道如何向其它服务器发出通知,内核中有个机制叫 inotify ( information notify? ),所以在主服务器上配置rsync服务器,随时接受别人过来同步,并且配置上它的 inotify,随时监控我们的某个目录里面文件发生变化,立即向其它主机发出通知,,其它主机不管同步周期时间有没有到达,都会立即过来同步


      有些应用很复杂, 比如ftp,工作在被动模式下的ftp, 也就是前端的服务器,对于每一个请求大于1024端口的都要代理到后端上去,很麻烦

                               再比如mysql,用了两台mysql,第一台服务器更新,第二台怎么能看到,要用到共享存储,能把mysql数据放到nfs上,但效率低,更何况,mysql默认不支持两个服务器读取同一个数据文件的,因为没法加锁,通过第一个服务器更新文件,第二个服务器不知道?(这一句不能理解);;;;如果只支持读,不支持写,这些技术是可以用得上的

        



        

image.pngimage.png


image.png


调度器能够将用户的请求分发到后端的主机上,用户量访问过大,拼命的加服务器,总有一个临界点,再加性能上不去了,,,,因为后端nfs是有限的,前端调度器的承受能力也是有限的(请求太多,前端服务器可能成为瓶颈)

怎么办?功能切分,把大功能分成n个小功能,每个小功能做一个集群

每个论坛有多种不同的功能,不同的版块,把不同的版块放到不同的服务器集群上,

来实现横向进行切分,


新浪 点新闻时,是另外一个服务器了

image.png


image.png

我这里ping 了几个新浪的ip地址不同,

但是 马哥 ping 了后是相同的(他解释,新浪网易等,背后依赖于其它技术,如cdn)


image.png

        

调度器本身在工作的时候,仍然会有风险, 所有请求都依赖于这个调度器,万一它坏了,

做一个备用调度器(把ip地址夺回来,启动相关服务)

(主服务器随时向外通知,自己依然在线,每隔1秒(或半秒)向外传递一次自己依然在线,,只要从服务器能够收到主服务器在线的信息,,,若从服务器收不到,再试一次,再收不到在线的信息(一般检查三次),则取而代之)

这也是一种集群(高可用集群)

image.png

image.png


cluster

        LB: 并发处理能力 (一次性能够处理多少请求的)

                    

        HA:高可用性的衡量标准

        一个服务器正常在线的时间/(正常在线的时间+故障处理时间)  就是可用性

假如99%在线,    99.9%,可用性是99%的十倍   99.99% 99.999%





image.png


image.png

先来看看 HA

        这里我们假设nfs存放的是上传的文件

        NFS的并发能力有限,(若多个服务器访问同一个nfs,nfs会成为系统的瓶颈的,速度太慢)(这里没有问题,只有两台主机)  (但是不管怎么讲,在有些特殊场景下,可能用到共享存储设备(共享硬盘?共享raid0),才能为我们的高可用集群提供基本应用能力的,才能让它真正完备起来,提供基本服务)


这里HA ,两台,有一台空闲着,,,,

 假如有web和邮件服务,

是不是需要四台,(两台备用)

如下图,,只需要两台就可以了,不需要四台


一般情况下,一个资源仅能为一个节点(服务器)所占用

一个资源不能在两个服务器上同一时间点启用起来


如果还有个pop3服务的话,再加一台服务器  ;更多的服务,再再加一台服务器,

可以定义倾向性

web: 1: 先倾向1

         2: 先倾向2

         3: 先倾向3


image.png

image.png

image.png


通过一个交换机,向外发送,告诉别人,我还活着,别来抢我的ip

通过广播来发送?不理想,因为任何一台电脑,接上去,会接受到广播,

我们可以多播或组播的方式,只向特定主机(同一个组播域内的主机)来传递

在高可用集群之间所传递的不仅仅有心跳信息(heartbeat:心跳)(是否在线的信息),还有很多其它的集群事务信息(比如倾向性优先级,怎么知道它更倾的主机是否在线;;如果最倾的不在线,怎么知道往第二个或第三个主机上转,万一转错了,谁来负责监督)  这么多集群节点里面要有个主的,必须有一个来协调几个节点之间所完成各种事务的节点,

这个主节点,叫做 DC (推选的事务协调员 Designated Coordinator ) DC:Designated Coordinator,推选事务协调员     万一DC挂了,重新推选( DC 是推选出来的,它负责去处理整个内部事务)(家有千口,主事一人)


image.png

image.png



假设两个节点(两个服务器)

高可用集群提供了  web 服务


raid (scsi)与nfs区别,

raid (scsi)  属于磁盘,本地磁盘设备文件,是块级别 DAS:Direct Attached Storage (直接附加存储),用户访问资源的时候,是内核通过驱动直接访问块级别的数据

nfs  属于另一个nfs服务器(另一台电脑),文件级别 NAS:Network Attached Storage  (网络附加存储)


image.png


image.png



image.png


image.png


image.png



image.png

image.png

image.png

image.png


DAS比NAS性能要好很多,所以要用DAS

image.png


split-brain:脑裂

左右不协调了,第一个节点没挂,第二个节点认为第一个节点挂了,两者都往同一个磁盘上(raid 或 scsi)写数据

第二个节点 告诉电源交换机,切断第一个电源,,STONITH:(shoot the other node in the head)爆头

第二个节点 也可以拨掉第一个节点的硬盘数据线


拒绝其中某一个节点访问某一个资源的,这种机制叫fencing(隔离)

                                                                        节点级别:STONTIH  切电源

                                                                        资源级别: 拨数据线


image.png

image.png


image.png


image.png


为了保证集群的避免分裂,高可用集群节点:至少有三个,(奇数个)

有两个相互联系,另一个联系不到它们两个,那么这一个从集群中退出,

有个仲裁机制,一旦某个节点彼此之间不能通信的时候,哪些是有效的,哪些是无效的

如果两个的话,可能机制比较复杂,马哥这里不讲了


一个负载均衡集群在某种程度上,它必须要对某些资源做高可用,

一个负载均衡集群在某种程度上,它又是高可用集群,完全可以组合起来使用,先知道,后面讲



HP:假如1000个cpu,1000个硬盘组成的raid0,,,每秒读1G(读进内存),500T(500*1024秒才能全部读入内存),有这么大的内存量?  处理完了,还得保存,保存下来,又得好长时间 

IO成为瓶颈

化整为零,500T切割一下(每G切割),500个电脑处理一下再合并(如果是同一个硬盘或同一个raid0,其实IO还是瓶颈)




分布式存储:分布式文件系统

两个分发器(调度器),

一个分发器(调度器),告诉存储的时候,分发着存储到每个节点的硬盘

另一个分发器(调度器),告诉分析的时候,让每个电脑都启动一个进程,在其本地(本地有自己的硬盘)进行处理

处理完成后,最后进行整合起来,整合起来后,向用户返回,报告

避免了大量IO集中在一个位置读取数据

每一个节点,即是存储节点,又是计算节点

image.png




普通分类: