LVS实现负载均衡(Nat模式、DR模式)

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:

LVS (linux virtual server)是实现集群服务器的一种开放源代码软件LVS集群采用IP负载均衡技术和基于内容请求分发技术.负载均衡器(Load Ba-lancer,LB)具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且负载均衡器能自动屏蔽服务器的故障,从而将一组服务器构建成为一个高性能的、高可用的虚拟服务器.整个服务器集群的结构对用户是透明的,而且无需修改客户端和服务器端的程序。具有透明性、可伸缩性、高可用性和易管理性优点。

LVS 集群中实现的三种IP 负载均衡技术,

1Virtual Server via Network Address Translation VS/NAT): 也有说端口映射的,其目标是将一组服务器构成一个高性能的、高可用的虚拟服务器。因为这种技术容易形成单点故障,从而造成网路无法访问,并存在带宽瓶颈,最多可以有10个服务器节点。

182031579.jpg


2Virtual Server via Direct Routing VS/DR) :直接路由实现虚拟服务器的方法(负载能力最强)通过改写请求报文的 M AC 地址将请求发送到真实服务器而真实服务器将响应直接返回给客户VS/DR技术可极大地提高集群系统的伸缩性这种方法没有 IP隧道的开销但是要求调度器与真实服务器都有一块网卡连在同一物理网段上,并且也解决了NAT模式产生的瓶颈问题,可以有大量的节点,最多可以有100个服务器节点

182043610.jpg


3Virtual Server via IP Tunneling VS/TUN ): 通过IP 隧道实现虚拟服务调度器把请求报文通过 IP 隧道转发至真实服务器而真实服务器将响应直接返回给客户调度器只处理请求报文由于一般网络服务应答比请求报文大许多采用VS/TUN技术后系统的最大吞吐量可以提高 10

182055927.jpg


负载均衡集群的架构

负载均衡的解决方案中,若干台服务器做同样的工作,这样一来以前由一台服务器来做的工作已经分配给多个服务器来做, 整个系统的处理能力得以提高。 在整个负载均衡集群中由负载均衡器、真实服务器组和共享存储三部分构成。


1) Load Balancer(负载均衡器)

Load Balancer 是整个集群系统的前端 , 负责把客户请求通过特定的调度算法转发到 Real Server 上。 Backup 是备份Load Balancer,当Load Balancer 不可用时接替它 , 成为实际的 Load Balancer。 Load Bal-ancer 通过 Ldirectord 监测各 Real Server 的健康状况。 在 Real Server 不可用时把它从群中剔除,恢复时重新加入。


2) Server Array(真实服务器组)

Server Array 是一组运行实际应用服务的机器,比如 WEB,Mail,FTP,DNS,Media 等等 。 在实际应用中 ,Load Balancer和 Backup 也可以兼任Real Server 的角色。


3) Shared Storage(共享存储)

Shared Storage 为所有 Real Server 提供共享存储空间和一致的数据内容。


目前,Linux 平台下的集群软件有很多,其中 Linux Virtual Server(LVS)最为流行。 LVS 安装在负载均衡器上,使用虚拟 IP 地址对外服务,当接受到客户请求后它根据特定的调度算法将客户机请求转发到选择的真实服务器,LVS 支持的调度算法如下。


固定算法:

1) rr循环(Round Robin)

调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。


2) wrr 加权循环(Weighted Round Robin)

调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。 这样可以保证处理能力强的服务器处理更多的访问流量。 调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。


3dh 目标地址散列(Destination Hashing)

目标地址散列调度算法根据请求的目标 IP 地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。


4sh 源地址散列(Source Hashing)

源地址散列调度算法根据请求的源 IP 地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。


动态算法:

1lc 最少链接(Least Connections)

调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。 如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。


2) wlc 加权最少链接(Weighted Least Connections)

在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。 调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。


3) lblc 基于局部性的最少链接(Locality-Based Least Connections)基于局部性的“最少链接”调度算法是针对目标 IP 地址的负载均衡,目前主要用于 Cache 集群系统。 该算法根据请求的目标 IP地址找出该目标 IP 地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。


4lblcr 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)

带复制的基于局部性“最少链接”调度算法也是针对目标 IP 地址的负载均衡,目前主要用于 Cache 集群系统。 它与 LBLC算法的不同之处是它要维护从一个目标 IP 地址到一组服务器的映射,而 LBLC 算法维护从一个目标 IP 地址到一台服务器的映射。 该算法根据请求的目标 IP 地址找出该目标 IP 地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。 同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

5)SED:最少的期望权值 只考虑active激活的连接,不考虑inactive连接。计算方法:(active+1*256

6)NQ:永不排队 若果某个节点未处于活动连接,就将下一个请求发送给该节点进行处理


案例1

