阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux负载均衡软件LVS

285次阅读
没有评论

共计 25907 个字符,预计需要花费 65 分钟才能阅读完成。

一、LVS 简介
LVS 是 Linux Virtual Server 的简称,也就是 Linux 虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是 www.linuxvirtualserver.org。现在 LVS 已经是 Linux 标准内核的一部分,在 Linux2.4 内核以前,使用 LVS 时必须要重新编译内核以支持 LVS 功能模块,但是从 Linux2.4 内核以后,已经完全内置了 LVS 的各个功能模块,无需给内核打任何补丁,可以直接使用 LVS 提供的各种功能。
使用 LVS 技术要达到的目标是:通过 LVS 提供的负载均衡技术和 Linux 操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
LVS 自从 1998 年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用 LVS 技术实现高可伸缩的、高可用的网络服务,例如 WWW 服务、Cache 服务、DNS 服务、FTP 服务、MAIL 服务、视频 / 音频点播服务等等,有许多比较著名网站和组织都在使用 LVS 架设的集群系统,例 如:Linux 的门户网站(www.linux.com)、向 RealPlayer 提供音频视频服务而闻名的 Real 公司(www.real.com)、全球最大的开源网站(sourceforge.net)等。
二、LVS 体系结构
使用 LVS 架设的服务器集群系统有三个部分组成:最前端的负载均衡层,用 Load Balancer 表示,中间的服务器群组层,用 Server Array 表示,最底端的数据共享存储层,用 Shared Storage 表示,在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。
LVS 体系结构如图 1 所示:

Linux 负载均衡软件 LVS

图 1 LVS 的体系结构
 

下面对 LVS 的各个组成部分进行详细介绍:
l Load Balancer 层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS 模块就安装在 Director Server 上,而 Director 的主要作用类似于一个路由器,它含有完成 LVS 功能所设定的路由表,通过这些路由表把用户的请求分发给 Server Array 层的应用服务器(Real Server)上。同时,在 Director Server 上还要安装对 Real Server 服务的监控模块 Ldirectord,此模块用于监测各个 Real Server 服务的健康状况。在 Real Server 不可用时把它从 LVS 路由表中剔除,恢复时重新加入。
l Server Array 层:由一组实际运行应用服务的机器组成,Real Server 可以是 WEB 服务器、MAIL 服务器、FTP 服务器、DNS 服务器、视频服务器中的一个或者多个,每个 Real Server 之间通过高速的 LAN 或分布在各地的 WAN 相连接。在实际的应用中,Director Server 也可以同时兼任 Real Server 的角色。
l Shared Storage 层:是为所有 Real Server 提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成,为了提供内容的一致性,一般可以通过 NFS 网络文件系统共享数 据,但是 NFS 在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如 Red Hat 的 GFS 文件系统,Oracle 提供的 OCFS2 文件系统等。
从整个 LVS 结构可以看出,Director Server 是整个 LVS 的核心,目前,用于 Director Server 的操作系统只能是 Linux 和 FreeBSD,linux2.6 内核不用任何设置就可以支持 LVS 功能,而 FreeBSD 作为 DirectorServer 的应用还不是很多,性能也不是很好。
对于 Real Server,几乎可以是所有的系统平台,Linux、windows、Solaris、AIX、BSD 系列都能很好的支持。

三、LVS 集群的特点
3.1  IP 负载均衡与负载调度算法

1.IP 负载均衡技术
负载均衡技术有很多实现方案,有基于 DNS 域名轮流解析的方法、有基于客户端调度访问的方法、有基于应用层系统负载的调度方法,还有基于 IP 地址的调度方法,在这些负载调度算法中,执行效率最高的是 IP 负载均衡技术。
LVS 的 IP 负载均衡技术是通过 IPVS 模块来实现的,IPVS 是 LVS 集群系统的核心软件,它的主要作用是:安装在 Director Server 上,同时在 Director Server 上虚拟出一个 IP 地址,用户必须通过这个虚拟的 IP 地址访问服务。这个虚拟 IP 一般称为 LVS 的 VIP,即 Virtual IP。访问的请求首先经过 VIP 到达负载调度器,然后由负载调度器从 Real Server 列表中选取一个服务节点响应用户的请求。
当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的 Real Server 节点,而 Real Server 节点如何返回数据给用户,是 IPVS 实现的重点技术,IPVS 实现负载均衡机制有三种,分别是 NAT、TUN 和 DR,详述如下:
l VS/NAT:即(Virtual Server via Network Address Translation)
也就是网络地址翻译技术实现虚拟服务器,当用户请求到达调度器时,调度器将请求报文的目标地址(即虚拟 IP 地址)改写成选定的 Real Server 地址,同时报文的目标端口也改成选定的 Real Server 的相应端口,最后将报文请求发送到选定的 Real Server。在服务器端得到数据后,Real Server 返回数据给用户时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟 IP 地址和相应端口,然后把数据发送给用户,完成整个负载调度过 程。
可以看出,在 NAT 方式下,用户请求和响应报文都必须经过 DirectorServer 地址重写,当用户请求越来越多时,调度器的处理能力将称为瓶颈。
l VS/TUN:即(Virtual Server via IP Tunneling)
也就是 IP 隧道技术实现虚拟服务器。它的连接调度和管理与 VS/NAT 方式一样,只是它的报文转发方法不同,VS/TUN 方式中,调度器采用 IP 隧道技术 将用户请求转发到某个 Real Server,而这个 Real Server 将直接响应用户的请求,不再经过前端调度器,此外,对 Real Server 的地域位置没有要求,可以和 Director Server 位于同一个网段,也可以是独立的一个网络。因此,在 TUN 方式中,调度器将只处理用户的报文请求,集群系统的吞吐量大大提高。
l VS/DR:即(Virtual Server via Direct Routing)
也就是用直接路由技术实现虚拟服务器。它的连接调度和管理与 VS/NAT 和 VS/TUN 中的一样,但它的报文转发方法又有不同,VS/DR 通过改写请求报文的 MAC 地址,将请求发送到 Real Server,而 Real Server 将响应直接返回给客户,免去了 VS/TUN 中的 IP 隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求 DirectorServer 与 Real Server 都有一块网卡连在同一物理网段上。

