如何配置Web服务器实现负载均衡

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何配置Web服务器实现负载均衡相关的知识,希望对你有一定的参考价值。

网络的负载均衡是一种动态均衡技术,通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理均衡地分配出去。这种技术基于现有网络结构,提供了一种扩展服务器带宽和增加服务器吞吐量的廉价有效的方法,加强了网络数据处理能力,提高了网络的灵活性和可用性。

以四台服务器为例实现负载均衡:

安装配置LVS

1. 安装前准备:

(1)首先说明,LVS并不要求集群中的服务器规格划一,相反,可以根据服务器的不同配置和负载状况,调整负载分配策略,充分利用集群环境中的每一台服务器。如下表:

Srv Eth0 Eth0:0 Eth1 Eth1:0

vs1 10.0.0.1 10.0.0.2 192.168.10.1 192.168.10.254

vsbak 10.0.0.3 192.168.10.102

real1 192.168.10.100

real2 192.168.10.101

其中,10.0.0.2是允许用户访问的IP。

(2)这4台服务器中,vs1作为虚拟服务器(即负载平衡服务器),负责将用户的访问请求转发到集群内部的real1,real2,然后由real1,real2分别处理。
Client为客户端测试机器,可以为任意操作系统。

(3)所有OS为redhat6.2,其中vs1 和vsbak 的核心是2.2.19, 而且patch过ipvs的包, 所有real
server的Subnet mask 都是24位, vs1和vsbak 的10.0.0. 网段是24 位。

2.理解LVS中的相关术语

(1) ipvsadm :ipvsadm是LVS的一个用户界面。在负载均衡器上编译、安装ipvsadm。

(2) 调度算法: LVS的负载均衡器有以下几种调度规则:Round-robin,简称rr;weighted
Round-robin,简称wrr;每个新的连接被轮流指派到每个物理服务器。Least-connected,简称lc;weighted
Least-connected,简称wlc,每个新的连接被分配到负担最小的服务器。

(3) Persistent client
connection,简称pcc,(持续的客户端连接,内核2.2.10版以后才支持)。所有来自同一个IP的客户端将一直连接到同一个物理服务器。超时时间被设置为360秒。Pcc是为https和cookie服务设置的。在这处调度规则下,第一次连接后,所有以后来自相同客户端的连接(包括来自其它端口)将会发送到相同的物理服务器。但这也会带来一个问题,因为大约有25%的Internet
可能具有相同的IP地址。

(4) Persistent port
connection调度算法:在内核2.2.12版以后,pcc功能已从一个调度算法(你可以选择不同的调度算法:rr、wrr、lc、wlc、pcc)演变成为了一个开关选项(你可以让rr、
wrr、lc、wlc具备pcc的属性)。在设置时,如果你没有选择调度算法时,ipvsadm将默认为wlc算法。 在Persistent port
connection(ppc)算法下,连接的指派是基于端口的,例如,来自相同终端的80端口与443端口的请求,将被分配到不同的物理服务器上。不幸的是,如果你需要在的网站上采用cookies时将出问题,因为http是使用80端口,然而cookies需要使用443端口,这种方法下,很可能会出现cookies不正常的情况。

(5)Load Node Feature of Linux Director:让Load balancer 也可以处理users 请求。

(6)IPVS connection synchronization。

(7)ARP Problem of LVS/TUN and LVS/DR:这个问题只在LVS/DR,LVS/TUN 时存在。

3. 配置实例

(1) 需要的软件包和包的安装:

I. piranha-gui-0.4.12-2*.rpm (GUI接口cluster设定工具);

II. piranha-0.4.12-2*.rpm;

III. ipchains-1.3.9-6lp*.rpm (架设NAT)。

取得套件或mount到光盘,进入RPMS目录进行安装:

# rpm -Uvh piranha*

# rpm -Uvh ipchains*

(2) real server群:

真正提供服务的server(如web
server),在NAT形式下是以内部虚拟网域的形式,设定如同一般虚拟网域中Client端使用网域:192.168.10.0/24
架设方式同一般使用虚拟IP之局域网络。

