LVS详解-三种模式和负载均衡算法

1.由来

起初是用来进行LAMP的优化,其中包括:

  • web服务器调优;
  • 网站调优;
  • 动静态请求分离;
  • 动态页面静态化;
  • 数据库参数调优:还可以做读写分离;
  • 加缓存(memcached);

1.1web服务器调优

缓存;进程数;添加web服务器;负载均衡

1.11负载均衡

结构:调度器DR、web服务器

  • 调度器(又称负载均衡器)
    负责接收用户请求
    将请求通过调度算法转发给web服务器

    实现方式:
    软件:

1.工作在OSI七层中的第4层

通过端口号(所以是工作在四层的):

定义集群'10.1.1.200:80'
定义rs(real server):
    	10.1.1.211
    	10.1.1.212
我们访问的是调度器的80端口,这是一个集群,请求会转交给后端的rs
这个调度器是不需要跑web服务器的,因为它只需要转发;
所以我们可以通过不同的端口号做诸多服务的负载均衡,例如SSH负载均衡

2.工作在OSI七层中的第7层

  • nginx
  • haproxy

硬件:

  • F5
  • netscaler
  • hillstone #山石网络

1.2linux virtual server

是一个虚拟的服务器集群系统

结构如下:

  • 负载均衡器
  • 存储网(服务器池):如raid技术
  • 共享存储:比如NFS,把各服务器的/data/www用某个共同的存储池来挂载

四层协议的特征

  • 端口号
  • 需要在内核的TCP/IP协议栈进行过滤筛选:因此这个操作是在内核模块中完成的,所以lvs其实是一个内核模块
    两段式结构:
    ipvs:内核空间
    ipvsadm:用户空间

2.LVS模式

术语介绍:

VIP
	Virtul IP,也就是DR的地址(也是公网地址来的)
RIP
	集群节点;真正提供服务的web服务器的地址(有可能是与DR处于同一个网段的私网地址)
DIP
	Director用来和RIP进行通讯的地址
CIP
	client IP

2.1.NAT(IP转换)模式

nat转换的地方是:RS返回数据包给DR的时候的数据包中源地址由RIP变成VIP

图解:

特点:

	1. DR要同时处理入站和出站的请求;调度器容易成为整个架构的瓶颈
	2.所有的RS要和DR在同一个网段
	3.通常情况下RIP是私有地址
	4.RS可以是任何的操作系统,能处理用户请求就ok

2.2.DR(路由)模式

用户的请求经过DR,RS直接返回给客户端(推荐)

图解:

特点:

1.DR只处理进入的请求
	RS的网关不能指向DR而是指向真正的路由器
	
2.集群必须在同一个物理网络中,因为是通过arp基于MAC地址进行转发的

3.需要所有的RS本地都有一个VIP地址(配了两个网卡)
	大部分操作系统都支持
	因为RS返回数据包的时候需要用的VIP才能够封装
	虽然所有RS都有配置了VIP这个地址的网卡,但是可以通过设置内核参数让其暂时不启用
		这里要配置arp_announce,目的是修改返回数据包的源ip地址

4.不支持端口映射

5.这种方式的性能更好

2.3.TUNNEL(隧道)模式

在IP请求包上进行二次封装,加上tunnel的ip段

图解:

特点

	此时DR和RS不需要在同一个物理网段中
	DR和RS的通信是通过包裹在外部的DIR RIP1 来实现的
	RS和CLIENT通信时,RS也是用自己的配置了VIP的网卡来转发

3.LB 负载均衡集群

负载均衡集群需要分发器:Director
根据内部锁和调度规则选择急群众的一个来响应
分发是通过调度算法来决定的

LVS调度算法:

静态:

  • RR Round-robin轮询算法:
	绝对公平:每个人分配到的请求一样多
	若服务器的处理能力不一致的话会造成浪费
	我们应该让性能更好的服务器处理更多请求
  • WRR Weighted round-robin加权轮询:
	每个服务器有权重值
  • DH目的地址哈希:
	同一类的请求会到同一个RS中获得
	哈希表存的是不同类型目的地址到RS的映射
	用来做缓存服务器
  • SH源地址哈希
	同一台CIP会访问到同一个RS
	哈希表存的是DIP到RS的映射
	用来做会话维持

动态:
根据算法和RS的负载状态做决策

  • LC
    Least connection:最少连接

      		找处理请求最少的RS
      		计算每台RS的负载:active*256+inactive=overhead
      			active是处于活动状态的连接数
      			inactive是处于非活动状态的连接数
      		仍然是不公平的
      			服务器性能有差异
    
  • WLC

      		加权最少连接
      			overhead/weight
      		默认的算法
    
  • SED

      	最短期望延迟
      		不考虑非活动状态的连接
    
  • NQ

      	Never Queue
      		永不排队
    
  • LBLC

      	动态DH
    

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-20 19:57
已编辑
某大厂 golang工程师 23.0k*16.0, 2k房补,年终大概率能拿到
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
09-30 19:49
起名星人:蛮离谱的,直接要求转投销售
投递汇川技术等公司10个岗位
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务