2.负载调度算法
上面我们谈到,负载调度器是根据各个服务器的负载情况,动态地选择一台 Real Server 响应用户请求,那么动态选择是如何实现呢,其实也就是我们这里要说的负载调度算法,根据不同的网络服务需求和服务器配置,IPVS 实现了如下 八种负载调度算法,这里我们详细讲述最常用的四种调度算法,剩余的四种调度算法请参考其它资料。
l 轮叫调度(RoundRobin)
“轮叫”调度也叫 1:1 调度,调度器通过“轮叫”调度算法将外部用户请求按顺序 1:1 的分配到集群中的每个 Real Server 上,这种算法平等地对待每一台 Real Server,而不管服务器上实际的负载状况和连接状态。
l 加权轮叫调度(WeightedRound Robin)
“加权轮叫”调度算法是根据 Real Server 的不同处理能力来调度访问请求。可以对每台 Real Server 设置不同的调度权值,对于性能相对较好的 Real Server 可以设置较高的权值,而对于处理能力较弱的 Real Server,可以设置较低的权值,这样保证了处理能力强的服务器处理更多的访问流量。充分合理的利用了服务器资源。同时,调度器还可以自动查询 Real Server 的负载情况,并动态地调整其权值。
l 最少链接调度(LeastConnections)
“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。
l 加权最少链接调度(WeightedLeast Connections)
“加权最少链接调度”是“最少连接调度”的超集,每个服务节点可以用相应的权值表示其处理能力,而系统管理员可以动态的设置相应的权值,缺省权值为 1,加权最小连接调度在分配新连接请求时尽可能使服务节点的已建立连接数和其权值成正比。
其它四种调度算法分别为:基于局部性的最少链接(Locality-Based Least Connections)、带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)、目标地址散列(Destination Hashing)和源地址散列(Source Hashing),对于这四种调度算法的含义,本文不再讲述,如果想深入了解这其余四种调度策略的话,可以登陆 LVS 中文站点 zh.linuxvirtualserver.org,查阅更详细的信息。

3.2 高可用性
LVS 是一个基于内核级别的应用软件,因此具有很高的处理性能,用 LVS 构架的负载均衡集群系统具有优秀的处理能力,每个服务节点的故障不会影响整个系统的正常使用,同时又实现负载的合理均衡,使应用具有超高负荷的服务能力,可支持上百万个并发连接请求。如配置百兆网卡,采用 VS/TUN 或 VS/DR 调度 技术,整个集群系统的吞吐量可高达 1Gbits/s;如配置千兆网卡,则系统的最大吞吐量可接近 10Gbits/s。

3.3 高可靠性
LVS 负载均衡集群软件已经在企业、学校等行业得到了很好的普及应用,国内外很多大型的、关键性的 web 站点也都采用了 LVS 集群软件,所以它的可靠性在 实践中得到了很好的证实。有很多以 LVS 做的负载均衡系统,运行很长时间,从未做过重新启动。这些都说明了 LVS 的高稳定性和高可靠性。

3.4 适用环境
LVS 对前端 Director Server 目前仅支持 Linux 和 FreeBSD 系统,但是支持大多数的 TCP 和 UDP 协议,支持 TCP 协议的应用有:HTTP,HTTPS,FTP,SMTP,,POP3,IMAP4,PROXY,LDAP,SSMTP 等等。支持 UDP 协议的应用有:DNS,NTP,ICP,视频、音频流播放协议等。
LVS 对 Real Server 的操作系统没有任何限制,RealServer 可运行在任何支持 TCP/IP 的操作系统上,包括 Linux,各种 Unix(如 FreeBSD、SunSolaris、HP Unix 等),Mac/OS 和 Windows 等。

3.5 开源软件
LVS 集群软件是按 GPL(GNU Public License)许可证发行的自由软件,因此,使用者可以得到软件的源代码,并且可以根据自己的需要进行各种修改,但是修改必须是以 GPL 方式发行。

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2016-11/137435p2.htm

一、安装 LVS 软件

1.安装前准备工作
操作系统:统一采用 CentOS4.4 版本。
地址规划,如表 1 所示:
表 1

Linux 负载均衡软件 LVS

更详细的信息如图 2 所示:

Linux 负载均衡软件 LVS

图 2  LVS DR 模式安装部署结构图

 图 2 中的 VIP 指的是虚拟 IP 地址,还可以叫做 LVS 集群的服务 IP,在 DR、TUN 模式中,数据包是直接返回给用户的,所以,在 Director Server 上以及集群的每个节点上都需要设置这个地址。此 IP 在 Real Server 上一般绑定在回环地址上,例如 lo:0,同样,在 Director Server 上,虚拟 IP 绑定在真实的网络接口设备上,例如 eth0:0。
 各个 Real Server 可以是在同一个网段内,也可以是相互独立的网段,还可以是分布在 internet 上的多个服务器。

2.安装操作系统
Centos4.4 版本的 Linux,内核默认支持 LVS 功能,为了方便编译安装 IPVS 管理软件,在安装操作系统时,建议选择如下这些安装包:
l 桌面环境:xwindowssystem、GNOME desktop environment。
l 开发工具:developmenttools、x software development、gnomesoftware、development、kdesoftware development。
系统安装完毕,可以通过如下命令检查 kernel 是否已经支持 LVS 的 ipvs 模块:
[root@localhost ~]#modprobe -l |grep ipvs
/lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_rr.ko
/lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_sh.ko
如果有类似上面的输出,表明系统内核已经默认支持了 IPVS 模块。接着就可以安装 IPVS 管理软件了。

3.在 Director Serve 上安装 IPVS 管理软件
IPVS 提供的软件包有源码方式的也有 rpm 方式的,这里介绍下源码方式安装 IPVS, 首先从 http://www.linuxvirtualserver.org/software/ipvs.html 下载对应版本的 ipvs 源码,由于我们这里采用的操作系统为 Centos4.4 版本,因此,下载对应的 ipvsadm-1.24 版本,接着进行安装:
[root@localhost ~]#tar zxvf ipvsadm-1.24.tar.gz
[root@localhost ~]#cd ipvsadm-1.24
[root@localhost ~]#make
[root@localhost ~]#make install
注意:在 make 时可能会出现错误编译信息,这是由于编译程序找不到对应内核的原因,按照如下操作就可以正常编译:
[root@localhost ~]#ln -s /usr/src/kernels/2.6.9-42.EL-i686/ /usr/src/linux
也可以下载 rpm 安装包,通过 rpm 方式进行安装:
[root@localhost ~]#rpm –ivh ipvsadm-1.24-6.1.i386.rpm
然后执行:
[root@localhost ~]# ipvsadm –help
如果看到帮助提示,表明 IPVS 已经成功安装。

