LVS NAT模式与DR模式负载均衡群集部署

178 阅读17分钟

LVS NAT模式与DR模式负载均衡群集部署

1. 群集(集群) cluster

集群就是将多台主机作为一个整体,对外提供相同的服务

特点:由多个主机构成,都干同样的一件事,对外界展现为一个整体

场景:高并发,并发量过大时候加服务器的方式就是向外扩展(横向扩展),就是集群

1.1 群集的类型

1)负载均衡群集 LB 提高系统响应效率,处理更多的访问请求,减少延迟,实现高并发、高负载的能力 典型代表:软件类:LVS、 Nginx、HAProxy 等 硬件类:F5 绿盟

2)高可用群集 HA 提高系统可靠性,减少中断时间,确保服务的连续性(通常使用N个9来代表可用的指标) 典型代表:Keepalived heartbeat

3)高性能运输群集 HPC 通过云计算或分布式计算来获取高性能的CPU、内存等资源,来提高整体运算能力

2. 负载均衡群集

2.1 集群架构

第一层,负载调度器 (Load Balancer)

访问整个群集系统的唯一入口,对外使用所有服务器共有的VIP地址,也称为群集IP 地址。通常会配置主、备两台调度器实现热备份,当主调度器失效以后能够平滑替换至备用调度器,确保高可用性。

第二层,服务器池 (Server Pool)

群集所提供的应用服务、由服务器池承担,其中每个节点具有独立的RIP地址(真实IP),只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。

第三层,共享存储 (Share Storage)

为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的统一性共享存储可以使用NAS设备,或者提供NFS共享服务的专用服务器

3. LVS (Linux虚拟服务器)

3.1 LVS简介

LVS实际上相当于基于IP地址的虚拟化应用,为基于IP地址和内容请求分发的负载均衡提出了一种高效的解决方法

3.2 LVS相关术语

DS:Director Server。指的是前端负载均衡器。

RS:Real Server。节点服务器,后端真实的工作服务器。

VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。

DIP:Director Server IP,主要用于和内部主机通讯的IP地址。

RIP:Real Server IP,后端服务器的IP地址。

CIP:Client IP,访问客户端的IP地址。

3.2 LVS的负载调度算法

固定调度算法

  1. rr 轮询
  2. wrr 加权轮询
  3. sh 源地址哈希
  4. dh 目的地址哈希
  5. lc 最小连接
  6. wlc 加权最小连接
  7. lblc 基于地址的最小连接

1. 轮询 (Round Robin)

将收到的访问请求按照顺序轮流分配给群集中的各节点(真实服务器均等地对待每一台服务器,而不管服务器实际的连接数和系统负载

2. 加权轮询(Weighted Round Robin)

根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务,分配的请求数越多

保证性能强的服务器承担更多的访问流量

3. 目的地址哈希调度(destination hashing)

以目的地址为关键字查找一个静态hash表来获得所需节点。

4. 源地址哈希调度(source hashing)

以源地址为关键字查找一个静态hash表来获得需要的节点。 动态调度算法

5. 最少连接 (Least Connections)

根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点

6. 加权最少连接(Weighted Least Connections)

在服务器节点的性能差异较大时,可以为真实服务器自动调整权重 性能较高的节点将承担更大比例的活动连接负载

7. 基于地址的最小连接数调度(locality-based least-connection)

将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的节点,并以它作为下一次分配的首先考虑。

4. LVS的工作模式及其工作过程

LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式)VS/DR(路由模式)VS/TUN(隧道模式)

4.1 NAT模式(VS-NAT)

调节器会作为所有节点服务器的默认网关,也是客户端的访问入口和节点服务器返回响应消息的出口,也就是说调节器会承受双向数据流量的负载压力,可能会成为整个集群的性能瓶颈。由于节点服务器都处于内网环境,使用私网IP地址,所以具有一定安全性。

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP)。真实服务器响应完请求后,查看默认路由,把响应后的数据包发送给负载均衡器,负载均衡器在接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。

  • 优点:集群中的服务器可以使用任何支持TCP/IP的操作系统,只要负载均衡器有一个合法的IP地址。
  • 缺点:扩展性有限,当服务器节点增长过多时,由于所有的请求和应答都需要经过负载均衡器,因此负载均衡器将成为整个系统的瓶颈。

4.2 直接路由模式(VS-DR)

