设为首页 收藏本站
查看: 1025|回复: 0

[经验分享] 负载均衡(二)LVS安装部署及调度算法

[复制链接]

尚未签到

发表于 2019-1-5 11:28:14 | 显示全部楼层 |阅读模式
  负载均衡(LVS安装部署篇)
安装ipvsadm
  LVS的IP负载均衡技术是通过IPVS(IP Virtual Server,IP虚拟服务)模块实现的。IPVS模块是LVS集群的核心软件模块,它安装在LVS集群作为负载均衡的主节点上,虚拟出一个IP地址和端口对外提供服务。
用户通过访问这个虚拟服务,然后访问请求由负载均衡器调度到后端真实服务器中,由后端真实服务器处理用户的请求并返回响应。
  IPVS 在Linux内核中实现传输层负载均衡,即所谓的第4层交换。
在主机上运行的IPVS充当真实服务器集群前端的负载均衡器,它可以将对基于TCP/UDP的服务的请求定向到真实服务器,并使真实服务器的服务在虚拟服务上显示为虚拟服务。
  Linux内核2.4版本开始默认支持LVS。要使用LVS的能力,只需安装一个LVS的管理工具:ipvsadm
  下载ipvsadm:  https://mirrors.edge.kernel.org/pub/linux/utils/kernel/ipvsadm
  目前最新版本是ipvsadm-1.29.tar.gz
  直接安装会报错,需要安装一下依赖包,gcc是必须的。

  查看下系统内核版本
[root@node1 ~]# uname -r
2.6.32-573.el6.x86_64
  [root@node1 ~]# ls /usr/src/kernels/
2.6.32-696.16.1.el6.x86_64
  如果发现没有安装当前系统的内核源码在/usr/src/kernels/目录下,其实我们是少安装了一个rpm包;
使用yum安装kernel-devel
[root@node1 ~]# yum -y install kernel-devel
  [root@node1 ~]# ln -s  /usr/src/kernels/2.6.32-696.16.1.el6.x86_64 /usr/src/linux
因为/usr/src/kernels/目录下可能有多个目录,如果不创建这个连接文件,在编译时可能会报错。
  我们还需要安装几个依赖包
[root@node1 ~]# yum -y   install gcc popt-static libnl* libpopt*
[root@node1 ~]# wget  https://mirrors.edge.kernel.org/pub/linux/utils/kernel/ipvsadm/ipvsadm-1.29.tar.gz
[root@node1 ~]# tar -xf ipvsadm-1.29.tar.gz
[root@node1 ~]# cd  ipvsadm-1.29
[root@node1 ipvsadm-1.29]# make && make install


  从make install 的输出,我们可以看到生成了几个可执行文件:
  /sbin/ipvsadm
  /sbin/ipvsadm-save
  /sbin/ipvsadm-restore
  /etc/rc.d/init.d/ipvsadm
  安装完成后,模块ipvs并没有自动加载入内核,需要手动执行ipvsadm,因为还没有做配置,因此没有数据输出。再执行命令,就可以看到ipvs已加载到内核了。

部署ipvs
  我们已经成功安装了 ipvs,接下来我们开始部署使用。
  实验环境:
三台服务器在通一个内网
  设备角色              IP地址
VIP                           172.16.10.10
负载均衡               172.16.10.251
后端服务器1        172.16.10.252
后端服务器2        172.16.10.253
  负载均衡上安装好ipvs,后端服务器安用yum安装httpd
  yum -y install httpd
  service  httpd start
  在后两台端服务器上添加页面,方便区分转发后请求到了哪个后端服务器。
  后端服务器1
echo 'This is Back-end  Web Server 252 ' > /var/www/html/index.html
  后端服务器2
echo 'This is Back-end  Web Server 253 ' > /var/www/html/index.html
  测试访问结果


绑定VIP
  
为了方便维护,vip的绑定一般都是用脚本来实现的。让这个脚本随系统开机启动。
后端真实服务器
  vim /etc/init.d/lvsreal

  #! /bin/bash
# chkconfig: 2345 55 25
# Description : Start Real Server ,http://blog.运维网.com/xmomo
VIP=172.16.10.10
# /etc/rc.d/init.d/functions  //脚本在/etc/init.d/目录下,注释这一行
case "$1" in
start)
echo "Start LVS Of Real Server"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
     echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
     echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
     echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
     echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
/sbin/ifconfig lo:0 down
echo "Stop LVS Of Real Server"
     echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
     echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
     echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
     echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
  # chmod +x /etc/init.d/lvsreal
