首页 > 代码库 > LVS负载均衡模型及算法概述

LVS负载均衡模型及算法概述

集群类型

  •   LB: Load Balancing,负载均衡
  •   HA:High Availability, 高可用
  •   HP:High Performance, 高性能

 

负载均衡

负载均衡设备

Hardware:

       F5,BIG IP

       Citrix,Netscaler

       A10 最便宜

Software:

       四层 性能高,支持的特性少

              LVS 中国

       七层:反向代理,性能略次于四层,支持高级特性

              nginx 俄罗斯

                     http、smtp、pop3、imap

              haproxy

                     主要应用场景http、其他tcp(mysql,smtp)

LVS

       Linux Virtual Server

       组成部分:

              ipvsadm:管理集群服务的命令行工具,工作在用户空间

              ipvs:工作在内核,监控在input

       LVS工作在INPUT链,所以iptables和LVS不能同时使用

       模型前端叫调度器director,后端叫real_server

       CIP:client IP

       VIP:vrtual IP

       DIP:director IP

       RIP:real server IP

 

类型

       LVS-NAT 地址转换

       LVS-DR 直接路由(使用最多)

       LVS-TUN 隧道

 

LVS-NAT遵循法则:

工作模式:

技术分享

  •        集群节点跟director必须在同一个IP网络中;
  •        RIP通常是私有地址,仅用于各集群节点间的通信;
  •        director位于client和real server之间,并负责处理进出的所有通信;
  •        realserver必须将网关指向DIP;
  •        支持端口映射;
  •        realserver可以使用任意OS;
  •        较大规模场景中,director易成为系统瓶颈;

LVS-DR遵循法则:

工作模式:

技术分享

  •        集群节点跟director必须在同一个物理网络中;
  •        RIP可以使用公网地址;
  •        director仅负责处理入站请求,响应报文由realserver直接发往客户端;
  •        realserver不能将网关指向DIP;
  •        不支持端口映射;
  •        支持大多数的OS(要求VIP可以隐藏)

LVS-TUN遵循法则:

工作模式:

技术分享

  •        通过一个IP报文封装另外一个报文
  •        集群节点可以跨越互联网;
  •        RIP必须是可路由地址;
  •        director仅负责处理入站请求,响应报文由realserver直接发往客户端;
  •        realserver不能将网关指向DIP;
  •        只有支持隧道功能的OS才能用于realserver;
  •        不支持端口映射;

LVS10种调度方法:

       固定调度:静态算法,不考虑连接数

              rr:轮调,轮询

              wrr:Weight,加权

              sh:source hash,源地址hash绑定,比如session绑定

              dh:destination hash,目的地址绑定,把同一类请求发往同一个服务器,比如后端有多台缓存服务器,把同一类请求发往已缓存服务器。

       动态调度:动态算法,考虑连接数

              lc:least connection 最少连接

                     active*256+inactive,谁小挑谁

              wlc:加权最少连接,LVS默认算法

                     (active*256+inactive)/weight,谁小挑谁

              sed:最短期望延迟,对wlc的改进

                     (active+1)*256/weight

              nq:never queue,对sed的改进

              LBLC:基于本地的最少连接,主要实现目标和dh一样,实际上并不考虑连接数,最常使用于缓冲服务器当中。

              LBLCR:基于本地的带复制功能的连接

查看内核是否支持IPVS:

cat /boot/config-2.6.32-358.el6.x86_64 | grep -i "vs"
CONFIG_IP_VS=m
CONFIG_IP_VS_IPV6=y
# CONFIG_IP_VS_DEBUG is not set
CONFIG_IP_VS_TAB_BITS=12
# IPVS transport protocol load balancing support
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y
# IPVS scheduler
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m
# IPVS application helper
CONFIG_IP_VS_FTP=m
CONFIG_OPENVSWITCH=m
CONFIG_MTD_BLKDEVS=m
CONFIG_SCSI_MVSAS=m
安装yum install ipvsadm
ipvsadm用法:
	管理集群服务
		添加:-A -t|u|f service-address [-s scheduler]
			-t: TCP协议的集群 
			-u: UDP协议的集群
				service-address:     IP:PORT
			-f: FWM(firewallMark): 防火墙标记 
				service-address: Mark Number
		修改:-E
		删除:-D -t|u|f service-address

		# ipvsadm -A -t 172.16.100.1:80 -s rr

	管理集群服务中的RS
		添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
			-t|u|f service-address:事先定义好的某集群服务
			-r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射;
			[-g|i|m]: LVS类型	
				-g: DR getway
				-i: TUN Internet
				-m: NAT 地址伪装Masquerading
			[-w weight]: 定义服务器权重
		修改:-e
		删除:-d -t|u|f service-address -r server-address

		# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m 
		# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m
	查看
		-L|l
			-n: 数字格式显示主机地址和端口
			--stats:统计数据
			--rate: 速率
			--timeout: 显示tcp、tcpfin和udp的会话超时时长
			-c: 显示当前的ipvs连接状况
			--daemon:显示进程
			--sort:排序,默认升序

	删除所有集群服务
		-C:清空ipvs规则
	保存规则
		-S 
		# ipvsadm -S > /path/to/somefile
	载入此前的规则:
		-R
		# ipvsadm -R < /path/form/somefile

 

LVS负载均衡模型及算法概述