LVS-DR模式

2023-12-17 04:53:06

目录

一、DR模式工作原理

二、DR模式特点

三、 DR模式中的问题

四、LVS-DR模式部署实验

1、准备nfs服务器

2、准备节点服务器

3、准备调度器

4、浏览器测试


一、DR模式工作原理

1、客户端通过VIP发送请求报文到调度器,请求的数据报文源IP地址是客户端IP(CIP),目标 IP 是 VIP,到达调度器的内核空间

2、调度器通过调度算法选择最合适的节点服务器,并重新封装数据报文(将源MAC改为调度器的MAC,目的MAC改为节点服务器的MAC地址,不改变CIP和VIP),再通过交换机转发请求给节点服务器

3、节点服务器收到请求报文后,确认目的MAC和目的IP无误(节点服务器事先绑定了VIP)后解包并发送到应用层进行处理

4、节点服务器在返回响应报文前,会先重新封装报文(源IP为VIP,目的为客户端IP),再将响应报文先通过lo接口传送给物理网卡,再通过物理网卡发送给客户端

?5、客户端将收到回复报文,会认为得到了正常的服务,而不知道是哪一台服务器处理的

二、DR模式特点

1、调度器 和 节点服务器 必须在同一个物理网络中

2、节点服务器可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对 RIP 进行直接访问,一般很少使用

3、调度器作为群集的访问入口,但不作为网关使用

4、所有的请求报文经由 调度器,但回复响应报文不能经过 调度器

5、节点服务器的网关不允许指向调度器的 IP,即节点服务器发送的数据包不允许经过调度器

6、节点服务器上的 lo 接口配置 VIP 的 IP 地址

三、 DR模式中的问题

1、在路由器发送ARP广播发送到集群时,因为调度器和节点服务器连接在相同的网络上,它们都会收到ARP广播。但是只有前端的调度器应该进行响应,节点服务区不应该进行响应,否则路由器的ARP缓存表会紊乱。

解决办法:针对节点服务器进行处理,使其不响应针对VIP的ARP请求

  • 使用虚接口lo:0承载节点服务器的VIP地址
  • 设置内核参数arp_ignore=1(vim /etc/sysctl.conf),使系统只响应目的IP为本地物理网卡IP的ARP请求

2、节点服务器返回报文(源地址是VIP地址),经过路由器转发,重新封装报文时需要先获取路由器的MAC地址。节点服务器发送ARP请求时,Linux默认使用IP包的源IP地址(VIP地址)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址。路由器收到ARP请求后,将跟新ARP表项,原有的VIP对应调度器的MAC地址会被更新为VIP对应的节点服务器的MAC地址。

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

总结:解决ARP紊乱两个问题的设置方法

vim /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore = 1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#节点服务器只响应目的IP为物理网卡的ARP请求? ? ?
net.ipv4.conf.lo.arp_announce = 2? ? ? ? ? ? ? ? ? ? ? ? ? #节点服务器不使用IP包的源IP(VIP)来作为ARP请求报文的源IP地址,而采用发送接口的IP来作为ARP请求报文的源IP地址
net.ipv4.conf.all.arp_ignore = 1? ? ? ? ? ? ? ? ? ? ? ? ?
net.ipv4.conf.all.arp_announce = 2? ? ? ? ? ? ? ? ? ??

四、LVS-DR模式部署实验

1、准备nfs服务器

①关闭防火墙和安全机制

②确认rpcbind和nfs-utils两个程序是否安装,如果没有安装使用yum安装即可

③准备共享目录,并创建共享文件

④准备共享文件

vim? /etc/exports

⑤启动rpcbind和nfs-utils(注意启动的先后顺序)

systemctl enable --now?rpcbind nfs

⑥发布共享

exportfs -rv

2、准备节点服务器

①关闭防火墙和安全机制

②检测nfs服务器的文件是否成功共享

③安装nginx

④查看nginx配置文件,获取nginx根目录位置

⑤挂载nfs服务器共享文件到nginx根目录位置

先把nginx根目录中的50x.html 和 index.html文件移动到opt目录

mount -a 刷新

最后再把移到opt目录中的文件移回来? ?mv? /opt/*.html? /usr/local/nginx/html/

⑥关闭nginx长连接

vim? /usr/local/nginx/conf/nginx.conf

重启nginx

⑦使用curl命令验证

⑧修改网卡配置文件,把网关地址和dns地址删除

vim /etc/sysconfig/network-scripts/ifcfg-ens33

systemctl restart network

⑨修改内核参数

vim /etc/sysctl.conf

sysctl -p

⑩设置lo网卡

cd /etc/sysconfig/network-scripts/

cp ifcfg-ens33 ifcfg-lo:0

vim ifcfg-lo:0

ifup lo:0

?添加路由(将访问VIP的数据报文限制在本地,避免通信紊乱)

3、准备调度器

①关闭防火墙和安全机制

②设置虚拟网卡

?cd /etc/sysconfig/network-scripts/

vim ifcfg-ens33:0

ifup ens33:0

③修改内核参数

vim /etc/sysctl.conf

sysctl -p

④加载模块

⑤配置调度策略

先使用本地yum源安装ipvsadm工具:yum -y install ipvsadm

再创建ipvsadm文件:ipvsadm-save > /etc/sysconfig/ipvsadm 或 touch? /etc/sysconfig/ipvsadm

启动ipvsadm:systemctl start ipvsadm

4、浏览器测试

文章来源:https://blog.csdn.net/lcy913/article/details/135031703
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。