Linux集群的相关知识

  • 负载均衡集群

  • 服务器性能的扩展:

    • Scale On:表示性能上面的向上扩展,通常是通过提供更好硬件来满足要求,硬件的性能增长比例不能够带动实际性能的线性增长,并且在一定的范围内是会下降的,并且价格上面的增长是难以接受的;
    • Scale Out:表示实现向外进行扩展,使用服务器的数量来分单服务器的请求,接下来需要是下服务器请求的负担;
      • 1.可以通过DNSA记录解析,来实现负载均衡的目的,这个解析并不是很理想,导致大量主机通过A记录得到的都是一台服务器主机的地址;
      • 2.通过前端设备,来接收请求,并且将请求根据一定的调度算法分发到后端主机上面;
        • 调度算法:
          • Round Robin:轮询调度算法,通常来说一个主机的请求同时存在的不止由一个,如果将这些请求进行分发,那么响应速度就会快的多;但是这种算法忽略了各个服务器性能的差异,有的服务器性能好,有的相对比较差,这个调度算法比较粗燥;
          • Weight Round Robin:表示加权轮叫算法,可以考虑不同服务器的处理性能;
            这里写图片描述
  • 上述集群称为负载均衡集群(Load Balancing);通过服务器的恰当组合来实现处理大规模服务请求的集群,称为负载均衡集群;

  • 负载均衡集群的的数据共享方式:

    • Mysql服务器:使用Mysql集群来完成集群的的数据共享,但是数据库不能够保存图片等附件信息;
    • NFS:NFS服务器将附件文件目录进行共享,处理用户请求的服务器可以通过共享来实现上传;这种方式需要借助于文件的同步机制,常见的文件同步机制:
      • rsync:用于实现文件同步和复制,相同的掠过,不同的进行复制,支持远程复制,可以通过crontab来定义同步时间,还可以通过主动的通知机制来确保数据的实时同步,监控文件改变的机制是通过内核来实现的,内核可以通过Inotify机制来确保将文件发生改变的信息通知给用户空间;所以可以结合rsync+inotify来实现文件级别的数据同步;
  • 集群的思想是将各种不同的功能进行区分,分别使用不同的集群来进行负责,每个不同的集群使用不同的调度器来负责实现负载均衡;

  • 对于负载均衡集群的directory节点,会成为性能瓶颈,所以需要使用高可用集群来保证单个节点的高可用;高可用集群之间的健康信息检测需要通过心跳信息来确保;
    primary <----> standby primary将自己的heartbeat信息随时传递给 standby服务器,只要收到这个信息就认为是正常的;

  • Load Balance 集群分类

  • 硬件级别:

    • F5 BIG IP,以及Citrix NetscalerA10;
  • 软件级别:

    • 四层负载均衡设备:
      • Linux virtual server:可以根据用户的IP地址和端口号来实现将请求发送给分发给不同的后台主机的,章文嵩,工作性能更好,但是支持的不支持某些高级特性;
    • 七层:
      • nginx:代理的协议包括http smtp pop3 imap
      • haproxy :用于代理http tcp(Mysql smtp);
    • 四层和七层协议的区别:
      * 四层不解析高层协议,所以工作性能更好,也正是因为这个原因,不支持对于高层协议的解析;
      * 七层称为反向代理,可以精确的解析某种协议,并且对于这种协议进行某种修改之后,向后进行负载均衡,操纵能力更强,性能可能会降低,可以根据根据实际的项目需求进行配置;
  • Linux Virtual Server:
    * 负载均衡设备,后端设备称为real server,用于实现根据用户定义的IP地址和端口[通常是集群服务],来将不同用户的的不同端口的请求,调度到不同的后端real server,对于非集群服务是不会进行代理的,LVS也是工作在内核上面的,借助于Netfilter的框架,LVS工作在Input链上面,如果用户请求的是集群服务,那么就进行修改并且转发至forward--->postrouting链,送往后端主机;
    * Warning: LVS和IPtabes是不能够同时使用的

  • LVS是由两段组成的:
    这里写图片描述

  • ipvsadm:用于管理集群服务的命令行工具;

  • ipvs:工作在内核上面,并且监听在input链;

  • Linux 2.4.3之前的内核版本需要编译内核,并且需要向内核打补丁,2.4.3以后的版本直接内置的IPVS的代码,

  • schedul method:挑选一个后端服务器接收用户新请求的计算标准,根据调度器,可以配置调度不同的后端集群;
    这里写图片描述

  • LVS对于地址协议栈的命名:LVS工作主机提供的IP称为VIP virtual IP,后端服务器的Server提供的IP称为RIP,LVS工作主机和RIP进行通信时,提供的IP称为DIP,发起请求的服务器端IP称为CIP;

  • LVS的类型:

    • Network Address Translation(LVS-NAT):
      这里写图片描述