a. 设网卡IP

real1 :192.168.10.100/24

real2 :192.168.10.101/24

b.每台server均将default gateway指向192.168.10.254。
192.168.10.254为该网域唯一对外之信道,设定在virtual server上,使该网域进出均需通过virtual server 。

c.每台server均开启httpd功能供web server服务,可以在各real server上放置不同内容之网页,可由浏览器观察其对各real
server读取网页的情形。

d.每台server都开启rstatd、sshd、rwalld、ruser、rsh、rsync,并且从Vserver上面拿到相同的lvs.conf文件。

(3) virtual server:

作用在导引封包的对外主机,专职负责封包的转送,不提供服务,但因为在NAT型式下必须对进出封包进行改写,所以负担亦重。

a.IP设置:

对外eth0:IP:10.0.0.1 eth0:0 :10.0.0.2

对内eth1:192.168.10.1 eth1:0 :192.168.10.254

NAT形式下仅virtual server有真实IP,real server群则为透过virtual server.

b.设定NAT功能

# echo 1 >; /proc/sys/net/ipv4/ip_forward

# echo 1 >; /proc/sys/net/ipv4/ip_always_defrag

# ipchains -P forward MASQ

c.设定piranha 进入X-window中 (也可以直接编辑/etc/lvs.cf )

a).执行面板系统piranha

b).设定“整体配置”(Global Settings) 主LVS服务器主机IP:10.0.0.2, 选定网络地址翻译(预设) NAT路径名称:
192.168.10.254, NAT 路径装置: eth1:0

c).设定虚拟服务器(Virtual Servers) 添加编辑虚拟服务器部分:(Virtual
Server)名称:(任意取名);应用:http;协议: tcp;连接:80;地址:10.0..0.2;装置:eth0:0; 重入时间:180
(预设);服务延时:10 (预设);加载监控工具:ruptime (预设);调度策略:Weighted least-connections; 持续性:0
(预设); 持续性屏蔽: 255.255.255.255 (预设); 按下激活:实时服务器部分:(Real Servers); 添加编辑:名字:(任意取名);
地址: 192.168.10.100; 权重:1 (预设) 按下激活

另一架real server同上,地址:192.168.10.101。

d). 控制/监控(Controls/Monitoring)
控制:piranha功能的激活与停止,上述内容设定完成后即可按开始键激活piranha.监控器:显示ipvsadm设定之routing table内容
可立即更新或定时更新。

(4)备援主机的设定(HA)

单一virtual server的cluster架构virtual server 负担较大,提供另一主机担任备援,可避免virtual
server的故障而使对外服务工作终止;备份主机随时处于预备状态与virtual server相互侦测

a.备份主机:

eth0: IP 10.0.0.3

eth1: IP 192.168.10.102 同样需安装piranha,ipvsadm,ipchains等套件

b.开启NAT功能(同上面所述)。

c.在virtual server(10.0.0.2)主机上设定。

a).执行piranha冗余度 ;

b).按下“激活冗余度”;

冗余LVS服务器IP: 10.0.0.3;HEARTBEAT间隔(秒数): 2 (预设)

假定在…秒后进入DEAD状态: 5 (预设); HEARTBEAT连接埠: 539 (预设)

c).按下“套用”;

d).至“控制/监控”页,按下“在当前执行层添加PULSE DEAMON” ,按下“开始”;

e).在监控器按下“自动更新”,这样可由窗口中看到ipvsadm所设定的routing table,并且动态显示real
server联机情形,若real server故障,该主机亦会从监视窗口中消失。