DR 直接路由Direct Routing 调节器仅作为客户端的访问入口,节点服务器的响应消息是直接返回客户端的,不需要经过调节器。(与NAT模式的区别)节点服务器与调节器是部署在同一物理网络内,因此不需要建立专用的IP隧道。(与TUN模式的区别) DR 模式是企业首选的LVS模式。

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标MAC地址改成后端真实服务器的MAC地址(R-MAC)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。

  • 优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。
  • 缺点:需要负载均衡器与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。

4.3 IP隧道模式(VS-TUN)

TUN IP隧道 IP Tunnel 调节器仅作为客户端的访问入口,节点服务器的响应消息是直接返回客户端的,不需要经过调节器。但是由于节点服务器需要部署在不同位置的公网环境中,需要具有独立的公网IP,调节器与节点服务器是通过专用的IP隧道实现相互通信的。因此IP隧道模式的成本较高、安全性较低,且IP隧道需要额外的封装和解封装,性能会受到一定的影响。

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求报文封装一层IP隧道(T-IP)转发到真实服务器(RS)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。

  • 优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。
  • 缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持“IP Tunneling”。

LVS-NAT

LVS-NAT 模式配置步骤

  1. 配置NFS共享存储
  2. 节点服务器安装web服务,注意:默认网关要指向调节器的IP地址,测试的时候关闭连接保持
  3. 调节器服务器要开启IP路由转发功能和设置SNAT等iptables 规则,安装ipvsadm工具,配置虚拟服务器和真实节点服务器相关配置
  4. 客户端测试的时候网关要指向 调节器的IP地址

服务器配置:

  • 负载调度器:
    • 内网关 ens33:192.168.1.10
    • 外网关 ens36:12.0.0.1
  • Web1:192.168.1.20
  • Web2:192.168.1.30
  • NFS服务器:192.168.1.40
  • 客户端:12.0.0.12

1. 部署共享存储 NFS

192.168.1.40

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

yum install nfs-utils rpcbind -y
systemctl start rpcbind.service
systemctl start nfs.service

systemctl enable nfs.service
systemctl enable rpcbind.service

mkdir /opt/ylc /opt/cly
chmod 777 /opt/ylc /opt/cly
echo 'this is ylc !' > /opt/ylc/index.html
echo 'this is cly !' > /opt/cly/index.html

vim /etc/exports
/usr/share *(ro,sync)
/opt/cyw 192.168.1.0/24(rw,sync)
/opt/cww 192.168.1.0/24(rw,sync)

--发布共享---
exportfs -rv

2. 配置节点服务器

192.168.1.20 与 192.168.1.30

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

yum install httpd -y
systemctl start httpd.service
systemctl enable httpd.service

yum install nfs-utils rpcbind -y
showmount -e 192.168.1.40

systemctl start rpcbind
systemctl enable rpcbind

#Web1:192.168.1.20---
mount.nfs 192.168.1.40:/opt/ylc /var/www/html

vim /etc/fstab
192.168.1.40:/opt/kgc		/var/www/html	nfs		defaults,_netdev	0  0

#Web2:192.168.2.30---
mount.nfs 192.168.1.40:/opt/cly /var/www/html
echo 'this is cly !' > /var/www/html/index.html

vim /etc/fstab
192.168.1.40:/opt/cly	/var/www/html	nfs 	defaults,_netdev	0  0

3. 配置负载调度器

  • 内网关 ens33:192.168.1.10
  • 外网关 ens36:12.0.0.1
#配置 ens36 网卡的 IP地址
##复制ens33网卡信息到ens36网卡
cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens36
#去修改ens36网卡配置信息,删除uuid,将NAME和DEVICE的ens33改成36,删掉DNS,修改IP地址为 12.0.0.1,然后重启网卡
vim /etc/sysconfig/network-scripts/ifcfg-ens36
systemctl restart network

#关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

#配置SNAT转发规则
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p

iptables -t nat -F
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens36 -j SNAT --to-source 12.0.0.1

#加载LVs内核模块
modprobe ip_vs
cat /proc/net/ip_vs

for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done

4. 安装 ipvsadm 管理工具

1. ipvsadm 管理工具的作用及选项

作用

  1. 创建虚拟服务器
  2. 添加、删除服务器节点
  3. 查看群集及节点情况
  4. 保存负载均衡分配策略

选项