# chkconfig  --add lvsreal
# /etc/init.d/lvsreal start
  LVS后端提供服务的服务器都要使用这个VIP,在其他服务器上做同样的操作。
  这个VIP被绑定到 lo:0 上,广播地址是本身,子网掩码是 255.255.255.255。
这是与标准的网络地址设置有很大的不同,
采用这种可变长的子网掩码方式把网段划分成只含一个主机地址,这样做的目的是避免IP地址冲突。
echo "1" ,echo "2" 是为了防止arp广播。
  
运行脚本后看下我们vip是否配置成功。

负载均衡
  现在就轮到负载均衡器的配置了,由于没有配置keepalived一起使用,因此只需要一个服务器做负载均衡器。
  vim /usr/local/bin/lvsserver.sh
#! /bin/bash
# Description : Start Load Balance ,http://blog.运维网.com/xmomo
ip addr add 172.16.10.10/32 dev lo:0
ipvsadm -C
ipvsadm -A -t 172.16.10.10:80 -s wlc
ipvsadm -a -t 172.16.10.10:80 -r 172.16.10.252 -g -w 1
ipvsadm -a -t 172.16.10.10:80 -r 172.16.10.253 -g -w 1
  chmod +x /usr/local/bin/lvsserver.sh
/usr/local/bin/lvsserver.sh
让这个脚本随系统开机启动,我们把这个脚本路径添加到/etc/rc.local
  echo '/bin/bash /usr/local/bin/lvsserver.sh' >> /etc/rc.local
  检查VIP地址是否配置成功,以及查看转发规则是生效。

  确认没问题后,我们来验证一下:
用客户端浏览器访问: http://172.16.10.10/index.html  多刷新几下。


  从输出信息可以看到,客户端请求都被转发到后端服务器了。
客户端172.16.10.22的请求被转发到172.16.10.252和172.16.10.253。

LVS调度算法
  
  LVS集群的负载调度主要是由工作在内核当中的IPVS IP负载均衡软件负责进行调度的,IPVS在内核中的负载均衡调度是以连接为粒度的,在内核中的连接调度算法上,IPVS已实现了以下八种调度算法.

  静态算法:只根据算法进行调度 而不考虑后端服务器的实际连接情况和负载情况

1.轮叫调度(Round-Robin Scheduling)
  
这种算法就是以轮叫的方式依次将请求调度不同的服务器,算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。轮叫调度算法假设所有服务器处理性能均相同,不管服务器的当前连接数和响应速度。该算法相对简单,不适用于服务器组中处理性能不一的情况,而且当请求服务时间变化比较大时,轮叫调度算法容易导致服务器间的负载不平衡。
2.加权轮叫调度(Weighted Round-Robin Scheduling)
  
这种算法可以解决服务器间性能不一的情况,它用相应的权值表示服务器的处理性能,服务器的缺省权值为1。假设服务器A的权值为1,B的 权值为2,则表示服务器B的处理性能是A的两倍。加权轮叫调度算法是按权值的高低和轮叫方式分配请求到各服务器。权值高的服务器先收到的连接,权值高的服 务器比权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接数。
3.目标地址散列调度(Destination Hashing Scheduling)
  
此算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
4.源地址散列调度(Source Hashing Scheduling)
  
此算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法 的相同。它的算法流程与目标地址散列调度算法的基本相似。
  动态算法:前端的调度器会根据后端真实服务器的实际连接情况来分配请求

1.最小连接调度(Least-Connection Scheduling)
  
这种算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务 器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中止或超时,其连接数减一。当各个服务器有相同的处理性能时,最小连接调度算法能把负载变化大的请求分布平滑到各个服务器上,所有处理时间比较长的请求不可能被发送到同一台服 务器上。但是,当各个服务器的处理能力不同时,该算法并不理想,因为TCP连接处理请求后会进入TIME_WAIT状态,TCP的TIME_WAIT一般 为2分钟,此时连接还占用服务器的资源,所以会出现这样情形,性能高的服务器已处理所收到的连接,连接处于TIME_WAIT状态,而性能低的服务器已经 忙于处理所收到的连接,还不断地收到新的连接请求。
2.加权最小连接调度(Weighted Least-Connection Scheduling)
  
这种算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权 值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。
3.基于局部性的最少链接(Locality-Based Least Connections Scheduling)
  
这种算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器
4.带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
  
这种算法先根据请求的目标IP地址找出该目标IP地址对应的服务器组;按“最小连接”原则从该服务器组中选出一台服务器,若服务器没有超载, 将请求发送到该服务器;若服务器超载;则按“最小连接”原则从整个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该 服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

  






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-659613-1-1.html 上篇帖子: 负载均衡集群LVS 下篇帖子: LVS类型的介绍,调度算法和不同类型的实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表