LVS负载均衡集群

132 阅读8分钟

集群含义

由多台主机构成,但对外只表现为一一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机。

群集的类型

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

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

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

LVS 的三种工作模式:

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

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

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

LVS 调度算法:

  1. rr 轮询
    将收到的访问请求按照顺序轮流分配给群集中的各节点(真实服务器) ,均等地对待每一台服务器 ,而不管服务器实际的连接数和系统负载
  2. wrr 加权轮询
    依据不同RS的权值分配任务。权重值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。 保证性能强的服务器承担更多的访问流量。
  3. sh 源地址哈希
    以目的地址为关键字查找一个静态hash表来获得所需RS。
  4. dh 目的地址哈希
    以源地址为关键字查找--个静态hash表来获得需要的RS。
  5. lc 最小连接
    ipvs表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS。 根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。
  6. wlc 加权最小连接
    假设各台RS的权值依次为Wi,当前tcp连接数依次为Ti,依次取Ti/Wi为最小的RS作为下一个分配的RS。
  7. lblc 基于地址的最小连接
    将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。

ipvsadm管理工具:

ipvsadm 是在负载调度器上使用的 LVS 群集管理工具,通过调用 ip_vs 模块来添加、删除服务器节点 ,以及查看集群运行状态,在CentOS 7系统中,需安装软件包

ipvsadm:

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

ipvsadm -ln 组合使用查看规则

yum -y install ipvsadm   需要下载

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

14e3f6142e8b4337b0b42669fe6a6d76.png

部署共享存储:

systemctl disable --now 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/kgc /opt/benet                    #创建挂载目录
chmod 777 /opt/kgc /opt/benet                #加权限
echo 'this is wzw web1!' > /opt/kgc/index.html
echo 'this is dsj web2!' > /opt/benet/index.html     #模拟数据

vim /etc/exports
/usr/share *(ro,sync)
/opt/wzw 192.168.88.0/24(rw,sync)
/opt/dsj 192.168.88.0/24(rw,sync)          #添加规则

systemctl restart nfs rpcbind              #重启服务

97777746f5714172a9d50812dd2fd7e8.png

6ee562d27e80435e8f5796673d80dabd.png

配置节点服务器:

以下操作两台服务器同时进行:

systemctl disable --now firewalld.service
setenforce 0              

yum install httpd -y
systemctl enable --now httpd.service  #安装启动httpd

yum install nfs-utils rpcbind -y
systemctl enable --now nfs rpcbind    #安装启动共享服务

vim /etc/fstab
192.168.88.103:/opt/wzw	/var/www/html	nfs		defaults,_netdev	0  0

##永久挂载

mount -a      #刷新挂载

12f5f34e611049bd9a3d0134e4e2d640.png

059726c4f6d549f290272f776070188b.png

配置负载调度器:

systemctl disable --now firewalld.service
setenforce 0  
 
yum -y install ipvsadm       #先安装ipvsadn管理工具
 
ipvsadm-save > /etc/sysconfig/ipvsadm  #启动服务前须保存负载分配策略
 
systemctl start ipvsadm.service
 
添加新网卡IP地址为12.0.0.20   (仅主机)
 
vi /etc/sysctl.conf
 net.ipv4.ip_forward = 1     ##开启路由转发功能
 
sysctl -p      #刷新
 
iptables -t nat -F
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -o ens36 -j SNAT --to 12.0.0.20
 
  ##清空规则,添加新的SNAT防火墙策略  将88段IP转换为外网
 
ipvsadm -A -t 12.0.0.20:80 -s rr 
ipvsadm -a -t 12.0.0.20:80 -r 192.168.88.100:80 -m 
ipvsadm -a -t 12.0.0.20:80 -r 192.168.88.102:80 -m 
ipvsadm
 
  #添加lvs策略
 
注意服务器和客户端网关要  指向网关服务器
 
客户端网关为 12.0.0.20
服务器网关为 192.168.88.104

4a9e15ecea7442298fddf99a24020814.png

7ff3b6b14af344b1b0fbfe6169d6e735.png

4092c391feec4fbb806e62562c5b3b1c.png

9df52b0b05d74e91adf2c189334feca2.png

3b7ec1066956411d9e009d25c545f39a.png

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

LVS-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 直接将响应报文传送到客户端。

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 地址。

DR部署示例:

配置负载调度器:

systemctl stop firewalld.service
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm
 
 
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.88.200
NETMASK=255.255.255.255
 
 
systemctl restart network
ifconfig ens33:0
 
 
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm                   #启动服务
 
ipvsadm -C
ipvsadm -A -t 192.168.88.200:80 -s rr   ##调度算法为轮循
ipvsadm -a -t 192.168.88.200:80 -r 192.168.88.100:80 -g #若隧道模式,-g替换为-i
ipvsadm -a -t 192.168.88.200:80 -r 192.168.88.102:80 -g
 
ipvsadm
ipvsadm -ln              #查看ipvsadm策略

4b2e80e68ca548639a42381cc7ddcf7c.png

75e05e528cd644438cfb2913b6145591.png

8f7dac2090044aae97c1a8b76f5dcc78.png

配置节点服务器:

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

systemctl disable--now firewalld.service
setenforce 0
 
 
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0		
vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.88.200
NETMASK=255.255.255.255	   ##配置vip地址
 
ifup lo:0
ifconfig lo:0
 
 
vim /etc/rc.local
/usr/sbin/route add -host 192.168.88.200 dev lo:0
chmod +x /etc/rc.d/rc.local
#永久修改来自.200的请求转发到lo:0网卡
 
调整内核的 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      #刷新
 
其他操作和上面一样,准备web页面。

e2a8784bed7d4d4c82547e4b600aa763.png

012a7d2a691c41f9acc77110281fa8a7.png

5db5db334a0f461b9b7709a863c3cf7f.png