一、LVS简介:
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。在可伸缩网络服务的几种结构中它们需要一个前端的负载调度器(或者多个进行主从备份)。我们先分析实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的。在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation)。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。
二、LVS三种模型:
LVS-NAT模型:
外网用户直接访问Director上的VIP地址,在Director 上做DNAT,将请求分派给给real server服务器中的其中一台,请求可以是http、mail、dns或ftp。然后real server将请求结果通过Director的Dip发送给请求者。由于请求和回复都要经过Director,容易使Director成为瓶颈,最多可以有10个节点。如下图所示:
LVS-DR模型:
外网用户直接访问Director上的VIP地址,Director将请求分派给real server 进行处理,当realserver处理后不再经过Director,而是直接送至客户端,绕开了Director,使Director不再成为瓶颈。可以有大量的节点,最多可以有100个节点。如下图所示:
LVS-TUN模型:
数据包通过VIP地址到达LB后,会被重新封装,在原有数据报外加上RS的真实IP地址并发送给RS。RS在收到数据包(ipip-proto协议)后,会解包并将包直接转发给之前配置的tunl端口VIP地址。后续RS处理数据包后,将返回数据包直接发给给客户端而无需经过LB。使用Tunnel模式的LVS相比NAT模式,从RS返回客户端的数据包不用经过LB,减轻了LB的压力。如下图所示:
三、LVS的三层结构:
负载调度器(director):负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址。
服务器池:执行客户请求的服务器。
共享的存储:为服务器池提供一个共享的存储区,以便进行通讯和访问。
四、LVS常用的调度算法:
LVS的调度算法又可以分为4种固定调度算法和6种动态调度算法两种。
(1)固定调度算法:RR(轮询调度算法)、WRR(加权轮询调度算法)、DH(目标hash)、SH(来源hash)
(2)动态调度算法:LC(最小连接)、WLC(加权最小连接)、SED(最小期望权值)、NQ(永不排队)、LBLC、LBLCR
五、群集简介:
服务器群集技术最主要的应用即在于网络负载平衡的功能。 网络负载平衡使用两台或更多台一起工作的主机计算机组成的群集,为服务器提供了高可用性和高伸缩性。Internet 客户端使用一个 IP 地址或一组地址访问群集。客户端无法区别群集和单一服务器。服务器应用程序并不表明它们是在群集上运行的。但是,网络负载平衡群集与运行单个服务器应用程序的单个主机有很大的区别,因为即使在某个群集主机发生故障的情况下,它也可以提供不间断服务。群集对客户端请求的响应也比单个主机快。
六、服务器群集分类:
LB(负载均衡群集):主要用于处理大量的并发连接请求。
HA(高可用性群集):主要用于高性能要求的服务器群集。
HP(高性能群集):主要用作大量的复杂的运算。
七、案例演示:(第一个案例实现LVS-NAT模型、第二个案例实现LVS-DR模型)
案例一:
试验目的:实现lvs―nat模型。处理请求访问。
试验拓扑:
试验步骤:
第一步;配置ip地址与网关等相应信息,其中real-server-1与real-server-2的网关均为192.168.2.1。然后重新启动network服务。
Director:
Real-server-1
Real-server-2
第二步;配置Director,在director中配置yum,并安装ipvsadm服务
[root@zhangc ~]# yum install ipvsadm �Cy
初始化服务,进行保存,生成相应文件。
[root@zhangc ~]# service ipvsadm save
[root@zhangc ~]# ipvsadm -A -t 192.168.100.123:80 -s rr【-A表示追加,-t表示使用tcp协议,-s表示使用算法,rr表示轮询算法】
[root@zhangc ~]# ipvsadm -a -t 192.168.100.123:80 -r 192.168.2.100 �Cm【-a表示添加条目,-r表示realserver �Cm表示使用nat模式】
[root@zhangc ~]# ipvsadm -a -t 192.168.100.123:80 -r 192.168.2.101 �Cm
第三步;配置real-server-1,安装apache服务,创建简单静态页面,进行测试。
第四步;配置real-server-2,配置方法与real-server-1相同,不再赘述。
第五步;测试页面。
案例二:
试验目的:实现搭建lvs-dr模型,并实现自动挂载。
试验拓扑:
试验步骤:
第一步:配置相关网卡的虚拟接口ip地址(vip)。
Director中的相关信息:
Real-server-1中的相关配置信息:
Real-server-2中的相关配置信息
第二步:配置director中的相关服务,搭建director.
DIRECTOR:
[root@zhangc ~]# yum install -y ipvsadm【安装ipvsadm服务】
[root@zhangc ~]# service ipvsadm start【启动ipvsadm服务】
[root@zhangc ~]# service ipvsadm save【保存ipvsadm,生成相应文件】
[root@zhangc ~]# chkconfig ipvsadm on【将ipvsadm设置为开机自启动】
[root@zhangc ~]# ipvsadm -A -t 192.168.100.100:80 -s rr【添加ipvsadm条目,-s rr表示使用轮询算法,-t表示使用tcp协议,-A表示追加条目】
[root@zhangc ~]# ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.124 �Cg【-a表示追加规则,-t表示使用tcp协议,-r表示real-server,-g表示使用dr模型】
[root@zhangc ~]# ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.125 �Cg
[root@zhangc ~]# service ipvsadm save【保存写好的ipvsadm规则】
[root@zhangc ~]# service ipvsadm restart【重新启动ipvsadm服务】
第三步:配置Real-server-1以及相关服务
[root@zhangc ~]# sysctl -a |grep arp【查看arp相关参数】
net.ipv4.conf.eth0.arp_ignore = 0
net.ipv4.conf.eth0.arp_announce = 0
[root@zhangc ~]# echo "net.ipv4.conf.eth0.arp_announce = 2" >>/etc/sysctl.conf【将arp_announce设置为2】
[root@zhangc ~]# echo "net.ipv4.conf.all.arp_announce = 2" >>/etc/sysctl.conf
[root@zhangc ~]# echo "net.ipv4.conf.eth0.arp_ignore = 1" >>/etc/sysctl.conf【将arp_ignore设置为1】
[root@zhangc ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >>/etc/sysctl.conf
安装httpd服务
[root@zhangc ~]# yum install -y httpd【安装httpd服务】
[root@zhangc ~]# cd /var/www/html/【进入目录,编写测试文件index.html】
[root@zhangc html]# echo "web1" >>index.html
[root@zhangc html]# service httpd start【启动apache服务】
第四步:配置Real-server-2以及相关服务(与real-server 1配置方法相同,不再赘述)
[root@zhangc ~]# sysctl -a |grep arp
net.ipv4.conf.eth0.arp_ignore = 0
net.ipv4.conf.eth0.arp_announce = 0
[root@zhangc ~]# echo "net.ipv4.conf.eth0.arp_announce = 2" >>/etc/sysctl.conf
[root@zhangc ~]# echo "net.ipv4.conf.all.arp_announce = 2" >>/etc/sysctl.conf
[root@zhangc ~]# echo "net.ipv4.conf.eth0.arp_ignore = 1" >>/etc/sysctl.conf
[root@zhangc ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >>/etc/sysctl.conf
安装httpd服务
[root@zhangc ~]# yum install -y httpd
[root@zhangc ~]# cd /var/www/html/
[root@zhangc html]# echo "web2" >>index.html
[root@zhangc html]# service httpd start
第五步:配置nfs服务器,以便实现nfs文件系统的自动挂载到real-server中。
[root@localhost ~]# vim /etc/exports【编辑共享文件】
[root@localhost ~]# exportfs �Crv【导出共享文件】
[root@localhost ~]# mkdir /qq【创建相应的共享文件名】
[root@localhost qq]# echo "11111" >>index.html【编辑挂载测试文件】
[root@localhost ~]# service nfs restart【重新启动nfs服务】
第六步:配置real-server中的自动挂载信息文件。
Real-server-1
[root@zhangc ~]# vim /etc/auto.master【编辑nfs网络文件系统在本机挂载的位置】
[root@zhangc ~]# cd /etc/【进入/etc目录,便于修改和复制相应文件】
[root@zhangc etc]# cp -p auto.misc auto.nfsa【创建相应的挂载执行文件】
[root@zhangc etc]# vim auto.nfsa【编辑挂载执行文件】
[root@zhangc etc]# service autofs restart【重新启动autofs服务】
测试自动挂载:
Real-server-2【配置编辑方法与real-server 1相同】
[root@zhangc ~]# vim /etc/auto.master
[root@zhangc ~]# cd /etc/
[root@zhangc etc]# cp -p auto.misc auto.nfsb
[root@zhangc etc]# vim auto.nfsb
[root@zhangc etc]# service autofs restart
测试自动挂载:
第七步:测试访问请求(访问vip,可以查看到挂载nfs服务器中的文件)
试验完成~