Lvs _DR 模式
也是最常见的lv负载方式 DR DIRECT ROUTING 直接路由模式
DR模式工作过程
1 .客户端请求vip
2、LVS的调度器接受请求之后,根据算法选择一台后端的真实服务器, 请求转发到后端RS,请求的报 文的目的MAC地址,修改成后端真实服务器的MAC地址。转发。
3、后端真实服务器接受请求,处理完成之后,由于后端服务器直接把响应结果转发给客户端,响应报文中的目的MAC地址修改成客户端的MAC地址。直接把响应报文转发到客户端。
4、调度器,后端真实服务器都有vip地址,调度的地址和后端真实服务器在同一网段。
DR模式的特点:
1调度器的ip和真是服务器的ip必须在同一个物理网络中
2真实服务器的IP地址可以是私有地址,也可以是公网地址,如果配置的是公网,通过互联网直接可以访问RIP
3调度器只作为入口,但是不做网关(不转发数据包),要把服务器的转发功能关闭
4真实服务器的网关也不能指向调度器,真实服务器的数据不允许经过调度器
5后端真实服务器 基于lo接口配置vip 的Ip地址。
ARP协议:网络层协议将Ip地址解析为物理MAC地址
ARP 请求主机A和主机B
ARP解决局域网内部的通信,IP地址和MAC地址映射。
DR模式的调度器和后端服务器都在一个网段中,通过ARP请求实现
问题1:
由于调度器和后端真实服务器的都有相同的vip地址,导致响应冲突,ARP通信紊
对真实服务器进行处理,真实服务器不响应针对VIP的arp请求
VIP地址使用LO的虚拟地址:arp_ignore=1
后端真实服务器只响应目的IP为本地IP地址,也就是rip,后端服务器的真正IP地址 ens提供的地址
问题2;
返回报文使用的原地址还是vip,调度器也是vip怎么把响应返回到客户端不经过调度器呢后端真实服务器做一内核参数的优化,ARP_announce=2 系统不同使用ip数据吧的源地址,来设置arp 的请求 真实的物理网卡的地址
DR模式:核心就是响应客户端由后端的真实服务器完成,不需要经过调度器。
vip地址,调度器和后端服务器都要有vip地址
VIP地址:是暴露访问地址,调度器转发请求的标识,调度器和后端服务器进行通信,高可用dr 模式的高可用 其他所有的请求和响应都是禁用的
修改VIP的调度算法:
ipvsadm -E -t 192.168.233.100:80 -s wrr
修改权重:
TCP 192.168.233.100:80 wrr
#表示VIP地址,wrr负载均衡的调度算法
-> 192.1 68.233.20:80 Route 1 0 0
-> 192.1 68.233.30:80 Route 1 0 0
#指向后端的真实服务器
Forward:
# 负载均衡算法和负载均衡方式。route 就是DR模式
weight:
#后端服务器的轮询权重
ActiveConn:
#活跃连接,表示调取器正在处理的活动连接数这些连接正在进行传输数据或者正在进行交互。
InActConn:
#表示挡圈处于非活动状态的连接数。已经建立连接但是目前没有数据传输,第二个连接处于的等待状态。
DR实验步骤
如何实现DR模式的负载均衡:
调度器 20.0.0.20
集群1 20.0.0.30
集群2 20.0.0.40
NFS 20.0.0.50
vip地址 20.0.0.100
客户机随机
20.0.0.20:
systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# modprobe ip_vs
[root@localhost ~]# yum -y install ipvsadm
#配置公网vip地址
[root@localhost ~]# ifconfig ens33:0 20.0.0.100/24
[root@localhost ~]# ifconfig
#调度器的内核优化
[root@localhost ~]# vim /etc/sysctl.conf
#检测下
[root@localhost ~]# sysctl -p
调度器的内核优化
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 不发送重定向消息
#调度器上配置策略 添加vip地址 指定算法
[root@localhost ~]# ipvsadm -A -t 20.0.0.100:80 -s rr
[root@localhost ~]# ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.30:80 -g
[root@localhost ~]# ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.40:80 -g
[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@localhost ~]# systemctl restart ipvsadm.service
#查询当前配置的策略
[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 127.0.0.1:80 rr
-> 20.0.0.30:80 Route 1 0 0
-> 20.0.0.40:80 Route 1 0 0
#删除重新配
[root@localhost ~]# ipvsadm -D -t 20.0.0.100:80
No such service
[root@localhost ~]# ipvsadm -D -t 127.0.0.1:80
[root@localhost ~]# ipvsadm -ln
#已删除
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
#添加真实服务器地址
[root@localhost ~]# ipvsadm -A -t 20.0.0.100:80 -s rr
[root@localhost ~]# ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.30:80 -g
[root@localhost ~]# ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.40:80 -g
[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@localhost ~]# systemctl restart ipvsadm.service
[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 20.0.0.100:80 rr
-> 20.0.0.30:80 Route 1 0 0
-> 20.0.0.40:80 Route 1 0 0
20.0.50
[root@www ~]# systemctl stop firewalld
[root@www ~]# setenforce 0
[root@www ~]# mkdir /opt/kgc
[root@www ~]# mkdir /opt/benet
[root@www ~]#
#配置共享目录
[root@www ~]# vim /etc/exports
/opt/kgc 20.0.0.0/24(rw,sync)
/opt/benet 20.0.0.0/24(rw,sync)
[root@www ~]# chmod 777 /opt/kgc/ /opt/benet/
[root@www ~]# systemctl restart rpcbind
[root@www ~]# systemctl restart nfs
[root@www ~]# exportfs -rv
exporting 20.0.0.0/24:/opt/benet
exporting 20.0.0.0/24:/opt/kgc
[root@www ~]# showmount -e
#设置页面
[root@www ~]# cd /opt
[root@www opt]# echo "this is kgc" > kgc/index.html
[root@www opt]# echo "this is benet" > benet/index.html
20.0.0.30
[root@localhost ~]# systemctl restart nginx
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl restart nfs
#暴露功能共享目录
[root@localhost ~]# showmount -e 20.0.0.50
Export list for 20.0.0.50:
/opt/benet 20.0.0.0/24
/opt/kgc 20.0.0.0/24
[root@localhost ~]# mount 20.0.0.50:/opt/kgc /usr/share/nginx/html/
[root@localhost ~]# curl 20.0.0.30
this is kgc
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
#基于Lo 这个回环接口创建虚拟网卡 绑定vip
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
cp: overwrite ‘ifcfg-lo:0’? yes
[root@localhost network-scripts]# vim ifcfg-lo:0
#100dd
DEVICE=lo:0
ONBOOT=yes
IPADDR=20.0.0.100
NETMASK=255.255.255.255
#打开lo 已经有了
[root@localhost network-scripts]# ifup lo:0
[root@localhost network-scripts]# ifconfig
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 20.0.0.100 netmask 255.255.255.255
loop txqueuelen 1 (Local Loopback)
#把VIP的地址绑定到lo:0,作为LVs 的VIP地址,标识,告诉调度器,进行转发请求的ip 地址寻址
[root@localhost network-scripts]# route add -host 20.0.0.100 dev lo:0
#做内核化 只能让真实的ip地址作为访问请求 vip要给办掉
[root@localhost network-scripts]# 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请求全部忽略
#查看内核优化文件
[root@localhost network-scripts]# sysctl -p
20.0.0.40
[root@localhost ~]# systemctl restart nginx
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl restart nfs
#暴露功能共享目录
[root@localhost ~]# showmount -e 20.0.0.50
[root@localhost ~]# mount 20.0.0.50:/opt/benet /usr/local/nginx/html/
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
#100dd
DEVICE=lo:0
ONBOOT=yes
IPADDR=20.0.0.100
NETMASK=255.255.255.255
[root@localhost network-scripts]# ifup ifcfg-lo:0
[root@localhost network-scripts]# ifconfig
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 20.0.0.100 netmask 255.255.255.255
loop txqueuelen 1 (Local Loopback)
[root@localhost network-scripts]# route add -host 20.0.0.100 dev lo:0
回到30查看内核优化文件复制过来
[root@localhost network-scripts]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
#配置内核文件
[root@localhost network-scripts]# vim /etc/sysctl.conf
[root@localhost network-scripts]# sysctl -p