d.激活备份主机之pulse daemon (执行# /etc/rc.d/init.d/pulse start)。

至此,HA功能已经激活,备份主机及virtual server由pulse daemon定时相互探询,一但virtual
server故障,备份主机立刻激活代替;至virtual server 正常上线后随即将工作交还virtual server。

LVS测试

经过了上面的配置步骤,现在可以测试LVS了,步骤如下:

1. 分别在vs1,real1,real2上运行/etc/lvs/rc.lvs_dr。注意,real1,real2上面的/etc/lvs
目录是vs2输出的。如果您的NFS配置没有成功,也可以把vs1上/etc/lvs/rc.lvs_dr复制到real1,real2上,然后分别运行。确保real1,real2上面的apache已经启动并且允许telnet。

2. 测试Telnet:从client运行telnet 10.0.0.2,
如果登录后看到如下输出就说明集群已经开始工作了:(假设以guest用户身份登录)

[guest@real1 guest]$——说明已经登录到服务器real1上。

再开启一个telnet窗口,登录后会发现系统提示变为:

[guest@real2 guest]$——说明已经登录到服务器real2上。

3. 测试http:从client运行iexplore http://10.0.0.2

因为在real1 和real2 上面的测试页不同,所以登录几次之后,显示出的页面也会有所不同,这样说明real server 已经在正常工作了。
参考技术A 不建议windows使用软件来做负载均衡,linux因为开源还可以考虑。 如果应用真的需要还是用硬件负载均衡设备来做吧。本回答被提问者采纳

使用LVS负载均衡搭建web群集的原理及安装配置详解

一、负载均衡LVS基本介绍

LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器。这是一个由章文嵩博士发起的一个开源项目,它的官方网站是 http://www.linuxvirtualserver.org。 LVS是Linux内核标准的一部分。LVS是一个实现负载均衡集群的开源软件项目,通过 LVS 的负载均衡技术和 Linux操作系统可以实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。LVS架构从逻辑上可分为调度层、Server集群层和共享存储。LVS实际上相当于基于IP地址的虚拟化应用。

二、LVS的组成

LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

  1. ipvs(ip virtual server):工作在内核空间,是真正生效实现调度的代码。
  2. ipvsadm:工作在用户空间,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

三、LVS相关术语

  1. DS:Director Server, 指的是前端负载均衡器节点。
  2. RS:Real Server, 后端真实的工作服务器。
  3. VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
  4. DIP:Director Server IP, 前端负载均衡器IP地址,主要用于和内部主机通信。
  5. RIP:Real Server IP, 后端服务器的IP地址。
  6. CIP:Client IP, 访问客户端的IP地址

四、LVS的工作模式介绍

LVS负载均衡常见的有三种工作模式,分别是地址转换(简称NAT模式)、IP隧道(简称TUN模式)和直接路由(简称DR模式),其实企业中最常用的是 DR 实现方式,而 NAT 配置上比较简单和方便,下面总结 DR 和 NAT 原理和特点:

1. LVS-NAT模式

(1) LVS-NAT原理

类似于防火墙的私有网络结构,Director Server作为所有服务器节点的网关,,即作为客户端的访问入口,也是各节点回应客户端的访问出口,其外网地址作为整个群集的VIP地址,其内网地址与后端服务器Real Server在同一个物理网络,Real Server必须使用私有IP地址。
技术分享图片

数据包流向分析

  • 用户发送请求到Director Server,请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。

  • 内核空间判断数据包的目标IP是本机,此时IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,重新封装数据包(源IP为CIP,目标IP为RIP),然后选路将数据包发送给Real Server。

  • Real Server比对发现目标IP是本机的IP,重新封装报文(源IP为RIP,目标IP为CIP)发回给Director Server。

  • Director Server重新封装数据包,将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP。

(2) LVS-NAT模型的特点

  • RS必须使用私有IP地址,网关指向DIP。

  • DIP与RIP必须在同一网段内。

  • DS作为所有服务器节点的网关,也就是说请求和响应报文都需要经过Director Server。

  • 支持端口映射

  • 高负载场景中,Director Server压力比较大,易成为性能瓶颈。

2. LVS-DR模式

(1) LVS-DR原理

Director Server作为群集的访问入口,但不作为网关使用,后端服务器池中的Real Server与Director Server在同一个物理网络中,发送给客户机的数据包不需要经过Director Server。为了响应对整个群集的访问,DS与RS都需要配置有VIP地址。
技术分享图片
数据包流向分析

  • 用户发送请求到Director Server,请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。

  • 由于DS和RS在同一个网络中,所以是通过二层数据链路层来传输。
  • 内核空间判断数据包的目标IP是本机IP,此时IPVS比对数据包请求的服务是否为集群服务,若是,重新封装数据包,修改源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址,源IP地址与目标IP地址没有改变,然后将数据包发送给Real Server.
  • RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文,重新封装报文(源IP地址为VIP,目标IP为CIP),将响应报文通过lo接口传送给eth0网卡然后向外发出。
  • RS直接将响应报文传送到客户端。

(2) LVS-DR模型的特点

  • RS和DS必须在同一个物理网络中。
  • RS可以使用私有地址,也可以使用公网地址,如果使用公网地址,可以通过互联网对RIP进行直接访问。
  • 所有的请求报文经由Director。 Server,但响应报文必须不能经过Director Server。
  • RS的网关绝不允许指向DIP(不允许数据包经过director)。
  • RS上的lo接口配置VIP的IP地址。

LVS-DR模式需要注意的是:
保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS。

解决方案是:修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。

  • arp_ignore=1表示系统只响应目的IP为本地IP的ARP请求。

  • arp_announce=2表示系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址。

五、LVS的负载调度算法

最常用的有四种;轮询(rr)、加权轮询(wrr)、最少连接(lc)和加权最少连接(wlc)。

  • 轮询(rr):将收到的访问请求按照顺序轮流调度到不同的服务器上,不管后端真实服务器的实际连接数和系统负载。
  • 加权轮询(wrr):给RS设置权重,权重越高,那么分发的请求数越多,权重的取值范围0–100。根据每台服务器的性能,给每台服务器添加权值,如果RS1的权值为1,RS2的权值为2,那么调度到RS2的请求会是RS1的2倍。权值越高的服务器,处理的请求越多。这种算法是对rr算法的一种优化和补充。
  • 最少连接(lc):根据后端RS的连接数来决定把请求分发给谁,比RS1连接数比RS2连接数少,那么请求就优先发给RS1。
  • 加权最少连接(wlc):根据后端RS的权重和连接数来决定把请求分发给谁,权重较高,连接数少的RS会优先处理请求。

六、LVS的共享存储服务器

为后端真实服务器提供稳定、一致的文件存取服务,在Linux/Unix环境中,共享存储可以使用NAS设备或者提供NFS(网络文件系统)共享服务的专用服务器。一般放在私有网络中。

七、实现LVS的NAT模式

1.实验环境

IP地址规划

客户端访问服务的请求IP地址:VIP 12.0.0.1

Server IP 系统
Director Server DIP 192.168.10.1 CentOS7
NFS Server 192.168.10.50 RedHat6
Real Server1 RIP 192.168.10.51 CentOS7
Real Server2 RIP 192.168.10.52 CentOS7

在配置的Director的服务器上添加两块网卡,详细步骤可参考DNS分离解析这篇博文有介绍,设置外网ens37为VIP,内网ens33为DIP,把两个 real server 的网关设置为 Director 的内网 iP即DIP。

在虚拟机的配置中DIP网络连接方式设置为仅主机模式,Real Server也配置为仅主机模式。
技术分享图片

2.安装和配置

yum安装软件

方法一:如果虚拟机网络是仅主机模式,没有网络,可以本地创建yum仓库,然后进行yum安装。

方法二:如果虚拟机网络是NAT模式,有网络,可以在线yum安装。

(1) 配置NFS服务器
yum install nfs-utils -y    #7系统版本需要安装nfs工具包
service rpcbind start  
service nfs restart
#创建共享目录
mkdir /opt/wwwroot1
mkdir /opt/wwwroot2
#给共享目录写入权限
chmod 777 /opt/wwwroot1
chmod 777 /opt/wwwroot2
#编辑配置文件
vim /etc/exports
/opt/wwwroot1 192.168.10.0/24(rw,sync) 
/opt/wwwroot2 192.168.10.0/24(rw,sync) 
#发布共享
exportfs -rv
#关闭防火墙
service iptables stop
(2) 配置两个real server服务器
#安装nfs客户端
yum install nfs-utils -y 
systemctl start rpcbind.service  
systemctl start nfs.service
#查看nfs挂载
showmount -e 192.168.10.50
#挂载nfs

#Real Server1挂载nfs

#法一:直接挂载
mount.nfs 192.168.10.50:/opt/wwwroot1 /var/www/html

#法二:修改fatab文件挂载
vim /etc/fstab
  192.168.10.50:/opt/wwwroot1 /var/www/html nfs defaults,_netdev  0 0

#Real Server2挂载nfs

方法同Real Server1,将挂载目录/opt/wwwroot1改成/opt/wwwroot2,其余一样。
#安装httpd
yum install httpd -y
#real server1创建测试网页
echo "Server 192.168.10.51" > /var/www/html/index.html
#real server2创建测试网页
echo "Server 192.168.10.52" > /var/www/html/index.html
#启动httpd服务
systemctl start httpd.service 
systemctl enable httpd.service 
#关闭防火墙和安全性策略
systemctl stop  firewalld.service 
systemctl disable firewalld.service
setenforce 0
#测试网页打开是否正常
firefox http://127.0.0.1/

技术分享图片
技术分享图片

(3) 配置Director server服务器
#安装ipvsadm管理工具
yum install ipvsadm -y
#加载LVS内核模块
modprobe ip_vs
#查看ip_vs版本信息
cat /proc/net/ip_vs  

技术分享图片

#开启路由转发
#法一:编辑sysctl.conf文件,永久路由转发
vim /etc/sysctl.conf
  net.ipv4.ip_forward=1
sysctl -p
#法二:直接编辑,临时路由转发
echo "1" > /proc/sys/net/ipv4/ip_forward
#配置SNAT转发规则,设置nat防火墙
iptables -F -t nat      #清空nat防火墙
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ens37 -j SNAT --to-source 12.0.0.1
#Director 上编辑 nat 实现负载分配脚本
# 设置 ipvsadm
vim nat.sh
 #!/bin/bash
 ipvsadm-save  > /etc/sysconfig/ipvsadm   #保存策略
 service ipvsadm start 
 ipvsadm -C     #清除内核虚拟服务器表中的所有记录
 ipvsadm -A -t 12.0.0.1:80 -s rr  #创建虚拟服务器
 ipvsadm -a -t 12.0.0.1:80 -r 192.168.10.51:80 -m 
 ipvsadm -a -t 12.0.0.1:80 -r 192.168.10.52:80 -m 
 ipvsadm

ipvsadm管理工具的选项用法:

  • -A: 表示添加虚拟服务器
  • -t: 用来指定VIP地址及TCP端口
  • -s: 用来指定负载均衡调度算法
  • -a: 表示添加真实服务器
  • -r: 用来指定RIP地址及TCP端口
  • -m: 表示使用NAT群集模式
  • -g: 表示使用DR群集模式
  • -i: 表示使用TUN群集模式
  • -w: 用来设置权重
#保存nat脚本后直接运行
chmod +x nat.sh
./nat.sh

技术分享图片

#查看ipvsadm设置的规则
ipvsadm -ln

技术分享图片

3.测试LVS群集

用Windows客户端直接访问http://12.0.0.1, 将能够看到由真实服务器提供的网页内容。

第一次访问:
技术分享图片
Real Server连接次数查看:
技术分享图片
刷新一次:
技术分享图片
Real Server连接次数查看:
技术分享图片

八、实现LVS的DR模式

1.实验环境

四台机器:

Director节点: (ens33 192.168.10.53 vip ens33:0 192.168.10.80)

Real server1: (ens33 192.168.10.51 vip lo:0 192.168.10.80)

Real server2: (ens33 192.168.10.52 vip lo:0 192.168.10.80)

NFS Server: 192.168.10.50

2.安装和配置

(1) 配置NFS server服务器

步骤如上

(2) 配置两个real server服务器
#配置虚拟IP地址
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
 DEVICE=lo:0
 IPADDR=192.168.10.80
 NETMASK=255.255.255.255  #子网掩码必须全为1
 ONBOOT=yes 
ifup lo:0 

技术分享图片

#安装nfs客户端
yum install nfs-utils -y 
service rpcbind start  
service nfs restart
#查看nfs挂载
showmount -e 192.168.10.50
#挂载nfs

#Real Server1挂载nfs

#法一:直接挂载
mount.nfs 192.168.10.50:/opt/wwwroot1 /var/www/html

#法二:修改fatab文件挂载
vim /etc/fstab
  192.168.10.50:/opt/wwwroot1 /var/www/html nfs defaults,_netdev  0 0

#Real Server2挂载nfs

方法同Real Server1,将挂载目录/opt/wwwroot1改成/opt/wwwroot2,其余一样。
#安装httpd
yum install httpd -y
#real server1创建测试网页
echo "Server 192.168.10.51" > /var/www/html/index.html
#real server2创建测试网页
echo "Server 192.168.10.52" > /var/www/html/index.html
#启动httpd服务
systemctl start httpd.service 
systemctl enable httpd.service 
#关闭防火墙和安全性策略
systemctl stop  firewalld.service 
systemctl disable firewalld.service
setenforce 0
#在两台real server上配置启动脚本
vim /etc/init.d/rs.sh
  #!/bin/bash
  VIP=192.168.10.80
        case "$1" in
        start)
                ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
                /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 >/dev/null 2>&1
                echo "RealServer Start OK "
                ;;
        stop)
                ifconfig lo:0 down
                route del $VIP /dev/null 2>&1
                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 "RealServer Stopd"
                ;;
        *)
                echo "Usage: $0 {start|stop}"
                exit 1
        esac
        exit 0