选项
-A添加虚拟服务器
-D删除整个虚拟服务器
-s指定负载调度算法(轮询:rr、加权轮询:wrr、最少连接:lc、加权最少连接:wlc)
-a表示添加真实服务器(节点服务器)
-d删除某一个节点
-t指定 RIP地址及 TCP端口
-m表示使用 NAT群集模式
-g表示使用 DR模式
-i表示使用 TUN模式
-w设置权重(权重为 0 时表示暂停节点)
-p 60表示保持长连接60秒(默认关闭连接保持)
-l列表查看 LVS 虚拟服务器(默认为查看所有)
-n以数字形式显示地址、端口等信息,常与“-l”选项组合使用。ipvsadm -ln

安装

yum -y install ipvsadm

#启动服务前须保存负载分配策略
ipvsadm-save > /etc/sysconfig/ipvsadm
或
ipvsadm --save > /etc/sysconfig/ipvsadm

#启动服务
systemctl start ipvsadm.service

5. 配置负载均衡分配策略

LVS NAT模式 所以只需要在服务器上配置,节点服务器不需要特殊配置

#清除原有策略
ipvsadm -C 					
ipvsadm -A -t 12.0.0.1:80 -s rr [-p 60]
ipvsadm -a -t 12.0.0.1:80 -r 192.168.80.11:80 -m [-w 1]
ipvsadm -a -t 12.0.0.1:80 -r 192.168.80.12:80 -m [-w 1]
#启用策略
ipvsadm						
#查看节点状态,Masq代表 NAT模式
ipvsadm -ln	
#保存策略
ipvsadm-save > /opt/ipvsadm						
ipvsadm-save > /etc/sysconfig/ipvsadm

systemctl restart network

补充:删除 ipvsadm 策略

ipvsadm -d -t 12.0.0.1:80 -r 192.168.80.11:80				#删除群集中某一节点服务器
ipvsadm -D -t 12.0.0.1:80									#删除整个虚拟服务器
systemctl stop ipvsadm										#停止服务(清空策略),如果selinux没关闭/etc/sysconfig/ipvsadm内容也会清空
systemctl start ipvsadm										#启动服务(根据/etc/sysconfig/ipvsadm恢复策略)
ipvsadm-restore < /opt/ipvsadm					            #恢复LVS 策略

6. 修改Web节点服务器的网关

#Web1
#去注释掉DNS,将GATEWAY(网关)配置成调度器内网关的IP地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33 

#Web2做相同操作

#重启网络
systemctl restart network  

7. 测试效果

在客户端:12.0.0.12 中使用浏览器访问 http://12.0.0.1/,不断刷新浏览器测试负载均衡效果, (可以关闭长连接保持,查看网页是否会显示不同内容)

LVS-DR

DR 直接路由Direct Routing 调节器仅作为客户端的访问入口,节点服务器的响应消息是直接返回客户端的,不需要经过调节器。(与NAT模式的区别)节点服务器与调节器是部署在同一物理网络内,因此不需要建立专用的IP隧道。(与TUN模式的区别) DR 模式是企业首选的LVS模式。

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标MAC地址改成后端真实服务器的MAC地址(R-MAC)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。

  • 优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。
  • 缺点:需要负载均衡器与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。

1. DR 工作模式数据包流量分析

(1)客户端发送请求到 Director Server(负载均衡器),请求的数据报文(源 IP 是 CIP,目标 IP 是 VIP)到达内核空间。

(2)Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传输。

(3)内核空间判断数据包的目标IP是本机VIP,此时IPVS(IP虚拟服务器)比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源 MAC 地址为 Director Server 的 MAC地址,修改目标 MAC 地址为 Real Server 的 MAC 地址,源 IP 地址与目标 IP 地址没有改变,然后将数据包发送给 Real Server。

(4)到达 Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。数据包重新封装报文(源 IP 地址为 VIP,目标 IP 为 CIP),将响应报文通过 lo 接口传送给物理网卡然后向外发出。

(5)Real Server 直接将响应报文传送到客户端。

2. DR 工作模式的特点

(1)Director Server 和 Real Server 必须在同一个物理网络中。

(2)Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对 RIP 进行直接访问。

(3)Director Server作为群集的访问入口,但不作为网关使用。

(4)所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。

(5)Real Server 的网关不允许指向 Director Server IP,即Real Server发送的数据包不允许经过 Director Server。

(6)Real Server 上的 lo 接口配置 VIP 的 IP 地址。

