部署LVS-DR群集

目录

一、LVS负载均衡的三种工作模式

[1)NAT 地址转换](#1)NAT 地址转换)

[2)TUN IP隧道 IP Tunnel](#2)TUN IP隧道 IP Tunnel)

[3)DR 直接路由 Direct Rounting](#3)DR 直接路由 Direct Rounting)

二、LVS调度算法

三、LVS-DR模式部署:

[四、DR模式 LVS负载均衡群集](#四、DR模式 LVS负载均衡群集)

(1)数据包流向分析:

[(2)DR 模式的特点:](#(2)DR 模式的特点:)

[五、 实验](#五、 实验)

(1)初始化

挂载mnt

关闭防火墙

(2)配置NFS共享存储(4号机)

(3)配置节点服务器(2.3号机)

(4)调度器配置(一号机)

六、试验


一、LVS负载均衡的三种工作模式

1)NAT 地址转换

调度器会作为所有节点服务器的默认网关,也是客户端的访问入口和节点服务器返回响应消息的出口,所以调度器会承载双向流量的负载压力,可能会成为整个群集的性能瓶颈。

由于节点服务器都会处于内网环境并使用私网IP,所以NAT模式具有一定的安全性。

2)TUN IP隧道 IP Tunnel

调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不需要经过调度器。

由于节点服务器需要部署在互联网环境中,所以需要有独立的公网IP。

调度器与节点服务器是通过专用的IP隧道相互通信。

因此IP隧道模式的成本较高、网络安全性较低密,且数据在IP隧道传输的过程中需要额外的封装和解封装过程,性能也会受到一定的影响。

3)DR 直接路由 Direct Rounting

调度器也是仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不需要经过调度器。(与NAT模式的区别)

节点服务器与调度器是部署在同一个物理网络中,因此不需要专用的IP隧道。(与IP隧道模式的区别)

DR模式是企业首选的LVS模式。

二、LVS调度算法

rr(轮询) wrr(加权轮询) lc(最小连接) sh(源地址哈希) dh(目的地址哈希)
wlc(加权最小连接)
:优先分配请求给 <连接数>/<权重> 的值最小的节点服务器
lblc(基于地址的最小连接) :如果服务器末超载且可用,则针对相同的目的地址的流量被发送到同一后端服务器;否则,流量被发送到连接数较少的服务器
sed(最短预期延迟)
nq(永不排队)

三、LVS-DR模式部署:

  1. 部署NFS共享存储
  2. 部署Web服务器,注意:配置lo:0虚接口承载VIP;修改内核参数 arp_ignore=1、arp_announce=2防止网关ARP紊乱问题;添加路由 route add -host <VIP> dev lo:0
  3. 部署调度器,注意:配置ensXX:0虚接口承载VIP;修改内核参数ip_forward=0、send_redirects=0关闭IP转发和重定向功能;安装ipvsadm工具,添加虚拟服务器和真实服务器的配置,使用-g选项选择LVS-DR模式
  4. 客户端访问VIP进行测试,注意:如何客户端跨网段,则调度器和节点服务器的默认网关要指向网关路由器的地址

四、DR模式 LVS负载均衡群集

(1)数据包流向分析:

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

五、 实验

1号机 作为 LVS调度器 192.168.18.10

2号机 3号机 作为 节点服务器 192.168.18.20 192.168.18.30

4号机 作为 NFS共享存储 192.168.18.40

(1)初始化

挂载mnt
[root@l1 ~]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
devtmpfs                 1913544       0  1913544    0% /dev
tmpfs                    1930624       0  1930624    0% /dev/shm
tmpfs                    1930624   12560  1918064    1% /run
tmpfs                    1930624       0  1930624    0% /sys/fs/cgroup
/dev/mapper/centos-root 38770180 5434724 33335456   15% /
/dev/sda1                1038336  191104   847232   19% /boot
tmpfs                     386128      12   386116    1% /run/user/42
tmpfs                     386128       0   386128    0% /run/user/0
[root@l1 ~]# mount /dev/sr0 /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
[root@l1 ~]# 
关闭防火墙
[root@l1 ~]# systemctl disable --now firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@l1 ~]# setenforce 0
[root@l1 ~]# vim /etc/selinux/config
[root@l1 ~]# 

关闭同步

(2)配置NFS共享存储(4号机)

[root@localhost ~]# yum install -y nfs-utils rpcbind
[root@localhost ~]# mkdir /share/{xy101,xy102} -p  
                   //创建共享目录  添加节点,分别是xy101和xy102两个目录
[root@localhost ~]# ls /share/
xy101  xy102
[root@localhost ~]# echo '<h1>this is xy101 test web page!</h1>' > /share/xy101/test.html
[root@localhost ~]# echo '<h1>this is xy102 test web page!</h1>' > /share/xy102/test.html
[root@localhost ~]# vim /etc/exports
/share/xy101 192.168.18.0/24(ro)
/share/xy102 192.168.18.0/24(ro)

[root@localhost ~]# systemctl enable --now rpcbind nfs   //启动rpcbind 和 nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@localhost ~]# showmount -e   //检查一下有没有问题
Export list for localhost.localdomain:
/share/xy102 192.168.18.0/24
/share/xy101 192.168.18.0/24
[root@localhost ~]# 

(3)配置节点服务器(2.3号机)

[root@l2 ~]# systemctl start rpcbind    //两台机都得启动远程调用
[root@l2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@l2 ~]# 
[root@l2 ~]# showmount -e 192.168.18.40
Export list for 192.168.18.40:
/share/xy102 192.168.18.0/24
/share/xy101 192.168.18.0/24
[root@l2 ~]# 

[root@l2 ~]# cd /etc/yum.repos.d/
[root@l2 yum.repos.d]# ls
local.repo  repo.bak
[root@l2 yum.repos.d]# 
[root@l2 yum.repos.d]# yum install -y nginx    (两台机都)

如果下载不了,传输进去 (两台机都)

[root@l2 yum.repos.d]# yum install -y nginx

也可以直接尝试下载安装包,我这里就不使用了

安装好了后 (二号机)

[root@l2 yum.repos.d]# systemctl start nginx   //启动nginx
[root@l2 yum.repos.d]# mount 192.168.18.40:/share/xy101 /usr/share/nginx/html   //挂载
[root@l2 yum.repos.d]# ls !$
ls /usr/share/nginx/html
test.html
[root@l2 yum.repos.d]# cd /etc/sysconfig/network-scripts/
[root@l2 network-scripts]# ls
ifcfg-ens33  ifdown-ppp       ifup-ib      ifup-Team
ifcfg-lo     ifdown-routes    ifup-ippp    ifup-TeamPort
ifdown       ifdown-sit       ifup-ipv6    ifup-tunnel
ifdown-bnep  ifdown-Team      ifup-isdn    ifup-wireless
ifdown-eth   ifdown-TeamPort  ifup-plip    init.ipv6-global
ifdown-ib    ifdown-tunnel    ifup-plusb   network-functions
ifdown-ippp  ifup             ifup-post    network-functions-ipv6
ifdown-ipv6  ifup-aliases     ifup-ppp
ifdown-isdn  ifup-bnep        ifup-routes
ifdown-post  ifup-eth         ifup-sit
[root@l2 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@l2 network-scripts]# vim ifcfg-lo:0
[root@l2 network-scripts]# 
DEVICE=lo:0
IPADDR=192.168.18.100
NETMASK=255.255.255.255
ONBOOT=yes

[root@l2 network-scripts]# systemctl restart network   //重启网卡
[root@l2 network-scripts]# systemctl restart nginx  //重启nginx
[root@l2 network-scripts]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@l2 network-scripts]# 
[root@l2 network-scripts]# vim /etc/sysctl.conf 