4.ipvsadm 的用法
(1)Ipvsadm 常用的语法和格式如下:
ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]][-M netmask]
ipvsadm -D -t|u|f virtual-service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f virtual-service-address:port -r real-server-address:port
[-g|i|m] [-w weight]
ipvsadm -d -t|u|f virtual-service-address -r real-server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f virtual-service-address]
ipvsadm –set tcp tcpfin udp
ipvsadm –h
其中:
l virtual-service-address: 是指虚拟服务器的 IP 地址,本文是 192.168.60.200
l real-service-address: 是指 Real Server 的 IP 地址,本文是 192.168.60.132/144
l scheduler:指定调度算法
ipvsadm 命令选项详细含义如表 2 所示:
表 2
命令选项
含义
-A (–add-service) 在内核的虚拟服务器列表中添加一条新的虚拟 IP 记录。也就是增加一台新的虚拟服务器。虚拟 IP 也就是虚拟服务器的 IP 地址。
-E (–edit-service) 编辑内核虚拟服务器列表中的一条虚拟服务器记录
-D (–delete-service) 删除内核虚拟服务器列表中的一条虚拟服务器记录
-C (–clear) 清除内核虚拟服务器列表中的所有记录
-R (–restore) 恢复虚拟服务器规则
-S (–save) 保存虚拟服务器规则,输出为 -R 选项可读的格式
-a (–add-server) 在内核虚拟服务器列表的一条记录里添加一条新的 RealServer 记录。也就是在一个虚拟服务器中增加一台新的 Real Server
-e (–edit-server) 编辑一条虚拟服务器记录中的某条 Real Server 记录
-d (–delete-server) 删除一条虚拟服务器记录中的某条 Real Server 记录
-L|-l –list 显示内核中虚拟服务器列表
-Z (–zero) 虚拟服务器列表计数器清零(清空当前的连接数量等)
–set tcp tcpfin udp 设置连接超时值
-t 说明虚拟服务器提供的是 tcp 服务,此选项后面跟如下格式:
[virtual-service-address:port] or [real-server-ip:port]
-u 说明虚拟服务器提供的是 udp 服务,此选项后面跟如下格式:
[virtual-service-address:port] or [real-server-ip:port]
-f  fwmark 说明是经过 iptables 标记过的服务类型
-s  此选项后面跟 LVS 使用的调度算法
有这样几个选项:rr|wrr|lc|wlc|lblc|lblcr|dh|sh
默认的调度算法是:wlc
-p  [timeout] 在某个 Real Server 上持续的服务时间。也就是说来自同一个用户的多次请求,将被同一个 Real Server 处理。此参数一般用于有动态请求的操作中,timeout 的默认值为 300 秒。例如:-p 600,表示持续服务时间为 600 秒。
-r 指定 Real Server 的 IP 地址,此选项后面跟如下格式:
 [real-server-ip:port]
-g (–gatewaying) 指定 LVS 的工作模式为直接路由模式(此模式是 LVS 默认工作模式)
-i (-ipip) 指定 LVS 的工作模式为隧道模式
-m (–masquerading) 指定 LVS 的工作模式为 NAT 模式
-w (–weight) weight 指定 Real Server 的权值
-c (–connection) 显示 LVS 目前的连接信息 如:ipvsadm -L -c
-L –timeout 显示“tcp tcpfin udp”的 timeout 值,如:ipvsadm -L –timeout
-L –daemon 显示同步守护进程状态,例如:ipvsadm -L –daemon
-L  –stats 显示统计信息,例如:ipvsadm -L –stats
-L  –rate 显示速率信息,例如:ipvsadm -L  –rate
-L  –sort 对虚拟服务器和真实服务器排序输出,例如:ipvsadm -L–sort
 

注释:
 在表 2 中,左边括弧中的内容为 ipvsadm 每个选项的长格式表示形式,linux 命令选项中,有长格式和短格式,短格式的选项用的比较多,实际应用中可以用括弧中的长格式替代短格式,例如,可以用“ipvsadm –clear”代替“ipvsadm -C”。
 

(2)举例
[root@localhost ~]# ipvsadm -A -t 192.168.60.200:80 -s rr -p 600
以上表示在内核的虚拟服务器列表中添加一条 192.168.60.200 的虚拟服务器记录,并且指定此虚拟服务器的服务端口为 80,然后指定此虚拟服务器的调度策略为轮询调度,并且在每个 real server 上的持续服务时间为 600 秒,即 10 分钟。
[root@localhost ~]# ipvsadm -A -t 192.168.60.188:21 -s wlc
以上表示在内核的虚拟服务器列表中又添加了一条 192.168.60.188 的虚拟服务器,此虚拟服务器的服务端口为 21,即 FTP 服务。使用的调度策略为 wlc,即加权最少链接算法。
[root@localhost ~]# ipvsadm -a -t 192.168.60.200:80 -r 192.168.60.132:80 –g
[root@localhost ~]# ipvsadm -a -t 192.168.60.200:80 -r 192.168.60.144:80 –g
以上两条设置表示在虚拟服务器 192.168.60.200 中添加两条新的 Real Server 记录,两个 Real Server 的 IP 分别为 192.168.60.132 和 192.168.60.144,参数“-g”指定了虚拟服务器的工作模式为直接路由模式,即 DR 模式。
这样设置完毕后,当用户访问 192.168.60.200 的 80 服务时,LVS 会根据设置的调度策略和路由模式将请求分配到 192.168.60.132 以及 192.168.60.144 的 80 端口。

