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

[经验分享] lvs简介及实现负载均衡

[复制链接]

尚未签到

发表于 2019-1-5 13:13:54 | 显示全部楼层 |阅读模式
一、什么是lvs?
LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,可以实现LINUX平台下的简单负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。
如图:

二、技术简介
LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。一般来说,LVS集群采用三层结构,其主要组成部分为:
1) 负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
2) 服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
3) 共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
LVS集群种类通常是通过LVS Director中继到集群节点的请求的方法来形容的,目前有三种可用的方法:
1) 网络地址转换(LVS-NAT)
Virtual Server via Network Address Translation(VS/NAT)
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。

如图:

2) 直接路由(LVS-DR)
Virtual Server via Direct Routing(VS/DR)
VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连在同一物理网段上。
如图:

3) IP隧道(LVS-TUN)
Virtual Server via IP Tunneling(VS/TUN)
采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。

如图:

LVS调度方法
1) 固定(或非动态)调度方法
循环法(RR)
权重循环(WRR)
目标散列法
源散列法
2) 动态调度方法
最少连接(LC)
权重最少连接(WLC)
最短预期延迟(SED)
永不排队(NQ)
基于本地最少连接(LBLC)
基于本地最少连接重复调度(LBLCR)
三、案例 实现lvs负载均衡
案例一 使用lvs_nat模式
1)调度方法为rr
实验拓扑图:

1. Load balancer配置
网络配置:

首先查看内核是否支持ipvs
[root@localhost ~]# uname -r
2.6.18-164.el5
[root@localhost ~]# grep -i ip_vs /boot/config-2.6.18-164.el5
打开路由转发功能,如下:
[root@localhost ~]# vim /etc/sysctl.conf
7 net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl –p
##立即生效
[root@localhost ~]# yum install ipvsadm –y
安装成功!
[root@localhost ~]# ipvsadm -A -t 192.168.101.15:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.101.15:80 -r 192.168.2.100 -m
[root@localhost ~]# ipvsadm -a -t 192.168.101.15:80 -r 192.168.2.101 -m
[root@localhost ~]# service ipvsadm save
Saving IPVS table to /etc/sysconfig/ipvsadm:               [ OK ]
[root@localhost ~]# service ipvsadm start
Clearing the current IPVS table:                           [ OK ]
Applying IPVS configuration:                               [ OK ]
[root@localhost ~]# ipvsadm -ln                                    
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP 192.168.101.15:80 rr
-> 192.168.2.100:80              Masq   1      0          0         
-> 192.168.2.101:80              Masq 1      0          0         
2.Realserver1配置
网络配置:

安装httpd服务
[root@localhost ~]# cd /mnt/cdrom/Server/
[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm
新建一个网页
[root@localhost Server]# cd /var/www/html/
[root@localhost html]# echo "web1" >index.html
启动服务
[root@localhost ~]# service httpd start
3.Realserver2配置
网络配置:

安装httpd服务
[root@localhost ~]# cd /mnt/cdrom/Server/
[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm
新建一个网页
[root@localhost Server]# cd /var/www/html/
[root@localhost html]# echo "web2" >index.html
启动服务
[root@localhost ~]# service httpd start
测试:

2)调度方法wrr
Load balancer配置
设置web1的权重为web2的2倍
[root@localhost ~]# vim /etc/sysconfig/ipvsadm
[root@localhost ~]# ipvsadm -E -t 192.168.101.15:80 -s wrr
[root@localhost ~]# ipvsadm -e -t 192.168.101.15:80 -r 192.168.2.100 -m -w 10
[root@localhost ~]# ipvsadm -e -t 192.168.101.15:80 -r 192.168.2.101 -m -w 5
[root@localhost ~]# service ipvsadm save
Saving IPVS table to /etc/sysconfig/ipvsadm:               [ OK ]
[root@localhost ~]# service ipvsadm restart
Clearing the current IPVS table:                           [ OK ]
Applying IPVS configuration:                               [ OK ]
测试:
用user用户访问3次


案例二 使用lvs_dr模式
实验拓扑图:

Realserver1的配置
[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_announce = 2" >>/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.all.arp_announce = 2" >>/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_ignore = 1" >>/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >>/etc/sysctl.conf
[root@localhost ~]# sysctl –p
配置网络信息:

添加路由
[root@localhost ~]# route add -host 192.168.2.11 dev lo:0
安装httpd服务
[root@localhost ~]# cd /mnt/cdrom/Server/
[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm
新建一个网页
[root@localhost Server]# cd /var/www/html/
[root@localhost html]# echo "web1" >index.html
启动服务
[root@localhost ~]# service httpd start
Realserver2配置
将realserver1的配置copy过来
[root@localhost ~]# scp 192.168.2.100:/etc/sysctl.conf /etc/
配置网络信息:

添加路由信息
[root@localhost ~]# route add -host 192.168.2.11 dev lo:0
安装httpd服务
[root@localhost ~]# cd /mnt/cdrom/Server/
[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm
新建一个网页
[root@localhost Server]# cd /var/www/html/
[root@localhost html]# echo "web1" >index.html
启动服务
[root@localhost ~]# service httpd start
LinuxDirector配置
配置网络信息:

安装ipvsadm服务
[root@localhost ~]# cd /mnt/cdrom/
[root@localhost cdrom]# cd Cluster/                                 
[root@localhost Cluster]# rpm -ivh ipvsadm-1.24-10.i386.rpm
启动服务
[root@localhost Cluster]# service ipvsadm save
Saving IPVS table to /etc/sysconfig/ipvsadm:               [ OK ]
[root@localhost Cluster]# service ipvsadm start
Clearing the current IPVS table:                           [ OK ]
Applying IPVS configuration:                               [ OK ]
[root@localhost Cluster]# chkconfig ipvsadm on
[root@localhost Cluster]# ipvsadm -A -t 192.168.2.11:80 -s rr
[root@localhost Cluster]# ipvsadm -a -t 192.168.2.11:80 -r 192.168.2.100 -g   
[root@localhost Cluster]# ipvsadm -a -t 192.168.2.11:80 -r 192.168.2.101 -g
[root@localhost Cluster]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP 192.168.2.11:80 rr
-> 192.168.2.101:80             Route   1      0          0         
-> 192.168.2.100:80             Route   1      0          0         
测试:

持久连接
[root@localhost ~]# ipvsadm -A -t 192.168.2.11:0 -s rr -p 60
[root@localhost ~]# ipvsadm -a -t 192.168.2.11:0 -r 192.168.2.100 -g
[root@localhost ~]# ipvsadm -a -t 192.168.2.11:0 -r 192.168.2.101 -g
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP 192.168.2.11:0 rr persistent 60
-> 192.168.2.101:0              Route   1      0          0         
-> 192.168.2.100:0              Route   1      0          0         
[root@localhost ~]#
测试
在60s内访问都是web2





运维网声明 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-659685-1-1.html 上篇帖子: lvs健康检测脚本 下篇帖子: lvs几种算法的简单介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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