负载均衡
来源:互联网 发布:生化危机人工智能 编辑:程序博客网 时间:2024/06/06 04:16
常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡设备F5、Netscale。
lvs基本介绍
负载均衡的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director Server上,然后它把用户的请求根据设置好的调度算法,智能均衡地分发到后端真正服务器上。为了避免不同机器上用户请求得到的数据不一样,需要用到共享存储,这样保证所有用户请求的数据是一样的。
LVS是Linux Virtual Server的简称,这是开源软件项目,http://www.linuxvirtualserver.org,现在lvs已经是Linux内核标准的一部分。lvs架构从逻辑上可分为调度层、Server集群层和共享存储。
lvs的组成
LVS由2部分程序组成,包括ipvs和ipvsadm
- ipvs(ip virtual server):一段工作在内核的代码,是真正实现调度的代码。
- ipvsadm:一段工作在用户空间的代码,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器。
lvs相关术语
- DS:Director Server.指的是前端负载均衡器节点。
- RS:Real Server。后端真正的服务器。
- VIP:用户请求的目标IP地址。
- DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
- RIP:Real Server IP,后端服务器的IP地址。
- CIP:Client IP,访问客户端的IP地址。
lvs/nat原理和特点
- 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。此时报文的源IP为CIP,目标IP为VIP。
- PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。
- IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链,此时报文的源IP为CIP,目标IP为RIP。
- POSTROUTING链通过选路,将数据包发送给Real Server。
- Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。此时报文的源IP为RIP,目标IP为CIP。
- Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。此时报文的源IP为VIP,目标IP为CIP。
lvs-nat模型特性:
(1)RS应该使用私有地址,RS的网关必须指向DIP。
(2)DIP和RIP必须在同一个网段内。
(3)请求和响应报文都需要经过Director Server,高负载场景中,Director Server易成为性能瓶颈。
(4)支持端口映射。
(5)缺陷:对Director Server压力会比较大,请求和响应都需经过director server。
lvs/dr原理和特点
- 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链,此时报文的源IP为CIP,目标IP为VIP。
- PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。
- IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源mac地址修改为DIP的mac地址,将目标mac 地址修改Rip的mac地址,然后将数据包发至POSTROUTING链,此地源IP和目标IP均未修改,仅修改了源mac地址为dip的mac地址,目标mac地址为rip的mac地址。
- 由于ds和rs在同一个网络中,所以是通过两层来传输。POSTROUTING链检查目标mac地址为rip的mac地址,那么此时数据包将发至Real Server。
- RS发现请求报文的mac地址是自己的mac地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。此时源IP为VIP,目标IP为CIP。
- 响应报文最终送达至客户端。
lvs-dr模型的特性:
- 特点1:保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS。
- RS可以使用私有地址,也可以是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问。
- RS跟Director Server必须在同一个物理网络中。
- 所有的请求报文经由Director Server,但响应报文必须不能经过Director Server。
- 不支持地址转换,也不支持端口映射。
- RS可以是大多数常见的操作系统 。
- RS的网关绝不允许指向DIP(因为我们不允许他经过director)
- RS上的lo接口配置VIP的IP地址。
- 缺陷:RS和DS必须在同一机房中。
特点1的解决方案:
在前端路由器做静态地址路由绑定,将对VIP的地址仅路由到Director Server。如果用户没有设置 路由的权限,可以在arp层次做,修改RS上的内核参数(arp_ignore和arp_announce),将RS上的VIP配置在lo接口别名上,并限制其不能响应对VIP地址解析请求。
另外还有lvs-tun模型 ,其实企业中最常用的是DR实现方式,而nat配置上比较简单和方便。
lvs的八种调度算法
- rr
轮询算法假设所有的服务器处理能力都是一样的,调度器会将所有的请求平均分配给每一个真实服务器。
- wrr
可以设置权重,权重越高,那么分发的请求数越多。
- lc
这个算法会根据后端RS的连接数据来决定把请求分发给谁。比如RS1连接数比RS2连接数少,那么请求就优先发给RS1.
- wlc
加权最少链接数
- lblc
该算法先根据请求的目标IP地址寻找最近的目标IP地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器。
- lblcr
记录的不是目标IP与一台服务器之间的连接记录,它会维护一个目标IP到一组服务器之间的映射关系,防止单点服务器负载过高。
- dh目标地址散列调度算法
- sh源地址散列调度算法
lvs的nat模式实践
- 实践环境
三台服务器,一台作为director,两台作为real server,director有一个外网网卡(172.16.254.200)和一个内网ip(192.168.0.8),两个real server上只有内网ip(192.168.0.18)和(192.168.0.28),并且需要把两个real server的内网网关配置为director的内网ip(192.168.0.8)。
- 安装和配置
两个 real server 上都安装 nginx 服务# yum install -y nginxDirector 上安装 ipvsadm# yum install -y ipvsadm
Director上编辑nat实现脚本
# vim /usr/local/sbin/lvs_nat.sh# 编辑写入如下内容:#! /bin/bash# director服务器上开启路由转发功能:echo 1 > /proc/sys/net/ipv4/ip_forward# 关闭 icmp 的重定向echo 0 > /proc/sys/net/ipv4/conf/all/send_redirectsecho 0 > /proc/sys/net/ipv4/conf/default/send_redirectsecho 0 > /proc/sys/net/ipv4/conf/eth0/send_redirectsecho 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects# director设置 nat 防火墙iptables -t nat -Fiptables -t nat -Xiptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE# director设置 ipvsadmIPVSADM='/sbin/ipvsadm'$IPVSADM -C$IPVSADM -A -t 172.16.254.200:80 -s wrr$IPVSADM -a -t 172.16.254.200:80 -r 192.168.0.18:80 -m -w 1$IPVSADM -a -t 172.16.254.200:80 -r 192.168.0.28:80 -m -w 1保存后,在Director上直接运行这个脚本就可以完成lvs-nat配置。
查看ipvsadm设置的规则:
ipvsadm -ln
- 测试lvs的效果
通过浏览器测试2台机器上的web内容http://172.16.254.200,为了区分开,我们可以把nginx的默认而修改一下。
在 RS1 上执行# echo "rs1rs1" >/usr/share/nginx/html/index.html在 RS2 上执行# echo "rs2rs2" >/usr/share/nginx/html/index.html
lvs的dr模式实践
- 实验环境
三台机器:
(1)Director节点: (eth0 192.168.0.8 vip eth0:0 192.168.0.38)
(2)Real server1: (eth0 192.168.0.18 vip lo:0 192.168.0.38)
(3)Real server2: (eth0 192.168.0.28 vip lo:0 192.168.0.38)
- 安装
两个 real server 上都安装 nginx 服务# yum install -y nginxDirector 上安装 ipvsadm# yum install -y ipvsadm
- Director上配置脚本
# vim /usr/local/sbin/lvs_dr.sh#! /bin/bashecho 1 > /proc/sys/net/ipv4/ip_forwardipv=/sbin/ipvsadmvip=192.168.0.38rs1=192.168.0.18rs2=192.168.0.28ifconfig eth0:0 downifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 uproute add -host $vip dev eth0:0$ipv -C$ipv -A -t $vip:80 -s wrr $ipv -a -t $vip:80 -r $rs1:80 -g -w 3$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
执行脚本 。
- 在2台rs上配置脚本
# vim /usr/local/sbin/lvs_dr_rs.sh#! /bin/bashvip=192.168.0.38ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 uproute add -host $vip lo:0echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announce
执行脚本 。
阅读全文
0 0
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 负载均衡
- 1296: 近似计算
- unity学习日记:怎样在UI界面上渲染3D模型
- 算法设计与分析 斐波拉契数列 动态规划
- 使用Nexus搭建Maven私服
- Warning: World-writable config file '/etc/mysql/my.cnf' is ignored
- 负载均衡
- 剑指offer-2、从尾到头打印链表
- 注解【定义+使用+读取】
- Linear_regression
- css设置一个块水平和垂直居中
- 机器学习算法之朴素贝叶斯(Naive Bayes)--第一篇
- 蓝牙技术概览
- Moving Averages(6):Different Flavors
- babel