案例要求:如下图所示,外网用户直接访问Director上的VIP地址192.168.2.2,使用网络地址转换(即VS/NAT 技术)director将请求分派给下面两台realserver ,分配使用RR轮循调度算法和WRR加权轮循调度算法


181957761.jpg


1、检查是否内核中已经加载了ip_vs相关的模块


[root@localhost ~]# grep -i ip_vs /boot/config-2.6.18-164.el5

CONFIG_IP_VS=m

# CONFIG_IP_VS_DEBUG is not set

CONFIG_IP_VS_TAB_BITS=12

CONFIG_IP_VS_PROTO_TCP=y

CONFIG_IP_VS_PROTO_UDP=y

CONFIG_IP_VS_PROTO_ESP=y

CONFIG_IP_VS_PROTO_AH=y

CONFIG_IP_VS_RR=m

CONFIG_IP_VS_WRR=m

CONFIG_IP_VS_LC=m

CONFIG_IP_VS_WLC=m

CONFIG_IP_VS_LBLC=m

CONFIG_IP_VS_LBLCR=m

CONFIG_IP_VS_DH=m

CONFIG_IP_VS_SH=m

CONFIG_IP_VS_SED=m

CONFIG_IP_VS_NQ=m

CONFIG_IP_VS_FTP=m


2安装ipvsadm管理工具


[root@localhost ~]# mount -a

mount: block device /dev/cdrom is write-protected, mounting read-only

[root@localhost ~]# cd /media/cdrom/Cluster

[root@localhost Cluster]# ll ipvs*

-r--r--r-- 78 root root 32142 2009-07-29 ipvsadm-1.24-10.i386.rpm


[root@localhost Cluster]# rpm -ivh ipvsadm-1.24-10.i386.rpm

Preparing...                ########################################### [100%]

  1:ipvsadm                ########################################### [100%]


3、查看ipvsadm的相关文件


181651179.jpg

4启动ipvsadm管理服务,


181700407.jpg

发现无法启动,因为还没有在/etc/sysconfig/产生规则文件ipvsadm


5、查看ipvsadm配置的帮忙文档,定义服务,添加服务器


[root@localhost ~]# ipvsadm -A -t 192.168.2.2:80  -srr //添加一个服务器,并指定调度算法


注:-r --real-server ;-mUse masquerading or nat

[root@localhost ~]# ipvsadm -a -t 192.168.2.2:80 -r 192.168.3.100 -m

[root@localhost ~]# ipvsadm -a -t 192.168.2.2:80 -r 192.168.3.200 -m


6、保存配置的规则

181719535.jpg


7、因使用了nat,打开数据包转发功能,


# vim /etc/sysctl.conf

7 net.ipv4.ip_forward = 1

# sysctl -p


8在两台realserver上分别配置web服务,将网关指向DirectorDIP地址192.168.2.2,外网pc访问VIP,如下图:


181758686.jpg


刷新一下,两网站间循环:


181806919.jpg


9、更改调度算法为wrr


# ipvsadm -E  -t 192.168.2.2:80  -s wrr

# ipvsadm -e -t 192.168.2.2:80 -r 192.168.3.100 -m -w 10

# ipvsadm -e -t 192.168.2.2:80 -r 192.168.3.200 -m -w 5


10、保存规则,

service ipvsadm save


11、测试时,

再次访问,将会出现两次web1,一次web2站点,这是由于realserver1的权重是realserver2的2倍。


案例2

如图所示,director上的网卡eth0:0上配置VIP地址,eth0上配置DIP地址,外网用户通过交换机访问到director的VIP,然后director通过DIP将请求发送至两台realserver,然后两台realserver 通过右侧交换机到存储服务器上查找网页,在将结果直接通过左侧的交换机返回给客户机,绕开了director。


161145263.jpg


案例配置

1、director负载均衡器配置:


[root@director ~]# ipvsadm -At 192.168.2.254:80 -s rr

[root@director ~]# ipvsadm -at 192.168.2.254:80 -r 192.168.2.10 -g

[root@director ~]# ipvsadm -at 192.168.2.254:80 -r 192.168.2.20 -g

[root@director ~]# service ipvsadm save    //保存配置

[root@director ~]# service ipvsadm start    //启动服务



2server1server2配置相同(下例为server1配置):

#解决arp不响应的问题(对arp相关项的修改也是临时性的,重启系统后消失)


[root@server1 ~] #  sysctl -a |grep arp

net.ipv4.conf.eth0.arp_ignore = 0

net.ipv4.conf.eth0.arp_announce = 0


arp_announce的值改为2,将arp_ignore的值改为1

临时修改

[root@server1 ~]# echo 1 >  /proc/sys/net/ipv4/conf/lo/arp_ignore   //只回答目标IP地址是来访网络接口本地地址的ARP查询请求

