Linux系统——LVS-DR群集部署及拓展

目录

引言 

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

2.列举出LVS调度算法

3.LVS调度常见算法(均衡策略)

3.1固定调度算法:rr,wrr,dh,sh

3.2动态调度算法:wlc,lc,lblc

4.LVS三种工作模式区别

一、IP隧道

二、直接路由

1.DR——直接路由概述

2.DR模式特点

3.LVS工作模式总结和比较

4.直接路由原理

三、搭建LVS-DR模式

1.准备环境

2.配置LVS-DR代理服务器

3.配置后端真实服务器

Centos7-2

Centos7-3

4.测试


引言 

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

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

1.NAT模式(VS-NAT)

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

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

2.直接路由模式(VS-DR) 

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

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

3.IP隧道模式(VS-TUN)

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

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

IP隧道模式——VPN技术,开通VPN,架设一条专属线路,通过公司内网和互联网进行互联

2.列举出LVS调度算法

  • 轮询(Round Robin)
  • 加权轮询(weighted Round Robin)
  • 最少连接(Least Connections)
  • 加权最少连接(weighted east Connections)
  • 源地址哈希值(source hash)

3.LVS调度常见算法(均衡策略)

LVS常用的调度算法基本分为两类:固定调度算法、动态调度算法

3.1固定调度算法:rr,wrr,dh,sh

  • rr:轮询算法,将请求依次分配给不同的rs节点,即RS节点中均摊分配。适合于RS所有节点处理性能接近的情况。
  • wrr:加权轮训调度,依据不同RS的权值分配任务。权值较高的Rs将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。
  • dh:目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得所需RS。
  • sh:源地址哈看调度(source basbing)以源地址为关键字查找一个静态basb表来获得需要的RS

3.2动态调度算法:wlc,lc,lblc

  • wlc:加权最小连接数调度,假设各台R的权值依次为Wi,当前tcp连接数依次为?1,依次去Ti/mi为最小的RS作为下一个分配的RS。
  • lc:最小连接数调度(least-connection),IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS
  • 1blc:基于地址的最小连接数调度(locality-based  least-connection):将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑

4.LVS三种工作模式区别

  • NAT:通过网络地址转换实现的虚拟服务器,大并发访问时,调度器的性能成为瓶颈
  • DR:使用路由技术实现虚拟服务器,节点服务器需要配置VIP,注意MAC地址广播
  • TUN:通过隧道方式实现虚拟服务器。

一、IP隧道

  1. RIP和DIP可以不处于同一物理网络中,RS的网关一般不能指向DIP,且RIP可以和公网通信。也就是说集群节点可以跨互联网实现。DIP, VIP, RIP可以是公网地址。
  2. RealServer的通道接口上需要配置VIP地址,以便接收DIP转发过来的数据包,以及作为响应的报文源IP。
  3. DIP转发给RealServer时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP,而RealServer响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP
  4. 请求报文要经由Director,但响应不经由Director,响应由RealServer自己完成
  5. 不支持端口映射
  6. RS的OS须支持隧道功能

一般来说,隧道模式常会用来负载调度缓存服务器组,这些缓存服务器一般放置在不同的网络环境,可以就近折返给客户端。在请求对象不在Cache服务器本地命中的情况下,Cache服务器要向源服务器发送请求,将结果取回,最后将结果返回给用户。

二、直接路由

1.DR——直接路由概述

直接路由(Direct Routing):简称 DR 模式,采用半开放式的网络结构,与 TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。

负载调度器与各节点服务器通过本地网络连接,不需要建立专用的 IP 隧道直接路由,LVS默认模式,应用最广泛,通过请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变

直接路由(DR)实际上是客户端访问虚拟地址 代理服务器和真实服务器都使用虚接口,把lo回环口 配虚接口 可以让用户访问同一个IP(也就是代理服务器和真实服务器的局域网)

2.DR模式特点

  • Director和各RS都配置有VIP
  • 确保前端路由器将目标IP为VIP的请求报文发往Director
  • RS和Director要在同一个物理网络
  • 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
  • 不支持端口映射(端口不能修改)
  • 无需开启 ip_forward
  • RS可使用大多数OS系统
  • 在前端网关做静态绑定VIP和Director的MAC地址
  • 在RS上使用arptables工具
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP

在RS上修改内核参数以限制arp通告及应答级别

/proc/sys/net/ipv4/conf/all/arp_ignore
#忽略ARP广播
/proc/sys/net/ipv4/conf/all/arp_announce
#无故ARP  不检测ARP

ARP(Address Resolution Protocol)地址解析协议,在封装报文的时候解决封装mac的问题;

RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director

3.LVS工作模式总结和比较

NATTUNDR
优点端口转换WAN性能最好
缺点性能瓶颈服务器支持隧道模式不支持跨网段
真实服务器要求anyTunnelingNon-arp device
支持网络private(私网)LAN/WAN(私网/公网)LAN(私网)
真实服务器数量low (10~20)High (100)High (100)
真实服务器网关lvs内网地址Own router(网工定义)Own router(网工定义)

4.直接路由原理

客户端访问外网地址12.0.0.100    12.0.0.100反馈数据给客户端

如果12.0.0.7直接反馈给客户端,客户端会丢弃数据报文

三、搭建LVS-DR模式

1.准备环境

Centos7-1作为LVS-DR代理服务器;Centos7-2和Centos7-3作为后端真实服务器;Centos7-4作为客户端

