LVS-DR模式

1.DR模式

LVS-DR模式,也是最常用的lvs负载方式,DR (DIRECT ROUTING)直接路由模式

负载均衡器lvs调度器,只负责请求和转发到后端真实服务器,但是响应结果直接由后端服务器直接转发给客户端,不需要经过调度器的处理。可以减轻LVS调度器的负担,提高了系统的性能和稳定性。

2.LVS-DR模式的工作原理

1.客户端发送请求到vip

2.LVS的调度器接受请求之后,根据算法选择一台后端的真实服务器,请求转发到后端RS,请求的报文的目的MAC地址,修改成后端真实服务器的MAC地址,转发

3.后端真实服务器接受请求,处理完成之后,由于后端服务器直接把响应结果转发给客户端,响应报文中的目的的MAC地址修改成客户端的MAC地址,直接把响应报文客户端

4.调度器,后端真实服务器都有vip地址,调度器的地址和后端真实服务器在同一网段

3.DR模式的特点

1.调度器的ip和真实服务器的ip必须在同一个物理网络中

2.真实服务器的ip地址可以是私有地址,也可以是公网地址。(一般配私有地址,如果配置的是公网,通过互联网可以直接访问RIP)

3.调度器只作为入口,但是不做网关。要把服务器的转发功能关闭

4.后端真实服务器的网关也不能指向调度器,真实服务器的数据包不允许经过调度器

5.后端真实服务器上,基于LO接口配置VIP的ip地址。

4.VIP的作用

标识后端的真实服务器

保证调度器和后端服务器之间的通信,保证请求可以正确的转发到后端服务器

实现高可用和故障转移

5.问题一:由于调度器和后端真实服务器的都有相同的vip地址,导致响应冲突的问题,ARP通信紊乱

对真实服务器进行处理,真实服务器不响应针对VIP的ARP请求。

VIP地址使用LO的虚拟地址:arp_ignore=1

后端真实服务器只响应目的ip为本地ip,也就是RIP。后端服务器的真正IP地址。ens33网卡提供的地址

6.问题二:返回的报文使用的源地址还是VIP地址,调度器也是VIP,怎么把响应返回到客户端不经过调度器呢?

后端真实服务器做一个内核优化:arp_announce=2系统不使用ip数据包的源地址,来设置ARP的请求

真实的物理网卡的地址。

7.如何实现DR模式的负载均衡

test1:192.168.233.10 调度器

test2:192.168.233.20 web集群1

test3:192.168.233.30 web集群2

test4 NFS

VIP:192.168.233.100

客户端:随机选择

防火墙

systemctl stop firewalld

setenforce 0

首先调度器

test1:modprobe ip_vs

yum -y install ipvsadm

配置vip地址

ifconfig ens33:0 192.168.233.100/24

vim /etc/sysctl.conf

调度器的内核优化

net.ipv4.ip_forward = 0 #关闭服务器作为网关的转发功能

net.ipv4.conf.all.send_redirects = 0 #控制是否发送ICMP的重定向消息,禁止重定向

net.ipv4.conf.default.send_redirects = 0 #禁止默认网络接口,就是调度器的网卡,发送ICMP的重定向消息

net.ipv4.conf.ens33.send_redirects = 0 #指明网卡设备,ens33不发送重定向消息

sysctl -p

ipvsadm-save >/etc/sysconfig/ipvsadm

ipvsadm -A -t 192.168.233.100:80 -s rr

ipvsadm -a -t 192.168.233.100:80 -r 192.168.233.20:80 -g

ipvsadm -a -t 192.168.233.100:80 -r 192.168.233.30:80 -g

systemctl restart ipvsadm.service

ipvsadm -ln

test 4

mkdir /opt/kgc

mkdir /opt/benet

vim /etc/exports

chmod 777 /opt/kgc /opt/benet/

systemctl restart rpcbind

systemctl restart nfs

exportfs -rv

showmount -e

cd /opt

echo "thisi is kgc" > kgc/index.html

echo "thisi is benet" > benet/index.html

test2

yum -y install nginx

test3

yum -y install nginx

test2

systemctl restart nginx

systemctl restart rpcbind

systemctl restart nfs

showmount -e 192.168.233.40

mount 192.168.233.40:/opt/kgc /usr/share/nginx/html

curl 192.168.233.20

cd /etc/sysconfig/network-scriptrs/

cp ifcfg-lo ifcfg-lo:0

vim ifcfg-lo:0

100dd

ifup ifcfg-lo:0

ifconfig

route add -host 192.168.233.100 dev lo:0

把vip地址绑定到lo:0,作为LVS的vip地址,表示。告诉调度器进行转发请求的ip地址寻址。

vim /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore = 1

#设置lo忽略来自任何接口的arp请求

net.ipv4.conf.lo.arp_announce = 2

#设置lo接口仅会响应本地的ip地址,其他的接口arp请求,全部忽略

net.ipv4.conf.all.arp_ignore = 1

#所有接口忽略来自任务接口的arp请求

net.ipv4.conf.all.arp_announce = 2

#所有接口仅会响应本地的IP地址的ARP请求,其他的接口的ARP请求全部忽略

sysctl -p

test3:

systemctl restart nginx

mount 192.168.233.40:/opt/benet /usr/share/nginx/html

curl 192.168.233.30

cd /etc/sysconfig/network-scriptrs/

cp ifcfg-lo ifcfg-lo:0

vim ifcfg-lo:0

100dd

ifup ifcfg-lo:0

ifconfig

vim /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore = 1

#设置lo忽略来自任何接口的arp请求

net.ipv4.conf.lo.arp_announce = 2

#设置lo接口仅会响应本地的ip地址,其他的接口arp请求,全部忽略

net.ipv4.conf.all.arp_ignore = 1

#所有接口忽略来自任务接口的arp请求

net.ipv4.conf.all.arp_announce = 2

#所有接口仅会响应本地的IP地址的ARP请求,其他的接口的ARP请求全部忽略

sysctl -p

相关推荐
程序猿阿伟2 小时前
《C++音频降噪秘籍:让声音纯净如初》
开发语言·c++·网络协议
Tech_gis2 小时前
C++ 观察者模式
开发语言·c++·观察者模式
卑微求AC2 小时前
继电器原理及应用
c语言·开发语言·51单片机·嵌入式
曳渔3 小时前
Java-数据结构-反射、枚举 |ू・ω・` )
java·开发语言·数据结构·算法
laocooon5238578863 小时前
java 模拟多人聊天室,服务器与客户机
java·开发语言
风槐啊3 小时前
六、Java 基础语法(下)
android·java·开发语言
网安老伯3 小时前
【2024版】最新kali linux入门及常用简单工具介绍(非常详细)零基础入门到精通,收藏这一篇就够了_kalilinux
linux·运维·服务器·开发语言·web安全·网络安全·xss
laocooon5238578863 小时前
java类的混搭,
java·开发语言
爱写代码的小朋友3 小时前
Python 中的高阶函数与闭包
开发语言·python
番茄灭世神3 小时前
C语言的类型提升机制
c语言·开发语言