net.ipv4.conf.lo.arp_ignore =1
net.ipv4.conf.all.arp_ignore =1
net.ipv4.conf.lo.arp_announce =2
net.ipv4.conf.all.arp_announce =2
[root@l2 network-scripts]# sysctl -p   //加载一下
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
[root@l2 network-scripts]# 

[root@l2 network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.18.2    0.0.0.0         UG    100    0        0 ens33
192.168.18.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
[root@l2 network-scripts]# 

[root@l2 network-scripts]# route add -host 192.168.18.100 lo:0   //添加路由

三号机

[root@l3 yum.repos.d]# cd /etc/sysconfig/network-scripts/
[root@l3 network-scripts]# ls
ifcfg-ens33  ifdown-ppp       ifup-ib      ifup-Team
ifcfg-lo     ifdown-routes    ifup-ippp    ifup-TeamPort
ifdown       ifdown-sit       ifup-ipv6    ifup-tunnel
ifdown-bnep  ifdown-Team      ifup-isdn    ifup-wireless
ifdown-eth   ifdown-TeamPort  ifup-plip    init.ipv6-global
ifdown-ib    ifdown-tunnel    ifup-plusb   network-functions
ifdown-ippp  ifup             ifup-post    network-functions-ipv6
ifdown-ipv6  ifup-aliases     ifup-ppp
ifdown-isdn  ifup-bnep        ifup-routes
ifdown-post  ifup-eth         ifup-sit
[root@l3 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@l3 network-scripts]# vim !$
DEVICE=lo:0
IPADDR=192.168.18.100
NETMASK=255.255.255.255
ONBOOT=yes

[root@l3 network-scripts]# systemctl restart network nginx
[root@l3 network-scripts]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@l3 network-scripts]# 