#保存后直接运行脚本
chmod +x rs.sh
service rs.sh start

先在本机上自测一下访问网页:
技术分享图片
技术分享图片

(2) 配置Director server服务器
#配置虚拟IP地址
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
 DEVICE=ens33:0
 ONBOOT=yes
 IPADDR=192.168.10.80
 NETMASK=255.255.255.0
ifup ens33:0 

技术分享图片

#安装ipvsadm
yum install ipvsadm -y  

vim /etc/sysctl.conf
#开启路由功能
  net.ipv4.ip_forward=1

#调整/proc响应参数,关闭Linux内核重定向参数响应
  net.ipv4.conf.all.send_redirects = 0  
  net.ipv4.conf.default.send_redirects = 0
  net.ipv4.conf.ens33.send_redirects = 0
sysctl -p 
配置启动脚本
vim /etc/init.d/dr.sh
 #!/bin/bash
 GW=192.168.10.1
 VIP=192.168.10.80
 RIP1=192.168.10.51
 RIP2=192.168.10.52
 case "$1" in
        start)
        /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
        systemctl start ipvsadm    
        /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
        /sbin/route add -host $VIP dev ens33:0
        /sbin/ipvsadm -A -t $VIP:80 -s rr
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
        echo "ipvsadm starting --------------------[ok]"
        ;;
        stop)
        /sbin/ipvsadm -C
        systemctl stop ipvsadm
        ifconfig ens33:0 down
        route del $VIP
        echo "ipvsamd stoped----------------------[ok]"
         ;;
        status)
        if [ ! -e /var/lock/subsys/ipvsadm ];then
        echo "ipvsadm stoped---------------"
        exit 1
                else
                echo "ipvsamd Runing ---------[ok]"
        fi
        ;;
        *)
        echo "Usage: $0 {start|stop|status}"
        exit 1
