负载均衡

来源:互联网 发布:生化危机人工智能 编辑:程序博客网 时间: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

注意:一定要在两台RS上设置网关的IP为director和内网IP。

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

执行脚本 。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 做主播高薪可是心累不愿做了怎么办 pr导出的avi无压缩太大怎么办 捡了个小米max被绑定了怎么办 二十岁时头发开始掉了怎么办 在酒店换衣服忘记关窗帘了怎么办 淘宝店铺装修更改图片要收费怎么办 惠阳市教育考试考证号忘记怎么办 高考完被被骗去读自考以后怎么办 孩子学习遇到瓶颈期了老师该怎么办 微信家长群有不好的言论出现怎么办 铃木汽车后备箱电动锁没有电怎么办 坐飞机没有连号座位带孩子怎么办 白沙的衣服洗衣服时染上颜色怎么办 网购商家少发了货怎么办 我想成为安利的员工怎么办会员 安利皇后锅锅盖吸在桌子上怎么办 淘宝客服退款返佣金诈骗后怎么办 第一试用网的钱提现出现问题怎么办 一个手机号注册两个京东账号怎么办 白色衣服被洗衣粉泡白了怎么办 白色衣服染成一块块荧光色了怎么办 中脉远红镇痛护腰不会发热了怎么办 用完悦诗风吟脸变黑不均匀怎么办 护肤品开封后一年还没用完怎么办 兰蔻化妆品套装正品和假怎么办 月经期间卫生巾搞得屁股疼怎么办 大姨妈特别多用卫生巾老是漏怎么办 夏天用卫生巾不透气摩擦红了怎么办 在日本的洗手间用完的姨妈巾怎么办 想穿短裙但是膝盖怕凉怎么办 裤子被卫生巾粘住扯不下来怎么办 医生说来姨妈不可以用卫生巾怎么办 隆胸以后摸起来感觉假体会动怎么办 产后15个月说恶露没排干净怎么办 母猪产后两天肚子里还有小猪怎么办 背心式无痕运动文胸显得胸小怎么办 卫生巾过敏起疙瘩反复挠不好怎么办 去健身房办卡老板跑了怎么办 买货我已经拒收商家不退款怎么办 在京东买了东西拒收不退款怎么办 罗马仕充电宝进入休眠状态怎么办