[root@l3 network-scripts]# vim /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
[root@l3 network-scripts]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
[root@l3 network-scripts]# route add -host 192.168.18.100 dev lo:0
[root@l3 network-scripts]# 

[root@l3 network-scripts]# mount 192.168.18.40:/share/xy102 /usr/share/nginx/html
[root@l3 network-scripts]# df
文件系统                      1K-块    已用     可用 已用% 挂载点
devtmpfs                    1913544       0  1913544    0% /dev
tmpfs                       1930624       0  1930624    0% /dev/shm
tmpfs                       1930624   12568  1918056    1% /run
tmpfs                       1930624       0  1930624    0% /sys/fs/cgroup
/dev/mapper/centos-root    38770180 5441936 33328244   15% /
/dev/sda1                   1038336  191104   847232   19% /boot
tmpfs                        386128      12   386116    1% /run/user/42
tmpfs                        386128       0   386128    0% /run/user/0
/dev/sr0                    4635056 4635056        0  100% /mnt
192.168.18.40:/share/xy102 38770688 4584960 34185728   12% /usr/share/nginx/html
[root@l3 network-scripts]#
[root@l3 network-scripts]# ls /usr/share/nginx/html
test.html
[root@l3 network-scripts]# 

(4)调度器配置(一号机)

[root@l1 ~]# yum install -y ipvsadm
[root@l1 ~]# touch /etc/sysconfig/ipvsadm
[root@l1 ~]# systemctl start ipvsadm
[root@l1 ~]# systemctl status ipvsadm
[root@l1 ~]# systemctl enable ipvsadm
Created symlink from /etc/systemd/system/multi-user.target.wants/ipvsadm.service to /usr/lib/systemd/system/ipvsadm.service.
[root@l1 ~]# 

[root@l1 ~]# modprobe ip_vs    //添加ip_vs模块
[root@l1 ~]# lsmod             //检查
[root@l1 ~]# 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@l1 ~]# 

[root@l1 ~]# ls
anaconda-ks.cfg       公共  视频  文档  音乐
initial-setup-ks.cfg  模板  图片  下载  桌面
[root@l1 ~]# ifconfig 