这里写图片描述
* 表示地址转换,多个目标主机的DNAT,访问的过程通常是Client IP ---> VIP ---> RIP(DIP);数据返回的过程通常是RIP(DIP) ---> VIP ----> Client IP;
* 需要遵守的基本法则:
* 1.clusterIP地址和DirectorIP地址必须在同一个网路里面,并且网关是Director;
* 2.RIP地址通常都是私有地址,并且仅仅能够用于和DIP以及各个集群节点之间进行通信;
* 3.Director负责处理所有的通信,包括出来的和进来的,集群性能瓶颈所在,最多代理超过10个用户代理;
* 4.集群节点Real Server需要使用DIP作为网关;
* 5.Director可以实现端口映射,主要是借助于DNAT实现的;
* 6.realServer可以使用任何操作系统;
* 7.较大规模的应用场景中,director容易称为操作系统的瓶颈,
* Direct routing(LVS-DR):
这里写图片描述
* 直接路由:Director上面配置VIP/DIP(网卡别名),VIP用于接收用户请求,DIP用户和后端的服务主机进行通信;
* Real Hosts上面配置DIP/VIP(网卡别名),不用于响应服务请求,只用于回送报文作为目的地址使用,在路由器发送ARP报文时,Real Host虽然配置有VIP,但是不能够用来进行本地网路的通信,仅用于Directory进行通信,所以很关键的步骤就是需要实现Real ServerVIP地址的隐藏;
* 在DR模型中,由于在一个局域网里面是通过MAC机制进行通信的,所以路由器首先需要进行ARP广播,获得目的主机的MAC地址,然后进行目的MAC帧封装交给Director,在这一步具有同样VIPReal Server的地址需要进行隐藏,不能够响应ARP报文,Director在根据调度算法进行帧RIP封装交给后端的RIP server;
* 对于Directory在将报文转发给后台的Real Server时,是不会修改目标地址的,也就是不会拆分IP协议报文的,而是通过修改MAC地址来实现和Real ServerRIP进行通信的;
* 对于上面这种模式,Director仅仅负责处理入站请求,对于响应的报文不进行任何处理;DR模型可以处理上百台请求;
* DR模型的要求
* 1.集群节点和directory必须在同一个物理网络网络中;
* 2.RIP可以使用公网地址,这样在Dirctory损坏时,可以使用公网地址进行通信;
* 3.Directory仅仅处理入站请求,响应报文可以直接发送客户端;
* 4.集群节点不可以将网关指向DIP,而是直接使用前端网关
* 5.Direcory不支持端口映射,Real Host直接发送相应报文给请求主机,如果端口不同,Client会丢弃相应报文,并且这一步对于MAC报文进行拆装,并没有对于IP报文进行拆分;
* 6.因为Real Server要求必须隐藏RIP,所以不是所有的操作系统都适合的;
* 7.Direcotry: 可以处理更多的物理请求;
* IP tunneling(LVS-TUN):
这里写图片描述
* 隧道技术,类似于DR,在进行转发时,需要重新封装IP报文;
* CIP+VIP封装的报文送给Directory,然后将Directory通过自己的调度算法,在这个IP报文的基础上面再次封装包含RIP2信息的首部;
* RIP在接受到报文信息后,首先将拆掉第一层报文封装信息,在返回报文时,将VIP作为自己的源IP,目的IPCIP;
* IP tunneling的要求:
* 1.各个集群节点没有必要在同一个网络中;
* 2.Real ServerRIP必须是公网地址;
* 3.Directoy仅仅处理入站请求,相应报文由Real Server直接发送给客户端;
* 4.Real Server网关不能够执行Director;
* 5.只有支持隧道协议的OS,才能够用于Real Server;
* 6.不支持端口映射;
* LVS的调度算法:
* 静态调度算法:
* RR:表示轮询,每个服务器都是同样的权值,对于每个服务器依次进行轮询,不考虑每个服务器的响应差异;
* W RR:表示Weight RR,针对不同服务器的性能,改变权值,可以更好的发挥服务器的性能;
* Source Hash:进行源地址HASH,只要是同一个地址段的请求,都发送给同一个 Real Server; 在第一次接收请求时,首先对于源地址进行Hash计算,然后保存在Directory表中,并且和分配的IP地址的主机相对应;在这个客户端第二次进行请求时,直接转交给对应的Real Server IP地址;

  • 关于cookie的认证信息:
    这里写图片描述

    • 当浏览器发送的认证信息(包括用户浏览的信息等)到某个服务器时,服务器保存的用户浏览商品的信息,就应该通过一个Session信息来进行保存的,Http协议是无状态的协议,Client进行第一次认证之后,服务端将认证信息保存在本地,并且将认证通过得到凭证发送给Client,Client保存一份在本地,之后一段时间的认证信息和服务请求信息都可以通过这个凭证进行认证Client端身份;Client在发送请求时,往往会将所有的本地Cookies都发送给Server一份,这会导致用户的隐私泄漏,之后采用的策略是将用户的session信息和Cokies信息维护在Server的内存中,用户的cookies仅仅保存用户的认证信息;
    • 为了避免其中一个服务器出现故障,导致用户的Session会话信息消失,这里应该使用Session会话共享机制,将这些信息保存在一个共享的服务器上面,或者各个Server之间进行Session的同步; 如果实现了Session共享,那么就可能不需要进行SH算法机制了;
    • Destination hashing:
      • 目标地址HASH,根据目标地址进行挑选,实现的目的是为了将来自同一个目的的请求发送给同一个Server,挑选的算法是不同的;
      • 这个算法和缓存的命令率有关,假设用户请求的是某一个Cache Server,Cache Server里面的内容并不存在那么需要请求原始的服务器,并且在缓存服务器中进行Cache,那么对于同一种请求,应该在一段时间内,仍然转交给其中的一台服务器,只有在其他的Cache Server中同样保存缓存内容时,这个请求的Hash失效;DH并没有考虑每一个Cache的连接数;
    • 上面的这些算法在进行调度时,不需要考虑服务器是空闲的还是繁忙的,仅仅是按照Direcotr的内置策略进行调度的;
    • active:表示用户的请求正在处理用户的数据传输请求;
    • inactive: 只需要维护活动的状态,资源需求少;
      • 动态调度算法:
        • least conection:最少连接调度算法;用于计算后端服务器的活动连接和非活动连接,哪一个连接的数目小,就挑选哪一个,通常计算方法是active*256+inactive;
        • Weight least connection:计算方法是(active*256+inactive)/n,n表示权重;
      • 通常在在服务器都没有连接处理请求进行处理时,尽可能挑选性能比较强的服务器进行使用;WLC不具备这样的功能;
        • Shorst Expecation Delay:最少期望延迟,不考虑非活动连接,计算方法是(active+1)*256/weight,但是会出现会出现性能较差的服务器,好久都不能够出现请求的现象,也就是请求饥饿;
        • Never Queue:表示永不排队;在SED的基础上能够尽快的转发用户的请求,用于将请求尽最大可能转发给没有接受连接的real Server;
        • locality-Based Least Connections:表示基于本地的最少连接,目的和DH一样,常用于缓存服务器当中,再多个缓存服务器都有缓存内容的时候,尽量挑选一个空闲的服务器,但是可能破坏命中率,尽可能保证对于同一个服务器的请求发送给同一个Real Server;这个算法就是动态的DH,用于尽最大可能的讲对于同一个服务器的请求权发送诶同一个Real Server;
        • Locality-Based Least Connections with Replication:表示基于本地的带复制功能的最少连接; 这个算法用于尽最大可能的保证缓存命中率以及负载均衡效果;
          • 对于新的请求尽可能的发送给连接数较小的Real Server,缓存复制机制就是在各个Cache Server上面建立缓存条目,允许各个Cache Server之间按照某种协议处理之间的缓存交换,可以实现缓存对象;
      • 默认方法是WLC,非活动连接,在连接数非常大时,是不能够忽略的;
  • 高可用集群

  • High Avaliablity:前端的调度服务器同时还需要完成后端服务器的健康状况检查(Health Check(正常或者不正常)),否则转发给的请求,就会被丢失,需要连续检查几次,来判断后端服务器是否正常,通过进行健康状况检查,可以将故障节点隔离出去,也可以将正常节点加入集群;

  • 各个节点之间的信息不能够通过广播的方式进行通信,可以使用组播的方式进行传递,相同的节点位于一个广播域里面,如果里面某个节点发生故障,改由谁来进行处理这个仲裁是交给DC()来进行裁决的;

  • 脑裂:左右两个设备可能出现脑裂现象,其中一台主机以为另一台主机故障,执行抢夺策略,另一个主机在网络资源被夺走后,仍然向共享设备上面上面写入数据,可能导致数据文件损坏,这就是脑裂现象;

    • 为了防止这种情况的出现,在单方面认为某个主机故障之后,向电源管理设备发送数据切断改主机的电源防止出现脑裂现象;
    • 或者通过存储设备来隔离node;
  • 隔离级别分为两种:node级别和资源级别,需要设备支持远程管理指令;

  • 高可用集群最少需要奇数个节点,仲裁机制,必须确保集群中的哪一个半是有效的,那一半是无效的,并且处于集群中的node必须知道自己是有效的还是无效的;

  • 两种集群的对比

  • Load balance:是用于提高服务的并发处理能力为着眼点的;

  • High Avaliablity:是用于保证服务的在线能力为着眼点的;

  • 在线时间的:在线时间/(在线时间+故障处理时间) 99% 99.9%十倍可用性的提升, 99.99% 99.999%;

  • 高性能集群

  • 用于实现高性能计算的集群,HP High Performance,表示高性能计算机集群,用于实现将存储和计算能力分散在多个计算资源上面,分布式文件系统完成资源的分布存储,高可用集群完成资源资源的计算,利用分布式文件系统,实现将大任务切割为小任务的处理机制,通常有hadoop集群;

  • 关于底层的存储设备
    这里写图片描述

  • DAS:表示直接存储设备Direct Attached Storge,也就是直接附加存储设备,是在块级别的设备存储访问,其中UltraSCSI的速率为20Mbps,通常SAS的速率可以达到6Gbps;是通过内核直接操纵块级别的设备,如果是同一个主机上面的两个进程同时操纵一个块级别的设备,内核可以通过加锁来防止同时操作同一个块级别的设备,如果是位于两个主机A B上面的进程同时访问DAS设备,A主机将文件放在内存缓冲区中进行操作,B也进行同样的操作,根据内核的调度策略然后同步到磁盘上面,DAS进行文件合并时,就会出现文件系统错乱,因为锁机制不能够跨主机存在;
    这里写图片描述

  • NAS Network Attached storage:表示网络附加存储设备,表示文件级别设备访问存储,NAS自身提供了锁控制机制,可以通过锁机制阻塞其他主机对于同一个文件的请求操作;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值