一、LVS 简介
LVS 是 Linux Virtual Server 的简称,也就是 Linux 虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是 www.linuxvirtualserver.org。现在 LVS 已经是 Linux 标准内核的一部分,在 Linux2.4 内核以前,使用 LVS 时必须要重新编译内核以支持 LVS 功能模块,但是从 Linux2.4 内核以后,已经完全内置了 LVS 的各个功能模块,无需给内核打任何补丁,可以直接使用 LVS 提供的各种功能。
使用 LVS 技术要达到的目标是:通过 LVS 提供的负载均衡技术和 Linux 操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
LVS 自从 1998 年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用 LVS 技术实现高可伸缩的、高可用的网络服务,例如 WWW 服务、Cache 服务、DNS 服务、FTP 服务、MAIL 服务、视频 / 音频点播服务等等,有许多比较著名网站和组织都在使用 LVS 架设的集群系统,例 如:Linux 的门户网站(www.linux.com)、向 RealPlayer 提供音频视频服务而闻名的 Real 公司(www.real.com)、全球最大的开源网站(sourceforge.net)等。
二、LVS 体系结构
使用 LVS 架设的服务器集群系统有三个部分组成:最前端的负载均衡层,用 Load Balancer 表示,中间的服务器群组层,用 Server Array 表示,最底端的数据共享存储层,用 Shared Storage 表示,在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。
LVS 体系结构如图 1 所示:

Linux 负载均衡软件 LVS

图 1 LVS 的体系结构
 

下面对 LVS 的各个组成部分进行详细介绍:
l Load Balancer 层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS 模块就安装在 Director Server 上,而 Director 的主要作用类似于一个路由器,它含有完成 LVS 功能所设定的路由表,通过这些路由表把用户的请求分发给 Server Array 层的应用服务器(Real Server)上。同时,在 Director Server 上还要安装对 Real Server 服务的监控模块 Ldirectord,此模块用于监测各个 Real Server 服务的健康状况。在 Real Server 不可用时把它从 LVS 路由表中剔除,恢复时重新加入。
l Server Array 层:由一组实际运行应用服务的机器组成,Real Server 可以是 WEB 服务器、MAIL 服务器、FTP 服务器、DNS 服务器、视频服务器中的一个或者多个,每个 Real Server 之间通过高速的 LAN 或分布在各地的 WAN 相连接。在实际的应用中,Director Server 也可以同时兼任 Real Server 的角色。
l Shared Storage 层:是为所有 Real Server 提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成,为了提供内容的一致性,一般可以通过 NFS 网络文件系统共享数 据,但是 NFS 在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如 Red Hat 的 GFS 文件系统,Oracle 提供的 OCFS2 文件系统等。
从整个 LVS 结构可以看出,Director Server 是整个 LVS 的核心,目前,用于 Director Server 的操作系统只能是 Linux 和 FreeBSD,linux2.6 内核不用任何设置就可以支持 LVS 功能,而 FreeBSD 作为 DirectorServer 的应用还不是很多,性能也不是很好。
对于 Real Server,几乎可以是所有的系统平台,Linux、windows、Solaris、AIX、BSD 系列都能很好的支持。

三、LVS 集群的特点
3.1  IP 负载均衡与负载调度算法

1.IP 负载均衡技术
负载均衡技术有很多实现方案,有基于 DNS 域名轮流解析的方法、有基于客户端调度访问的方法、有基于应用层系统负载的调度方法,还有基于 IP 地址的调度方法,在这些负载调度算法中,执行效率最高的是 IP 负载均衡技术。
LVS 的 IP 负载均衡技术是通过 IPVS 模块来实现的,IPVS 是 LVS 集群系统的核心软件,它的主要作用是:安装在 Director Server 上,同时在 Director Server 上虚拟出一个 IP 地址,用户必须通过这个虚拟的 IP 地址访问服务。这个虚拟 IP 一般称为 LVS 的 VIP,即 Virtual IP。访问的请求首先经过 VIP 到达负载调度器,然后由负载调度器从 Real Server 列表中选取一个服务节点响应用户的请求。
当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的 Real Server 节点,而 Real Server 节点如何返回数据给用户,是 IPVS 实现的重点技术,IPVS 实现负载均衡机制有三种,分别是 NAT、TUN 和 DR,详述如下:
l VS/NAT:即(Virtual Server via Network Address Translation)
也就是网络地址翻译技术实现虚拟服务器,当用户请求到达调度器时,调度器将请求报文的目标地址(即虚拟 IP 地址)改写成选定的 Real Server 地址,同时报文的目标端口也改成选定的 Real Server 的相应端口,最后将报文请求发送到选定的 Real Server。在服务器端得到数据后,Real Server 返回数据给用户时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟 IP 地址和相应端口,然后把数据发送给用户,完成整个负载调度过 程。
可以看出,在 NAT 方式下,用户请求和响应报文都必须经过 DirectorServer 地址重写,当用户请求越来越多时,调度器的处理能力将称为瓶颈。
l VS/TUN:即(Virtual Server via IP Tunneling)
也就是 IP 隧道技术实现虚拟服务器。它的连接调度和管理与 VS/NAT 方式一样,只是它的报文转发方法不同,VS/TUN 方式中,调度器采用 IP 隧道技术 将用户请求转发到某个 Real Server,而这个 Real Server 将直接响应用户的请求,不再经过前端调度器,此外,对 Real Server 的地域位置没有要求,可以和 Director Server 位于同一个网段,也可以是独立的一个网络。因此,在 TUN 方式中,调度器将只处理用户的报文请求,集群系统的吞吐量大大提高。
l VS/DR:即(Virtual Server via Direct Routing)
也就是用直接路由技术实现虚拟服务器。它的连接调度和管理与 VS/NAT 和 VS/TUN 中的一样,但它的报文转发方法又有不同,VS/DR 通过改写请求报文的 MAC 地址,将请求发送到 Real Server,而 Real Server 将响应直接返回给客户,免去了 VS/TUN 中的 IP 隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求 DirectorServer 与 Real Server 都有一块网卡连在同一物理网段上。

