部署LVS-DR群集

一.工作原理

        LVS-DR模式,DirectorServer作为群集的访问入口,不作为网关使用,节点Director Server与RealSenver需要在同一个网络中,返回给客户端的数据不需要经过Director Server为了响应对整个群集的访问,DirectorServer与RealServer都需要配置VIP地址,

二.数据包流向分析

  1. 客户端发送请求到Director Server,请求的数据报文(源IP是CIP目标IP是VIP)到达内核空间。
  2. Director Server和Real Server在同一个网络中,数据通过二层数据链路层来传输。
  3. 内核空间判断数据包的目标IP是本机VIP,此时IPVS比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源MAC地址为Director Server的MAC地址,修改目标MAC地址为RealServer的MAC地址,源IP地址与目标IP地址没有改变,然后将数据包发送给Real Server
  4. 如果到达Real Server的请求报文的MAC地址是自身的MAC地址,就接收此报文。数据包重新封装报文(源IP地址为VIP,目标IP为CIP),将响应报文通过lo接口传送给物理网卡然后向外发出。
  5. RealServer直接将响应报文传送到客户端

三.LVS-DR的特点

  1. Director Server和Real Server必须在同一个物理网络中。
  2.  RealServer可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对RIP进行直接访问
  3. 所有的请求报文经由Director Server转发,但回复响应报文不能经过DirectorServer
  4. Real Server的网关不允许指向Director Server IP,即不允许数据包经过Director Server
  5. Real Server上的lo接口配置VIP的IP地址

四.案例:直接路由模式(LVS-DR) 

1.实验环境

 2.配置负责调度器

(1)配置虚拟IP地址VIP
cd /etc/sysconfig/network-scripts
cp ifcfg-ens33 ifcfg-ens33:0        #创建虚拟接口,绑定虚拟VIP地址
vim ifcfg-ens33:0

IPADDR=192.168.10.172
NAME=ens33:0
DEVICE=ens33:0
 (2)调整响应proc响应参数

        对于DR集群模式来说,由于LVS负载调度器和个节点公用相同的虚拟ip地址,应关闭linux内核的重定向参数响应。

net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.defaults.send_redirects=0
net.ipv4.conf.ens33.send_redirects=0

sysctl -p 重新加载内核文件参数
(3)配置负载分配策略

在需要当LVS服务器的主机上配置以下内容:

[root@localhost ~]#yum -y install ipvsadm
[root@localhost ~]#ipvsadm -c                            #清除原有策略
[root@localhost ~]#ipvsadm -C
[root@localhost ~]# ipvsadm -A -t 192.168.10.172:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.10.172:80 -r 192.168.10.102 -g -w 1
[root@localhost ~]# ipvsadm -a -t 192.168.10.172:80 -r 192.168.10.103 -g -w 1
[root@localhost ~]# ipvsadm-save
-A -t localhost.localdomain:http -s rr
-a -t localhost.localdomain:http -r 192.168.10.102:http -g -w 1
-a -t localhost.localdomain:http -r 192.168.10.103:http -g -w 1

3.配置web节点服务器

        使用DR模式时,节点服务器也需要配置VIP地址,并调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发送冲突。除此以外,web服务的配置与NAT方式类似。

(1)配置虚拟IP地址(VIP)

        在每个节点服务器,同样需要具有VIP地址192.168.10.172,但此地址仅用做发送web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口lo:0来承载VIP地址,并为本机添加一条路由记录,将访问VIP的数据限制在本地,以避免通信混乱。

[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vi ifcfg-lo:0

DEVICE=lo:0
NETMASK=255.255.255.255           \\子网掩码必须为255.255.255.255
IPADDR=192.168.10.172
ONBOOT=yes
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ifconfig
[root@localhost network-scripts]# cd 
[root@localhost ~]# vi /etc/rc.local

/sbin/route add -host 192.168.10.172 dev lo:0
[root@localhost ~]# route add -host 192.168.10.172 dev lo:0
(2)调整内核参数
[root@localhost ~]# vi /etc/sysctl.conf
添加:
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@localhost ~]# sysctl -p

备注:

  1. net.ipv4.conf.all.arp_ignore = 1

    • 设置为 1 表示内核在接收到 ARP 请求时,仅在具有请求 IP 地址的接口上响应。在 LVS-DR 中,负载均衡器通常不会响应来自客户端的 ARP 请求,而是让真实服务器来响应,简而言之,就是虚拟IP地址不能响应ARP请求。
  2. net.ipv4.conf.all.arp_announce = 2

    • 设置为 2 表示内核会优先使用接口上配置的源 IP 地址来发送 ARP 请求,而不会使用目标 IP 所在子网的广播地址作为源 IP。这有助于确保 ARP 请求能够到达目标主机,特别是在 LVS-DR 中,确保真实服务器可以正确响应 ARP 请求。
  3. net.ipv4.conf.default.arp_ignore = 1

    • 同样的设置,确保默认的网络接口配置在处理 ARP 请求时的行为与 net.ipv4.conf.all 相同。
  4. net.ipv4.conf.default.arp_announce = 2

    • 同样的设置,确保默认的网络接口配置在发送 ARP 请求时的行为与 net.ipv4.conf.all 相同。
  5. net.ipv4.conf.lo.arp_ignore = 1

    • 设置为 1 表示本地回环接口 (lo) 在处理 ARP 请求时,只在本地回环接口上响应。在 LVS-DR 中,通常不希望本地回环接口响应外部 ARP 请求。
  6. net.ipv4.conf.lo.arp_announce = 2

    • 设置为 2 表示本地回环接口在发送 ARP 请求时,优先使用本地回环接口上配置的源 IP 地址。
(3)安装httpd创建测试网页
[root@localhost ~]# yum -y install httpd

yum install nfs-utils

[root@localhost ~]# mount 192.168.10.105:/opt/wwwroot /var/www/html

[root@localhost ~]#vi /var/www/html/index.html

<h1>LVS负载均衡群集--测试页面01</h1>
(4)启用httpd服务
[root@localhost ~]# systemctl start httpd

4:在client上测试网站

http://192.168.10.172或在终端curl 192.168.10.172

测试时频繁刷新页面



也可以用脚本测试:

[root@localhost ~]# for i in $(seq 10); do curl http://192.168.10.172  ;done

5:在LVS调度器上查看LVS策略

[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.10.172:80 rr

  -> 192.168.10.102:80             Route   1      0          0         

  -> 192.168.10.103:80             Route   1      0          0  

相关推荐

  1. 部署LVS-DR

    2024-07-09 21:50:07       21 阅读
  2. 部署LVS-DR

    2024-07-09 21:50:07       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 21:50:07       50 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 21:50:07       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 21:50:07       43 阅读
  4. Python语言-面向对象

    2024-07-09 21:50:07       54 阅读

热门阅读

  1. 精准控制:Eureka服务续约间隔配置全指南

    2024-07-09 21:50:07       24 阅读
  2. 部署LVS-DR群集

    2024-07-09 21:50:07       24 阅读
  3. WordPress禁止用户注册某些用户名

    2024-07-09 21:50:07       22 阅读
  4. go内存返还系统相关代码

    2024-07-09 21:50:07       17 阅读
  5. 如何使用 Puppeteer 避免机器人检测?

    2024-07-09 21:50:07       22 阅读
  6. 面试经典 150 题

    2024-07-09 21:50:07       19 阅读
  7. MySQL8之mysql-community-common的作用

    2024-07-09 21:50:07       22 阅读