esac
exit 0

chmod +x /etc/init.d/dr.sh
service dr.sh start
#关闭防火墙和安全策略
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

3.测试LVS群集

用Windows客户端直接访问 http://192.168.10.80/, 将能够看到由真实服务器提供的网页内容。

第一次访问:

技术分享图片
Real Server连接次数查看:
技术分享图片
刷新一次:
技术分享图片

Real Server连接次数查看:

技术分享图片

九、LVS结合keepalive

LVS可以实现负载均衡,但是不能够故障切换和健康检查,也就是当一个rs服务器出现故障时,LVS仍然会把请求转发给故障的rs服务器,这样就会导致请求无效。keepalive软件可以解决 LVS 单点故障的问题,能同时实现 LVS 的高可用性。这里以LVS-DR模式为例。

1.实验环境

五台机器:

  • Keepalived1 + lvs1(Director1):192.168.10.53 (主)
  • Keepalived2 + lvs2(Director2):192.168.10.54 (从)
  • Real server1:192.168.10.51
  • Real server2:192.168.10.52
  • NFS Server: 192.168.10.55
  • VIP: 192.168.10.80

2.安装配置

在实现LVS的DR模式前提下,在两个Director Server 节点服务器部署keepalived服务。

#安装keepalive软件
yum install keepalived -y