2.负载调度算法
上面我们谈到,负载调度器是根据各个服务器的负载情况,动态地选择一台 Real Server 响应用户请求,那么动态选择是如何实现呢,其实也就是我们这里要说的负载调度算法,根据不同的网络服务需求和服务器配置,IPVS 实现了如下 八种负载调度算法,这里我们详细讲述最常用的四种调度算法,剩余的四种调度算法请参考其它资料。
l 轮叫调度(RoundRobin)
“轮叫”调度也叫 1:1 调度,调度器通过“轮叫”调度算法将外部用户请求按顺序 1:1 的分配到集群中的每个 Real Server 上,这种算法平等地对待每一台 Real Server,而不管服务器上实际的负载状况和连接状态。
l 加权轮叫调度(WeightedRound Robin)
“加权轮叫”调度算法是根据 Real Server 的不同处理能力来调度访问请求。可以对每台 Real Server 设置不同的调度权值,对于性能相对较好的 Real Server 可以设置较高的权值,而对于处理能力较弱的 Real Server,可以设置较低的权值,这样保证了处理能力强的服务器处理更多的访问流量。充分合理的利用了服务器资源。同时,调度器还可以自动查询 Real Server 的负载情况,并动态地调整其权值。
l 最少链接调度(LeastConnections)
“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。
l 加权最少链接调度(WeightedLeast Connections)
“加权最少链接调度”是“最少连接调度”的超集,每个服务节点可以用相应的权值表示其处理能力,而系统管理员可以动态的设置相应的权值,缺省权值为 1,加权最小连接调度在分配新连接请求时尽可能使服务节点的已建立连接数和其权值成正比。
其它四种调度算法分别为:基于局部性的最少链接(Locality-Based Least Connections)、带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)、目标地址散列(Destination Hashing)和源地址散列(Source Hashing),对于这四种调度算法的含义,本文不再讲述,如果想深入了解这其余四种调度策略的话,可以登陆 LVS 中文站点 zh.linuxvirtualserver.org,查阅更详细的信息。

3.2 高可用性
LVS 是一个基于内核级别的应用软件,因此具有很高的处理性能,用 LVS 构架的负载均衡集群系统具有优秀的处理能力,每个服务节点的故障不会影响整个系统的正常使用,同时又实现负载的合理均衡,使应用具有超高负荷的服务能力,可支持上百万个并发连接请求。如配置百兆网卡,采用 VS/TUN 或 VS/DR 调度 技术,整个集群系统的吞吐量可高达 1Gbits/s;如配置千兆网卡,则系统的最大吞吐量可接近 10Gbits/s。

3.3 高可靠性
LVS 负载均衡集群软件已经在企业、学校等行业得到了很好的普及应用,国内外很多大型的、关键性的 web 站点也都采用了 LVS 集群软件,所以它的可靠性在 实践中得到了很好的证实。有很多以 LVS 做的负载均衡系统,运行很长时间,从未做过重新启动。这些都说明了 LVS 的高稳定性和高可靠性。

3.4 适用环境
LVS 对前端 Director Server 目前仅支持 Linux 和 FreeBSD 系统,但是支持大多数的 TCP 和 UDP 协议,支持 TCP 协议的应用有:HTTP,HTTPS,FTP,SMTP,,POP3,IMAP4,PROXY,LDAP,SSMTP 等等。支持 UDP 协议的应用有:DNS,NTP,ICP,视频、音频流播放协议等。
LVS 对 Real Server 的操作系统没有任何限制,RealServer 可运行在任何支持 TCP/IP 的操作系统上,包括 Linux,各种 Unix(如 FreeBSD、SunSolaris、HP Unix 等),Mac/OS 和 Windows 等。

3.5 开源软件
LVS 集群软件是按 GPL(GNU Public License)许可证发行的自由软件,因此,使用者可以得到软件的源代码,并且可以根据自己的需要进行各种修改,但是修改必须是以 GPL 方式发行。

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2016-11/137435p2.htm

LVS 集群有 DR、TUN、NAT 三种配置模式,可以对 www 服务、FTP 服务、MAIL 服务等做负载均衡,下面通过搭建 www 服务的负载均衡实例,讲述基于 DR 模式的 LVS 集群配置。

一、Director Server 的配置
在 Director Server 上配置 LVS 负载均衡集群,有两种方法:
Ø 通过 ipvsadm 命令行进行配置
Ø 通过 RedHat 提供的工具 piranha 来配置 LVS

1、通过 ipvsadm 命令行方式配置 LVS

安装 IPVS 后,就可以配置 LVS 集群了,首先在 Director Server 上绑定一个虚拟 IP(也叫 VIP),此 IP 用于对外提供服务,执行如下命令:
[root@localhost ~]#ifconfig eth0:0 192.168.60.200 broadcast 192.168.60.200 \
 >netmask 255.255.255.255 up
此处在 eth0 设备上绑定了一个虚拟设备 eth0:0,同时设置了一个虚拟 IP 是 192.168.60.200,也就是上面我们规划的 IP 地址,然后指定广播地址也为 192.168.60.200,需要特别注意的是,这里的子网掩码为 255.255.255.255。
然后给设备 eth0:0 指定一条路由,执行如下指令:
[root@localhost ~]#route add -host 192.168.60.200 dev eth0:0
接着启用系统的包转发功能,从而使系统充当路由器,执行如下指令:
[root@localhost ~]#echo “1” >/proc/sys/net/ipv4/ip_forward
指令中,参数值为 1 时启用 ip 转发,为 0 时禁止 ip 转发。其实在 DR 模式中,开启系统的包转发功能不是必须的,而在 NAT 模式下此操作是必须的。
然后开始配置 ipvs,执行如下操作:
[root@localhost ~]#ipvsadm -C
[root@localhost ~]#ipvsadm -A -t 192.168.60.200:80 -s rr -p 600
[root@localhost ~]#ipvsadm -a -t 192.168.60.200:80 -r 192.168.60.132:80 -g
[root@localhost ~]#ipvsadm -a -t 192.168.60.200:80 -r 192.168.60.144:80 -g
上面操作中,第一行是清除内核虚拟服务器列表中的所有记录,第二行是添加一条新的虚拟 IP 记录。这个新的 IP 是 192.168.60.200,同时指定持 续服务时间为 600 秒。第三、四行是在新加虚拟 IP 记录中添加两条新的 Real Server 记录,并且指定 LVS 的工作模式为直接路由模式。
最后,启动 LVS 服务,执行如下操作:
[root@localhost ~]#ipvsadm
这样,LVS 在 Director Server 上的配置就完成了。
为了管理和配置的方便,可以将上面的操作写出一个脚本文件,脚本内容如下:
#!/bin/bash
VIP=192.168.60.200
RIP1=192.168.60.132
RIP2=192.168.60.144
GW=192.168.60.1
# set the Virtual IP Address
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:0
echo “1” >/proc/sys/net/ipv4/ip_forward
#Clear IPVS table
/sbin/ipvsadm -C
#set LVS
/sbin/ipvsadm -A -t $VIP:80 -s rr -p 600
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
#Run LVS
/sbin/ipvsadm
#end
也可以写成可启动与停止的服务脚本,脚本内容如下:
#!/bin/sh
# description: Start LVS of Director server
VIP=192.168.60.200
RIP1=192.168.60.132
RIP2=192.168.60.144
./etc/rc.d/init.d/functions
case “$1” in
    start)
        echo ” start LVS of DirectorServer”