3. LVS-DR 模式配置步骤

  1. 配置 NFS 共享存储
  2. 节点服务器安装 Web 服务,在 lo:0 接口配置VIP,修改内核参数 arp_ignore=1 arp_announce=2 , 添加路由 route add -host dev lo:0(VIP )
  3. 调度服务器在 ensXX:0 接口配置VIP,修改内核参数关闭IP路由转发功能和重定向功能 ip_forward=0 send_redirects=0
  4. 调度服务器安装 ipvsadm 工具,配置虚拟服务器和真实节点服务器相关配置(-g选择DR模式)
  5. 客户端测试

注意项:如果客户端与调度服务器、节点服务器不在同一个网段,调度服务器、节点服务器的默认网关要指向网关路由器的IP地址

  • DR 服务器:192.168.1.10
  • Web1:192.168.1.20
  • Web2:192.168.1.30
  • VIP:192.168.1.11
  • 客户端:192.168.1.40

3.1 配置负载调度器

192.168.1.10

systemctl stop firewalld.service
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm

3.1.2 配置虚拟 ip 地址(VIP)

VIP:192.168.1.11

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0				#若隧道模式,复制为ifcfg-tunl0
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.1.11
NETMASK=255.255.255.255

ifup ens33:0
ifconfig ens33:0

3.1.3 调整 proce 相应参数

由于 LVS 负载调度器和各节点需要共用 VIP 地址,需要关闭 icmp 的重定向,不充当路由器

vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

sysctl -p

3.1.4 配置负载分配策略

ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm

pvsadm -C
ipvsadm -A -t 192.168.1.11:80 -s rr
ipvsadm -a -t 192.168.1.11:80 -r 192.168.1.20:80 -g			#若隧道模式,-g替换为-i
ipvsadm -a -t 192.168.1.11:80 -r 192.168.1.30:80 -g
ipvsadm

#查看节点状态,Route代表 DR模式
ipvsadm -ln					

4. 部署共享存储(NFS)

192.168.1.30(NFS服务器ip地址)

systemctl stop firewalld.service
setenforce 0

yum -y install nfs-utils rpcbind
mkdir /opt/ylc /opt/cly
chmod 777 /opt/cly /opt/cly

vim /etc/exports
/usr/share *(ro,sync)
/opt/ylc 192.168.1.0/24(rw,sync)
/opt/cly 192.168.1.0/24(rw,sync)

systemctl start rpcbind.service
systemctl start nfs.service

5. 配置节点(Web)服务器

  • Web1:192.168.1.20
  • Web2:192.168.1.30

将 Web1 和 Web2 的 ifcfg-lo:0 网卡都配置为虚拟 IP 地址 VIP:192.168.1.11

安装 httpd 服务,启动服务以后,在两个服务器上配置对应的网页文件,挂载到nfs服务器,用于测试

注意

此地址仅用作发送 Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口 lo∶0 来承载 VIP 地址,并为本机添加一条路由记录,将访问 VIP 的数据限制在本地,以避免通信紊乱。

systemctl stop firewalld.service
setenforce 0

#配置虚拟 ip 地址(vip:192.168.1.11)
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0		
vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.1.10
NETMASK=255.255.255.255						#注意:子网掩码必须全为 1

ifup lo:0
ifconfig lo:0
route add -host 192.168.1.11 dev lo:0

vim /etc/rc.local
/sbin/route add -host 192.168.1.11 dev lo:0

chmod +x /etc/rc.d/rc.local

#Web1:192.168.1.20
yum -y install httpd

mount.nfs 192.168.1.20:/opt/ylc /var/www/html

echo 'this is ylc web!' > /var/www/html/index.html
 
#Wbe2:192.168.1.30
yum -y install httpd

mount.nfs 192.168.1.30:/opt/cly /var/www/html

echo 'this is cly web!' > /var/www/html/index.html

6. 调整内核的 ARP 响应参数以阻止更新 VIP 的 MAC 地址,避免发生冲突

vim /etc/sysctl.conf
......
net.ipv4.conf.lo.arp_ignore = 1			#系统只响应目的IP为本地IP的ARP请求
net.ipv4.conf.lo.arp_announce = 2		#系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

sysctl -p

或者
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

yum -y install nfs-utils rpcbind httpd
systemctl start rpcbind
systemctl start httpd

7. 启动 Wbe1 和 Web2 上的 httpd 服务和 rpcbind 服务 然后去客户端浏览器测试

#Web1 和 Web2
##重启服务
systemctl restart httpd
##查看运行状态,确定是running
systemctl status httpd

#客户端:192.168.1.40
在浏览器访问 http://192.168.1.11/ 
访问成功后不断刷新,浏览器测试负载均衡效果