主keepalived节点配置(lvs1)

#主节点( MASTER )配置文件
vim /etc/keepalived/keepalived.conf
 global_defs {
  ...    #省略部分
  smtp_server 127.0.0.1           #指向本地
  router_id LVS_01               #指定名称,备份服务器不同名称
  ...    #省略部分          
}

 vrrp_instance VI_1 {        #定义VRRP热备实例
    state MASTER            #MASTER表示主调度器
    interface ens33         #承载VIP地址的物理接口
    virtual_router_id 51    #虚拟路由器的ID号,每个热备组保持一致
    priority 100            #主调度器优先级
    advert_int 1            #通告间隔秒数
    authentication {        #认证信息
        auth_type PASS      #认证类型
        auth_pass 1111      #字码密串
    }
    virtual_ipaddress {     #指定群集VIP地址,也就是漂移地址
        192.168.10.80
    }
}

virtual_server 192.168.10.80 80 {  #虚拟服务器VIP地址
    delay_loop 6                   #健康检查的间隔时间
    lb_algo rr                     #轮询rr的调度算法
    lb_kind DR                     #直接路由工作模式
    persistence_timeout 0          #连接保持时间
    protocol TCP                   #应用服务采用的是TCP协议

    real_server 192.168.10.51 80 {  

                        #第一个web节点的服务器地址、端口
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80       
        }
    }

    real_server 192.168.10.52 80 {  

                       #第二个web节点的服务器地址、端口
 router_id LVS_01         weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

从keepalived节点配置(lvs2)
拷贝主节点的配置文件keepalived.conf,然后修改如下内容:

router_id LV ->  router_id LVS_02 #从调度器名称
state MASTER -> state BACKUP  #从调度器
priority 100 -> priority 90   #从调度器优先级

启动keepalive

#先主后从分别启动keepalive
systemctl start keepalived.service
systemctl status keepalived.service

3.测试 keepalived 的HA特性

(1)虚拟IP地址漂移

首先在master(lvs1)上执行命令 ip addr ,可以看到vip在master节点上的;
技术分享图片
这时如果在master上执行 systemctl stop keepalived.service命令,这时vip已经不在master上,在slave节点上执行 ip addr 命令可以看到 vip 已经正确漂到slave节点。这时客户端去访问http://192.168.10.80 访问依然正常。

systemctl stop keepalived.service     #在lvs1主调度器上停止keepalived服务

技术分享图片
(2)连通性
在客户机执行“ping 192.168.10.80 -t”,能够正常ping通。
禁用master(lvs1)的ens33网卡,发现还是能正常ping通的。
技术分享图片
技术分享图片

(3)web访问测试

禁用master(lvs1)的ens33网卡,再次访问上述web服务,网页文档显示正常。
技术分享图片
技术分享图片
技术分享图片

以上是关于如何配置Web服务器实现负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

nginx在做负载均衡时如何配置

负载均衡----实现配置篇(Nginx)

简单实现Nginx的反向代理+负载均衡

配置Nginx实现负载均衡

nginx如何实现负载均衡、限流、缓存、黑白名单和灰度发布

nginx配置Nginx实现负载均衡