# set the Virtual  IP Address and sysctl parameter
 /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
      echo “1”>/proc/sys/net/ipv4/ip_forward
#Clear IPVS table
      /sbin/ipvsadm -C
#set LVS
/sbin/ipvsadm -A -t $VIP:80 -s rr -p 600
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
#Run LVS
      /sbin/ipvsadm
      ;;
    stop)
        echo “close LVSDirectorserver”
        echo “0”>/proc/sys/net/ipv4/ip_forward
        /sbin/ipvsadm -C
        /sbin/ifconfig eth0:0 down
        ;;
    *)
        echo “Usage: $0{start|stop}”
        exit 1
esac
将此脚本命名为 lvsDR 文件,然后把文件放到 /etc/init.d 下,执行:
[root@localhost ~]#chomd 755 /etc/init.d/lvsDR
最后可以通过下面命令启动或停止 LVS 服务:
service lvsDR {start|stop}
到此为止,命令行方式配置 Director Server 完毕。

2、通过 Redhat 提供的工具 piranha 来配置 LVS

 Piranha 是 REDHAT 提供的一个基于 Web 的 LVS 配置软件,可以省去手工配置 LVS 的繁琐工作,同时,也可单独 提供 cluster 功能,例如,可以通过 Piranha 激活 Director Server 的后备主机,也就是配置 Director Server 的双机热备功能。
 Piranha 工具的安装非常简单,下载 Piranha 的 rpm 包,进行安装即可:
[root@localhost ~]#rpm –ivh piranha-0.8.2-1.i386.rpm
Piranha 安装完毕后, 会产生 /etc/sysconfig/ha/lvs.cf 文件,默认此文件是空的,可以通过 Piranha 提供的 web 界面配置此文件,也可以直接手动编辑此文件,编辑好的 lvs.cf 文件内容类似如下,注意,“#”号后面的内容为注释。
[root@localhost ~]# more /etc/sysconfig/ha/lvs.cf
serial_no =18            #序号。
primary = 192.168.60.56    #指定主 DirectorServer 的真实 IP 地址,是相对与有备用的 Director Server 而言的,也就是给 Director Server 做 HA Cluster。
service =lvs              #指定双机的服务名。
backup_active = 0        #是否激活备用 Director Server。“0”表示不激活,“1”表示激活。
backup =0.0.0.0            #这里指定备用 Director Server 的真实 IP 地址,如果没有备用 Director Server,可以用“0.0.0.0”代替。
heartbeat = 0            #是否开启心跳,1 表示开启,0 表示不开启。
heartbeat_port = 539      #指定心跳的 UDP 通信端口。
keepalive =5              #心跳间隔时间,单位是秒。
deadtime =10              #如果主 Director Server 在 deadtime(秒)后没有响应,那么备份 Director
Server 就会接管主 Director Server 的服务。
network =direct            #指定 LVS 的工作模式,direct 表示 DR 模式,nat 表示 NAT 模式,tunnel 表示 TUNL 模式。
debug_level = NONE          #定义 debug 调试信息级别。
virtual www.gaojf.com{#指定虚拟服务的名称。
active = 1        #是否激活此服务。
address = 192.168.60.200 eth0:0  #虚拟服务绑定的虚拟 IP 以及网络设备名。
port =80                  #虚拟服务的端口。
send = “GET / HTTP/1.0\r\n\r\n”  #给 realserver 发送的验证字符串。
expect =”HTTP”            #服务器正常运行时应该返回的文本应答信息,用来判断 real server 是否工作正常。
use_regex =0              # expect 选项中是否使用正则表达式,0 表示不使用,1 表示使用。
load_monitor = none        #LVS 中的 Director Server 能够使用 rup 或 ruptime 来监视各个 real server 的负载状态。该选项有 3 个可选值,rup、ruptime 和 none,如果选择 rup,每个 realserver 就必须运行 rstatd 服务。如果选择了 ruptime,每个 real server 就必须运行 rwhod 服务。
scheduler =rr            #指定 LVS 的调度算法。
protocol =tcp            #虚拟服务使用的协议类型。
timeout =6                #real server 失效后从 lvs 路由列表中移除失效 realserver 所必须经过的时间,以秒为单位。
reentry =15              #某个 real server 被移除后,重新加入 lvs 路由列表中所必须经过的时间,以秒为单位。
quiesce_server = 0          #如果此选项为 1. 那么当某个新的节点加入集群时,最少连接数会被重设
为零,因此 LVS 会发送大量请求到此服务节点,造成新的节点服务阻塞,
建议设置为 0。
server RS1{#指定 real server 服务名。
address = 192.168.60.132    #指定 realserver 的 IP 地址。
active =1                #是否激活此 real server 服务。
weight =1                  #指定此 real server 的权值,是个整数值,权值是相对于所有 real server 节点而言的,权值高的 real server 处理负载的性能相对较强。
}
server RS2 {
address = 192.168.60.144
active = 1
weight = 1
}
}
编辑完成, 然后启动 pulse 服务, 即启动 lvs 服务
[root@localhost ~]#service pulse start
同理,此种方式下也要启用系统的包转发功能:
[root@localhost ~]#echo “1” >/proc/sys/net/ipv4/ip_forward
到此为止,Piranha 工具方式配置 DirectorServer 完毕。

二、Real server 的配置

在 lvs 的 DR 和 TUn 模式下,用户的访问请求到达真实服务器后,是直接返回给用户的,而不再经过前端的 DirectorServer,因此,就需要在每个 Real server 节点上增加虚拟的 VIP 地址,这样数据才能直接返回给用户,增加 VIP 地址的操作可以通过创建脚本的方式来实现,创建文件 /etc /init.d/lvsrs,脚本内容如下:
#!/bin/bash
VIP=192.168.60.200
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
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
sysctl -p
#end
此操作是在回环设备上绑定了一个虚拟 IP 地址,并设定其子网掩码为 255.255.255.255,与 Director Server 上的虚拟 IP 保持互通,然后禁止了本机的 ARP 请求。