[root@l1 ~]# cd /etc/sysconfig/network-scripts/
[root@l1 network-scripts]# ls
ifcfg-ens33  ifdown-ppp       ifup-ib      ifup-Team
ifcfg-lo     ifdown-routes    ifup-ippp    ifup-TeamPort
ifdown       ifdown-sit       ifup-ipv6    ifup-tunnel
ifdown-bnep  ifdown-Team      ifup-isdn    ifup-wireless
ifdown-eth   ifdown-TeamPort  ifup-plip    init.ipv6-global
ifdown-ib    ifdown-tunnel    ifup-plusb   network-functions
ifdown-ippp  ifup             ifup-post    network-functions-ipv6
ifdown-ipv6  ifup-aliases     ifup-ppp
ifdown-isdn  ifup-bnep        ifup-routes
ifdown-post  ifup-eth         ifup-sit
[root@l1 network-scripts]# cp ifcfg-lo ifcfg-ens33:0
[root@l1 network-scripts]# vim !$
vim ifcfg-ens33:0
DEVICE=ens33:0
IPADDR=192.168.18.100
NETMASK=255.255.255.255
ONBOOT=yes

[root@l1 network-scripts]# systemctl restart network
[root@l1 network-scripts]# 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
[root@l1 network-scripts]# sysctl -p
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@l1 network-scripts]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@l1 network-scripts]# 

[root@l1 network-scripts]# ipvsadm -C   //清空规则
[root@l1 network-scripts]# ipvsadm -A -t 192.168.18.100:80 -s rr   //添加规则指定调度算法
[root@l1 network-scripts]# ipvsadm -a -t 192.168.18.100:80 -r 192.168.18.20:80 -g   //-r 指定真实服务器
[root@l1 network-scripts]# ipvsadm -a -t 192.168.18.100:80 -r 192.168.18.30:80 -g
[root@l1 network-scripts]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  l1:http rr
  -> 192.168.18.20:http           Route   1      0          0         
  -> 192.168.18.30:http           Route   1      0          0         
[root@l1 network-scripts]# 
[root@l1 network-scripts]# ipvsadm-save -n > /opt/ipvsadm.bak   //保存规则
[root@l1 network-scripts]# 
[root@l1 network-scripts]# cat !$
cat /opt/ipvsadm.bak
-A -t 192.168.18.100:80 -s rr
-a -t 192.168.18.100:80 -r 192.168.18.20:80 -g -w 1
-a -t 192.168.18.100:80 -r 192.168.18.30:80 -g -w 1
[root@l1 network-scripts]# 

六、试验

为了防止试验结果有误,关闭nginx里面的长连接给关闭 (节点服务器 2.3号机)

[root@l2 network-scripts]# vim /etc/nginx/nginx.conf 
[root@l2 network-scripts]# systemctl restart nginx
[root@l2 network-scripts]# 

3号机如上

一号机

[root@l1 network-scripts]# 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.18.100:80 rr
  -> 192.168.18.20:80             Route   1      0          0         
  -> 192.168.18.30:80             Route   1      0          0         
[root@l1 network-scripts]# 
相关推荐
网络安全-杰克27 分钟前
网络安全概论
网络·web安全·php
怀澈12232 分钟前
高性能服务器模型之Reactor(单线程版本)
linux·服务器·网络·c++
耗同学一米八1 小时前
2024 年河北省职业院校技能大赛网络建设与运维赛项样题二
运维·网络·mariadb
skywalk81631 小时前
树莓派2 安装raspberry os 并修改成固定ip
linux·服务器·网络·debian·树莓派·raspberry
C++忠实粉丝2 小时前
计算机网络socket编程(3)_UDP网络编程实现简单聊天室
linux·网络·c++·网络协议·计算机网络·udp
黑客Ela2 小时前
网络安全中常用浏览器插件、拓展
网络·安全·web安全·网络安全·php
qdprobot2 小时前
ESP32桌面天气摆件加文心一言AI大模型对话Mixly图形化编程STEAM创客教育
网络·人工智能·百度·文心一言·arduino
hakesashou3 小时前
Python中常用的函数介绍
java·网络·python
C++忠实粉丝4 小时前
计算机网络socket编程(4)_TCP socket API 详解
网络·数据结构·c++·网络协议·tcp/ip·计算机网络·算法
九州ip动态4 小时前
做网络推广及游戏注册为什么要换IP
网络·tcp/ip·游戏