[root@server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce  //对查询目标使用最适当的本地地址

[root@server1 ~]# echo 1 >  /proc/sys/net/ipv4/conf/all/arp_ignore

[root@server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce


永久修改上面arp的不响应的问题,


#echo "net.ipv4.conf.eth0.arp_announce = 2" >> /etc/sysctl.conf

#echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf

#echo "net.ipv4.conf.eth0.arp_ignore = 1" >> /etc/sysctl.conf

#echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf


#sysctl -p   重新加载文件,使配置生效    

注:server2可以直接执行scp命令来拷贝syerver的配置文件,

    #scp /etc/sysctl.conf  192.168.2.20:/etc/

[root@server1 ~]# ifconfig lo:0 192.168.2.254 netmask 255.255.255.255   //lo:0的地址


#添加一条路由

[root@server1 ~]# route add -host 192.168.2.254 dev  lo:0

注:

通过ifconfigroute修改的并没有写入配置文件,重启网络后就失效了。


可以通过下列方式添加固定ip,

161213872.jpg


测试

# ipvsadm -Ln或通过 watch -n 1 "ipvsadm -Ln"动态查看负载情况

161224482.jpg

刷新一次,以rr调度算法实现轮循,显示sever2的网页内容。

161232798.jpg


对于web服务器而言已经实现了负载均衡,但其网页内容来自不同的服务器,当然如果是静态网页可以直接通过拷贝的方式就可以了,而对于动态网页呢,就不是一件容易的事了,下面我们就借助NFS来实现群集服务器中共享存储的概念,使每个服务器访问的资源均来自共享存储服务器。


NFS服务器设置:

通过nfs来实现自动挂载


#mkdir /abc      //创建网站主目录

#echo this is web1 && web2 > index.html

vim /etc/exports

/abc  *(ro)

#service nfs  start   //启动nfs服务


1、设置开机自动挂载

server1server2相同配置,


#vim /etc/fstab        //编辑开机自动挂载

192.168.3.1:/abc        /var/www/html           nfs     defaults,soft,intr 0 0

#mount -a


并用mount查看是否正常挂载


161604204.jpg

通过访问director的VIP,直接访问到了放置在(NFS)存储器上的网页文件,


161633204.jpg

动态查看负载均衡的匹配情况(可以实现轮循):


161646353.jpg


2、实现了开机自动挂载,为了避免占用网络资源,可以通过auofs服务来控制,实现自动挂载,当无用时,自动断开连接。


server1server2配置相同

1)编译/etc/auto.master文件,做如下添加:

161659906.jpg

2)编辑/etc/html.misc文件

[root@server1 var]# vim /etc/html.misc

html  -fstype=nfs,soft,intr  192.168.3.1:/abc

3)启动autofs服务。


4)同样访问director的VIP,直接访问到了放置在(NFS)存储器上的网页文件,并且60秒,若无连接,则服务器会自动卸载掉/abc目录。


本文转自 刘园  51CTO博客,原文链接:http://blog.51cto.com/colynn/1101174


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
基于阿里云,构建一个企业web应用上云经典架构,让IT从业者体验企业级架构的实战训练。
相关文章
|
21天前
|
运维 负载均衡 网络协议
LVS详解(六)——LVS DR模式实战
LVS详解(六)——LVS DR模式实战
20 5
|
21天前
|
运维 负载均衡 应用服务中间件
LVS详解(五)——LVS NAT模式实战
LVS详解(五)——LVS NAT模式实战
20 3
|
5月前
|
网络协议 Linux 网络架构
Linux三种网络模式 | 仅主机、桥接、NAT
Linux三种网络模式 | 仅主机、桥接、NAT
193 0
|
9天前
|
负载均衡 监控 Linux
CentOS6.5高可用集群LVS+Keepalived(DR模式)
CentOS6.5高可用集群LVS+Keepalived(DR模式)
|
4月前
|
网络协议 虚拟化 网络架构
桥接模式和NAT模式的区别
桥接模式和NAT模式的区别
103 0
|
4月前
|
网络安全 虚拟化 Windows
RHEL7-NAT模式连接外部网络
RHEL7-NAT模式连接外部网络
24 1
|
7月前
|
负载均衡 应用服务中间件 Linux
企业实战(13)LVS负载均衡NAT(网络地址转换)模式实战详解(一)
企业实战(13)LVS负载均衡NAT(网络地址转换)模式实战详解(一)
|
7月前
|
存储 负载均衡 网络协议
企业实战(13)LVS负载均衡DR(直接路由)模式实战详解(二)
企业实战(13)LVS负载均衡DR(直接路由)模式实战详解(二)
116 0
|
6月前
|
负载均衡 应用服务中间件 Linux
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
197 0
|
8月前
|
存储 负载均衡 应用服务中间件
LVS负载均衡群集——NAT模式实操
LVS负载均衡群集——NAT模式实操
212 0