上面脚本也可以写成可启动与停止的服务脚本,内容如下:
[root@localhost ~]#more /etc/init.d/lvsrs
#!/bin/bash
#description : Start Real Server
VIP=192.168.60.200
./etc/rc.d/init.d/functions
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 “close LVS Directorserver”
        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
然后,修改 lvsrs 有可执行权限:
[root@localhost ~]#chomd 755 /etc/init.d/lvsrs
最后,可以通过下面命令启动或关闭 lvsrs
service lvsrs {start|stop}
由于虚拟 ip,也就是上面的 VIP 地址,是 Director Server 和所有的 Real server 共享的,如果有 ARP 请求 VIP 地址时,DirectorServer 与所有 Real server 都做应答的话,就出现问题了,因此,需要禁止 Real server 响应 ARP 请求。而 lvsrs 脚本的作用就是使 Real Server 不响应 arp 请求。
对于 2.4 以下低版本,在 Real Server 上要安装 ARP hidden 内核补丁, 幸运的是,在 2.6 内核中通过调整内核参数即可忽略 ARP 广播回应。

三、在 Director 上配置冗余策略 Ldirectord

Ldirectord 的作用是监测 Real Server,当 Real Server 失效时,把它从虚拟服务器列表中删除,恢复时重新添加到列表,在前面文章介绍 heartbeat 时默认已经安装了 Ldirectord,因 此。这里只需进行配置即可。Ldirectord 的配置文件是 /etc/ha.d/ldirectord.cf。
下面是需要配置的选项,注意,“#”号后面的内容为注释:
# Global Directives
checktimeout=20          #判定 real server 出错的时间间隔。
checkinterval=10          #指定 ldirectord 在两次检查之间的间隔时间。
fallback=127.0.0.1:80    #当所有的 realserver 节点不能工作时,web 服务重定向的地址。
autoreload=yes          #是否自动重载配置文件,选 yes 时,配置文件发生变化,自动载入配置信息。
logfile=”/var/log/ldirectord.log”  #设定 ldirectord 日志输出文件路径。
quiescent=no            #当选择 no 时,如果一个节点在 checktimeout 设置的时间周期内没有响应,ldirectord 将会从 LVS 的路由表中直接移除 real server,此时,将中断现有的客户端连接,并使 LVS 丢掉所有的连接跟踪记录和持续连接模板,如果选择为 yes,当某个 real server 失效时,ldirectord 将失效节点的权值设置为 0,新的连接将不能到达,但是并不从 LVS 路由表中清除此节点,同时,连接跟踪记录和程 序连接模板仍然保留在 Director 上。
注意:以上几行为 ldirectord.cf 文件的“全局”设置,它们可以应用到下面多个虚拟主机,下面是每个虚拟主机的配置。
# Sample for an http virtual service
virtual=192.168.60.200:80        #指定虚拟的 IP 地址和端口号,注意,在 virtual 行后面的行必
须缩进 4 个空格或以一个 tab 字符进行标记。
real=192.168.60.132:80 gate      #指定 Real Server 服务器地址和端口,同时设定 LVS 工作模式,
用 gate 表示 DR 模式,ipip 表示 TUNL 模式,masq 表示 NAT 模式。
real=192.168.60.144:80 gate
fallback=127.0.0.1:80 gate     
service=http                    #指定服务的类型,这里是对 http 服务做负载均衡。
request=”index.html”            #ldirectord 将根据指定的 Real Server 地址,结合该选项给出
的请求路径,发送访问请求,检查 Real Server 上的服务是否正
常运行,确保这里给出的页面地址是可访问的,不然 ldirectord
会误认为此节点已经失效,发生错误监控现象。
receive=”TestPage”            #指定请求和应答字串。
scheduler=rr                    #指定调度算法,这里是 rr(轮叫)算法。
protocol=tcp                    #指定协议的类型,LVS 支持 TCP 和 UDP 协议。
checktype=negotiate            #指定 Ldirectord 的检测类型,默认为 negotiate。
checkport=80                  #指定监控的端口号。
virtualhost=www.gaojf.com        #虚拟服务器的名称,随便指定。
配置完毕,就可以执行如下命令启动或关闭 ldirectord 服务
/etc/init.d/ldirectord {start|stop}
Ldirectord 的核心作用是监控 Real Server 节点状态,同时,它还能调用 ipvsadm 自动创建 LVS 路由表,这点从 ldirectord.cf 中可以看出,
这里需要说明的是,ldirectord 和 Piranha 都具有监控 Real Server 的功能,如果要通过 ldirectord 监控节点状态,只需启动 ldirectord 服务,整个集群系统就可以运行起来,而无需执行上面我们 配置的 LVS 脚本,因为 ldirectord 会自动调用 ipvsadm 创建 LVS 路由表,而我们上面讲述的利用 ipvsadm 命令行方式配置 LVS,是为 了让读者能更深入的了解 ipvsadm 的实现细节和实现机制。
如果是通过 Piranha 工具配置 LVS,就无需使用 ldirectord,Piranha 工具对应的系统进程是 pluse,此进程也会自动调用 ipvsadm 创建 LVS 路由表,同时会利用自身的 nanny 守护进程监控 real server 的状态!

一、启动 LVS 集群服务
LVS 负载均衡管理和使用有两种方式,一种是以 ipvsadm 命令行脚步与 ldirectord 监控方式,一种是以 Piranha 工具进行管理和使用。下面分别介绍。

1、利用 ipvsadm 命令行脚步与 ldirectord 监控方式管理 LVS
在一切配置完毕之后,依次执行下面的操作启动 LVS 集群服务。
首先,启动每个 real server 节点的服务:
[root@localhost ~]# /etc/init.d/lvsrs  start
 start LVS  of  REALServer
