LVS负载均衡—DR模式

一、LVS-DR工作原理

1、名词介绍

DS(Director Server)    前端负载均衡节点服务器
RS(Real SERVER)    真正提供服务的后端服务器
RIP(RealServer IP)    后端服务器的ip地址
DIP                                  调度器和后端服务器通信的IP
CIP(Client IP)             源IP(客户端的IP)
VIP(Virtual IP)            负载均衡对外提供访问的IP地址
源MAC地址                    DS调度器的MAC地址
目的MAC地址                RS真正服务器的MAC地址

2、工作原理

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

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

(3) 内核空间判断数据包的目标IP是本机VIP,此时IPVS比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源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直接将响应报文传送到客户端。

3、问题与解决方法

(1)IP地址冲突

在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址。在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱。

  • 当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收到ARP广播
  • 只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播
  • 对节点服务器进行处理,使其不响应针对VIP的ARP请求
    • 使用虚接口10:0承载VIP地址
    • 设置内核参数arp_ignore=1:系统只响应目的IP为本地IP的ARP请求

解决方法:

(2)RS响应请求报文

路由器根据ARP表项,会将新来的请求报文转发给RealServer,导致Director的VIP失效

解决方法

对节点服务器进行处理,设置内核参数arp_announce=2:系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址.

二、部署

配置NFS服务器(192.168.10.14)

1、初始化操作

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
etc/selinux/config
SELINUX=disabled

2、查看安装并启动nfs-utils和rpcbind服务,创建共享目录

[root@localhost ~]# yum install -y nfs-utils rpcbind
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
软件包 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 已安装并且是最新版本
软件包 rpcbind-0.2.0-49.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@localhost ~]# mkdir /share/{xy101,xy102} -p
[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
[root@localhost ~]# cat /etc/exports
/share/xy101 192.168.10.0/24(ro)
/share/xy102 192.168.10.0/24(ro)
[root@localhost ~]# systemctl enable --now 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.10.0/24
/share/xy101 192.168.10.0/24

配置节点服务器(192.168.10.11和192.168.10.12)

1、永久关闭防火墙并禁止开机自启

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
etc/selinux/config
SELINUX=disabled

2、查看并下载nginx服务

通过下载rpm安装包下载

[root@localhost network-scripts]# cd /opt
[root@localhost opt]# ls
nginx-1.24.0-1.el7.ngx.x86_64.rpm  rh
[root@localhost opt]# rpm -ivh nginx-1.24.0-1.el7.ngx.x86_64.rpm
[root@localhost opt]# systemctl start nginx

3、挂载共享目录 

[root@localhost ~]# mount 192.168.10.13:/share/xy101 /usr/share/nginx/html/
[root@localhost ~]# ls !$
ls /usr/share/nginx/html/
test.html

4、修改lo:0网卡地址(VIP)

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# ls
ifcfg-ens33  ifdown-eth   ifdown-post    ifdown-TeamPort  ifup-eth   ifup-plip    ifup-sit       init.ipv6-global
ifcfg-lo     ifdown-ib    ifdown-ppp     ifdown-tunnel    ifup-ib    ifup-plusb   ifup-Team      network-functions
ifcfg-lo:0   ifdown-ippp  ifdown-routes  ifup             ifup-ippp  ifup-post    ifup-TeamPort  network-functions-ipv6
ifdown       ifdown-ipv6  ifdown-sit     ifup-aliases     ifup-ipv6  ifup-ppp     ifup-tunnel
ifdown-bnep  ifdown-isdn  ifdown-Team    ifup-bnep        ifup-isdn  ifup-routes  ifup-wireless
[root@localhost network-scripts]# vim ifcfg-lo:0
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# systemctl restart nginx
[root@localhost network-scripts]# systemctl enable  nginx

 vim /etc/sysconfig/network-scripts/ifcfg-lo:0

5、将ip绑定到回环接口 (lo:0)

[root@localhost network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.10.2    0.0.0.0         UG    100    0        0 ens33
192.168.10.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@localhost network-scripts]# route add -host 192.168.10.100 lo:0
[root@localhost network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.10.2    0.0.0.0         UG    100    0        0 ens33
192.168.10.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.10.100  0.0.0.0         255.255.255.255 UH    0      0        0 lo
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
[root@localhost network-scripts]# systemctl restart nginx

6、修改内核参数

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
[root@localhost opt]# 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

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

配置负载调度器(192.168.10.105)

1、初始化

systemctl stop firewalld.service
setenforce 0

2、下载ipvsadm

yum install -y ipvsadm

[root@localhost ~]# touch /etc/sysconfig/ipvsadm
[root@localhost ~]# systemctl start ipvsadm
[root@localhost ~]# systemctl status ipvsadm
[root@localhost ~]# systemctl enable ipvsadm
Created symlink from /etc/systemd/system/multi-user.target.wants/ipvsadm.service to /usr/lib/systemd/system/ipvsadm.service.
[root@localhost ~]# modprobe ip_vs
[root@localhost ~]# lsmod

3、配置虚拟 IP 地址

vim ifcfg-ens33:0

4、调整 proc 响应参数

[root@localhost network-scripts]# vim ifcfg-ens33:0
[root@localhost network-scripts]# vim /etc/sysctl.conf
[root@localhost 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

5、配置负载分配策略

[root@localhost 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@localhost network-scripts]# ipvsadm -C
[root@localhost network-scripts]# ipvsadm -A -t 192.168.10.105:80 -s rr
[root@localhost network-scripts]# ipvsadm -a -t 192.168.10.105:80 -r 192.168.10.106:80 -g
[root@localhost network-scripts]# ipvsadm -a -t 192.168.10.105:80 -r 192.168.10.108:80 -g
[root@localhost network-scripts]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  localhost.localdomain:http rr         
  -> 192.168.10.106:http          Route   1      0          0         
  -> 192.168.10.108:http          Route   1      0          0         
[root@localhost network-scripts]# ipvsadm-save -n > /opt/ipvsadm.bak
[root@localhost network-scripts]# cat !$
cat /opt/ipvsadm.bak
-A -t 192.168.10.105:80 -s rr
-a -t 192.168.10.105:80 -r 192.168.10.105:80 -g -w 1
-a -t 192.168.10.105:80 -r 192.168.10.106:80 -g -w 1
-a -t 192.168.10.105:80 -r 192.168.10.108:80 -g -w 1

测试

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

[root@localhost ~]# vim /etc/nginx/nginx.conf 
[root@localhost ~]# systemctl restart nginx
[root@localhost ~]# 

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-06-16 00:44:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-16 00:44:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-16 00:44:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-16 00:44:04       20 阅读

热门阅读

  1. MPLS VPN1

    MPLS VPN1

    2024-06-16 00:44:04      9 阅读
  2. 嵌入式linux中pinctrl子系统驱动用法分析

    2024-06-16 00:44:04       7 阅读
  3. 光流法大全

    2024-06-16 00:44:04       12 阅读
  4. 设计模式之服务定位模式

    2024-06-16 00:44:04       8 阅读
  5. SpringCloud框架的复习(面试)

    2024-06-16 00:44:04       9 阅读
  6. ORDER BY FIELD

    2024-06-16 00:44:04       7 阅读
  7. C语言题目:排序问题1

    2024-06-16 00:44:04       6 阅读
  8. 0-1 背包问题(动态规划 查询背包元素)

    2024-06-16 00:44:04       3 阅读
  9. 安装nginx的几种方式

    2024-06-16 00:44:04       5 阅读
  10. 游戏心理学Day15

    2024-06-16 00:44:04       7 阅读