[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0
setenforce: SELinux is disabled
[root@node2 ~]#systemctl stop firewalld
[root@node2 ~]#setenforce 0
[root@node3 ~]#systemctl stop firewalld
[root@node3 ~]#setenforce 0
[root@G ~]#systemctl stop firewalld
[root@G ~]#setenforce 0

2.配置LVS-DR代理服务器

[root@localhost ~]#ifconfig ens33:0 192.168.241.111/32
#配置虚拟IP地址
[root@localhost ~]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:51:4b:b5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.241.11/24 brd 192.168.241.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.241.111/0 brd 255.255.255.255 scope global ens33:0
       valid_lft forever preferred_lft forever
    inet6 fe80::de6f:32c8:5a64:a6b2/64 scope link 
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:53:c1:45 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:53:c1:45 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]#vim /etc/sysctl.conf
#调整/proc响应参数

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



[root@localhost ~]#sysctl -p
#刷新配置
#调整/proc响应参数  对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址,应该关闭 Linux 内核的重定向参数响应服务器不是一台路由器,那么它不会发送重定向,所以可以关闭该功能
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
[root@localhost ~]#modprobe ip_vs
#加载ip_VS内核模块  ip_vs是内核模块的一个配置  是操作系统的一部分 modprobe是把ip_vs配置加载到进程中
[root@localhost ~]#cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@localhost ~]#yum install ipvsadm.x86_64 -y
[root@localhost ~]#ipvsadm-save > /etc/sysconfig/ipvsadm
#保存设置
[root@localhost ~]#systemctl start ipvsadm.service 
[root@localhost ~]#systemctl status ipvsadm.service 
● ipvsadm.service - Initialise the Linux Virtual Server
   Loaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; vendor preset: disabled)
   Active: active (exited) since 三 2024-03-06 14:32:38 CST; 5s ago
  Process: 6369 ExecStart=/bin/bash -c exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm (code=exited, status=0/SUCCESS)
 Main PID: 6369 (code=exited, status=0/SUCCESS)

3月 06 14:32:38 localhost.localdomain systemd[1]: Starting Initialise the...
3月 06 14:32:38 localhost.localdomain systemd[1]: Started Initialise the ...
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]#ipvsadm -A -t 192.168.241.111:80 -s rr
[root@localhost ~]#ipvsadm -a -t 192.168.241.111:80 -r 192.168.241.22:80 -g
[root@localhost ~]#ipvsadm -a -t 192.168.241.111:80 -r 192.168.241.23:80 -g
[root@localhost ~]#ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.241.111:80 rr
  -> 192.168.241.22:80            Route   1      0          0         
  -> 192.168.241.23:80            Route   1      0          0 
#添加真实服务器-a  指定VIP地址及TCP端口 -t   指定RIP地址及TCP端口 -r 指定DR模式 -g

ipvsadm不支持端口映射;如果是ipvsadm -a -t 192.168.241.111:80 -r 192.168.241.22:8080 -g最终还是显示80端口。

3.配置后端真实服务器

Centos7-2

[root@node2 ~]#yum install httpd -y
[root@node2 ~]#ifconfig lo:0 192.168.241.111/32
[root@node2 ~]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.241.111/0 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:3e:a0:08 brd ff:ff:ff:ff:ff:ff
    inet 192.168.241.22/24 brd 192.168.241.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::d9cd:6857:3bdc:7454/64 scope link 
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:fe:22:f2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:fe:22:f2 brd ff:ff:ff:ff:ff:ff
[root@node2 ~]#systemctl start httpd
[root@node2 ~]#systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2024-03-06 01:44:08 EST; 6s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 6418 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           ├─6418 /usr/sbin/httpd -DFOREGROUND
           ├─6420 /usr/sbin/httpd -DFOREGROUND
           ├─6421 /usr/sbin/httpd -DFOREGROUND
           ├─6422 /usr/sbin/httpd -DFOREGROUND
           ├─6423 /usr/sbin/httpd -DFOREGROUND
           └─6424 /usr/sbin/httpd -DFOREGROUND

Mar 06 01:43:38 node2.localdomain systemd[1]: Starting The Apache HTTP Se....
Mar 06 01:43:38 node2.localdomain httpd[6418]: AH00558: httpd: Could not r...
Mar 06 01:44:08 node2.localdomain systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.
[root@node2 ~]#vim /etc/sysctl.conf
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
[root@node2 ~]#sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@node2 ~]#echo cxk > /var/www/html/index.html
[root@node2 ~]#cat /var/www/html/index.html 
cxk

Centos7-3

[root@node3 ~]#yum install httpd -y
[root@node3 ~]#ifconfig lo:0 192.168.241.111/32
[root@node3 ~]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.241.111/0 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:6b:71:15 brd ff:ff:ff:ff:ff:ff
    inet 192.168.241.23/24 brd 192.168.241.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::f11e:5019:be57:47b8/64 scope link 
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:9d:e9:ac brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:9d:e9:ac brd ff:ff:ff:ff:ff:ff
[root@node3 ~]#systemctl start httpd
[root@node3 ~]#systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since 三 2024-03-06 14:44:03 CST; 10s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 2913 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─2913 /usr/sbin/httpd -DFOREGROUND
           ├─2923 /usr/sbin/httpd -DFOREGROUND
           ├─2924 /usr/sbin/httpd -DFOREGROUND
           ├─2925 /usr/sbin/httpd -DFOREGROUND
           ├─2926 /usr/sbin/httpd -DFOREGROUND
           └─2927 /usr/sbin/httpd -DFOREGROUND

3月 06 14:43:37 node3.node3 systemd[1]: Starting The Apache HTTP Server...
3月 06 14:44:03 node3.node3 systemd[1]: Started The Apache HTTP Server.
[root@node3 ~]#vim /etc/sysctl.conf
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
[root@node3 ~]#sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@node3 ~]#echo wyb > /var/www/html/index.html
[root@node3 ~]#cat /var/www/html/index.html 
wyb

4.测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值