然后,在 Director Server 启动 ldirectord 服务:
[root@localhost ~]# /etc/init.d/ldirectord  start
Startingldirectord                                      [OK]
此时查看 ldirectord 输出日志信息如下:
ldirectord|2561] Invoking ldirectord invoked as: /usr/sbin/ldirectord start
ldirectord|2561] Starting Linux Director v1.186 as daemon
ldirectord|2563] Added virtual server: 192.168.60.200:80
ldirectord|2563] Added fallback server: 127.0.0.1:80 (192.168.60.200:80)(Weight set to 1)
ldirectord|2563] Added real server: 192.168.60.132:80 (192.168.60.200:80)(Weight set to 1)
ldirectord|2563] Deleted fallback server: 127.0.0.1:80 (192.168.60.200:80)
ldirectord|2563] Added real server: 192.168.60.144:80 (192.168.60.200:80)(Weight set to 1)
从日志可以看出,ldirectord 首先加载了一个虚拟 IP 的 80 端口,然后加载了两个 real server 节点的 80 端口以及 Director Server 本机的 80 端口,同时将 real server 两个节点的权值设置为 1,由于两个节点均可用,最后将 Director Server 本机的 80 端口从 LVS 路由表中删除。
接着,在 Director Server 启动 lvsDR 主服务:
[root@xa_web1 ~]# /etc/init.d/lvsDR  start
 start LVS  of DirectorServer
IP Virtual Server version 1.2.0 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  ->RemoteAddress:Port        Forward  Weight  ActiveConn InActConn
TCP  192.168.60.200:http rr persistent 600
  ->192.168.60.132:http        Route    1        3        22       
  ->192.168.60.144:http        Route    1        9          22
到此为止,LVS 负载均衡集群系统已经开始运行。

2、利用 Piranha 工具管理 LVS
在这种方式下,启动 LVS 集群很简单,只需执行如下命令即可:
/etc/init.d/pulse  start
此时查看 pulse 服务的系统日志信息如下:
[root@localhost ~]# tail -f /var/log/messages
Nov 22 15:52:55 lvs lvs[7031]: starting virtual service www.gaojf.comactive: 80
Nov 22 15:52:55 lvs lvs[7031]: create_monitor for www.gaojf.com/RS1running as pid 7039
Nov 22 15:52:55 lvs nanny[7039]: starting LVS client monitor for192.168.60.200:80
Nov 22 15:52:55 lvs lvs[7031]: create_monitor for www.gaojf.com/RS2running as pid 7040
Nov 22 15:52:55 lvs nanny[7039]: making 192.168.60.132:80 available
Nov 22 15:52:55 lvs nanny[7040]: starting LVS client monitor for192.168.60.200:80
Nov 22 15:52:55 lvs nanny[7040]: making 192.168.60.144:80 available
从日志可以看出,pulse 服务启动了一个 www.gaojf.com 的虚拟服务,同时加载了 RS1 和 RS2 两个节点,然后检测到 RS1 和 RS2 两个节点对应的 80 端口可用,最后启动了虚拟 IP 的 80 端口,对外提供服务。
日志中“www.gaojf.com”、“RS1”、“RS2”等标识均在 Piranha 的配置文件 /etc/sysconfig/ha/lvs.cf 中定义。
Pulse 服务启动完毕,通过“ps –ef”命令可以看到有如下进程在运行:
[root@localhost ~]#  ps -ef|grep nanny
/usr/sbin/nanny -c -h 192.168.60.132 -p 80 -s GET / HTTP/1.0\r\n\r\n -x HTTP -a15 -I /
/usr/sbin/nanny -c -h 192.168.60.144 -p 80 -s GET / HTTP/1.0\r\n\r\n -x HTTP -a15 -I /
其中,nanny 就是 Pulse 服务的守护进程,用于监控 LVS 服务节点的运行状态,类似与 ldirectord 的节点监控功能。

二、测试负载均衡
这里假定两个 real server 节点配置 www 服务的网页文件根目录均为 /webdata/www 目录,然后分别执行如下操作:
在 real server1 执行:
echo “This is real server1”  /webdata/www/index.html
 在 real server2 执行:
echo “This is real server2” /webdata/www/index.html
接着打开浏览器,访问 http://192.168.60.200 这个地址,然后不断刷新此页面,如果能分别看到“This is real server1”和“This is realserver2”就表明 LVS 正常工作了。

三、测试故障切换功能
故障切换是测试当某个节点出现故障后,监控模块是否能及时发现,然后屏蔽故障节点,同时将服务转移到正常节点来执行,下面分别讲述用 ldirectord 监控时的故障切换过程和用 nanny 监控时的故障切换情形。

1、利用 ldirectord 监控 LVS 的故障切换
这里假定停掉 real server1 节点的 www 服务,然后观察 ldirectord 的日志变化,应该能看到类似如下的信息:
ldirectord|2614] Deleted real server: 192.168.60.132:80 (192.168.60.200:80)
由此可知,ldirectord 监控到了 192.168.60.132 这个节点的服务出现故障,然后将此节点从 LVS 路由表中删除。
此时继续通过浏览器访问 http://192.168.60.200,访问不受任何影响,但是仅仅显示“This is real server2”信息,这是由于 real server1 出现问题,被 ldirectord 屏蔽,整个 LVS 集群只有 real server2 在提供服务。
上面的日志输出信息是由于在 ldirectord.cf 中设置了“quiescent=no”,如果设置为“quiescent=yes”日志输出信息变为如下:
ldirectord|32454] Quiescent real server:192.168.60.132:80 (192.168.60.200:80)(Weight set to 0)
这段日志输出是将故障节点 192.168.60.132 的权值设置为 0,而不从 LVS 路由表中删除这个主机,此时已经连接的客户端将出现无法访问现象,但是新的连接将不会分配到此节点。
如果重新启动 Real server1 的服务,ldirectord 将能自动检测到节点已经激活,重新将此节点加入 LVS 路由表中,ldirectord 会在日志中输出这些信息:
ldirectord|2614] Added real server: 192.168.60.132:80 (192.168.60.200:80)(Weight set to 1)
2、利用 nanny 监控 LVS 的故障切换
 同样,这里也假定停掉 real server1 节点的 www 服务,然后观察 pluse 服务的日志信息,日志输出如下:
Nov 22 15:54:01 lvs nanny[7039]: shutting down 192.168.60.132:80 due toconnection failure
可以看出,当停掉 real server1 的服务后,nanny 守护进程监控到此节点故障,然后关闭了此节点的连接服务。
现在重启启动 real server1 节点的服务,然后观察 pluse 服务的日志输出:
Nov 22 16:49:41 lvs nanny[7158]: making 192.168.60.132:80 available
nanny 守护进程在设定的检测时间内自动检测到 real server1 服务已经激活,重新使此节点变得可以连接。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/137435.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计25907字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中