当前位置:   article > 正文

lvs集群DR模式_lvs结构类型 dr

lvs结构类型 dr

lvs集群DR模式

lvs的三种模式 nat 地址转换

​ DR 直接路由模式

​ tun 隧道模式

DR模式的特点

调度器在整个lvs集群当中是最重要的,在nat模式下,即负责接受请求,同时根据负载均衡的算法转发流量,响应发送给客户端

DR模式:调度器依然负责接受请求,同时也根据负载均衡算法转发流量到RS,响应直接由RS响应给客户端

直接路由 Driect Routing 是一种二层转模式。二层转发的是数据帧。根据源mac地址和目的mac地址进行转发。

不会修改数据包源ip和目的ip。根据数据包的mac地址进行转发。

DR模式下,lvs也是维护一个虚拟的ip地址,所有的请求都是发送到这个vip,既然是走二层转发,当客户端的请求到达调度之后,根据负债均衡的算法选择一个RS,修改vip服务器的目的mac变成RS的mac地址,RS智力完请求之后,根据报文当中客户端的源mac地址直接把响应发送到客户端即可,不需要走调度器

在这里插入图片描述

1、调度器的ip地址和RS的ip要在同一网段
数据才能进行二层转发。
2、RS是一个公网地址,互联网可以直接访问
RS的地址(不用)
3、DR模式是走内核转发,内核来判断数据包的地址,根据RS的地址把数据包重新封装,修改mac地也址。
4、调度器的地址只可以做集群访问的入口,不能作为网关
5、所有的RS上的lo(本地回环地址)都要配置vip地址。

问题

1、调度器配置了vip,RS上 也配置了vip地址

vip地址冲突,调度器和rs都在同一网段,arp通信的紊乱。因为是整个局域网的广播,所有的设备都收到了

怎么把lo这个回环的响应把它屏蔽掉,只有本机的物理ip地址响应

修改内核参数

arp_ignore=1

系统的物理ip地址才会响应ARP请求,lo不会响应ARP请求

2、返回报文时,vip地址还在,怎么让客户端来响应

arp_announce=2

系统不使用ip数据包的源地址来响应ARP请求,直接发送物理接口的ip地址

DR模式的实现:

nginx1 RS1 192.168.39.40
nginx2 RS2 192.168.39.50
vip	192.168.39.100
test1 调度器 192.168.39.30
test2 客户端 192.168.39.60

test1
关闭防火墙
yum -y ipvsadm*
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设备,禁止发送icmp重定向消息
sysctl -p

vim /etc/sysconfig/network-scripts/ifcg-ens33:0
ipaddr=192.168.39.100

ipvsadm -A -t 192.168.39.100:80 -s rr
ipvsadm -a -t 192.168.39.100:80 -r 192.168.39.50:80 -g
ipvsadm -a -t 192.168.39.100:80 -r 192.168.39.40:80 -g
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl restart ipvsadm.service

nginx1
vim /usr/local/nginx/html/index.html
this is nginx1

vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.39.100
NETMASK=255.255.255.255
ONBOOT=yes

systemctl restart network

vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore=1
#设置回环接口忽略来自任何接口的ARP请求
net.ipv4.conf.lo.arp_announce=2
#设置回环地址仅仅公告本地的ip地址,但是不响应ARP请求
net.ipv4.conf.all.arp_ignore=1
#设置所有接口忽略来自任何接口的ARP请求
net.ipv4.conf.all.arp_announce=2
#设置所有接口仅仅公告本地的ip地址,但是不响应ARP请求

nginx2
vim /usr/local/nginx/html/index.html
this is nginx1

vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.39.100
NETMASK=255.255.255.255
ONBOOT=yes

systemctl restart network

vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore=1
#设置回环接口忽略来自任何接口的ARP请求
net.ipv4.conf.lo.arp_announce=2
#设置回环地址仅仅公告本地的ip地址,但是不响应ARP请求
net.ipv4.conf.all.arp_ignore=1
#设置所有接口忽略来自任何接口的ARP请求
net.ipv4.conf.all.arp_announce=2
#设置所有接口仅仅公告本地的ip地址,但是不响应ARP请求

在客户机test2上
curl 192.168.39.100
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75

lvs的三种工作模式

​ NAT DR TUN

优点 地址转换,配置简单 性能最好 WAN,可以实现较远距离的数据包传输

缺点 性能瓶颈 不支持跨网段 专用通道,必须要开通vpn(花钱)

RS的要求 无限制 必须要禁止非物理接口的ARP响应 支持隧道模式

RS的数量 10-20台 100台 100台

修改lvs集群
ipvsadm -E -t 192.168.233.100:80 -s wrr
ipvsadm -e-t 192.168.233.100:80 -r 192.168.233.61:80 -w 3
  • 1
  • 2
  • 3

keepalive的脑裂怎么解决

lvs集群当中的高可用架构 只是针对调度器的高可用

基于vrrp来实现调度器的主和备。

高可用的HA架构

主调度器和备调度器(多台)

在主调度器正常工作的时候,备完全处理冗余状态(待命)。不参与集群的运转,只有当主调度器出现故障时,备才会承担主调度器的作用。主调度器回复功能之后,主继续作为集群的入口,备继续处理冗余状态(取决于优先级)

keepalive基于vrrp协议来实现lvs高可用的方案

1、组播地址:

224.0.0.18 根据组播地址来进行通信,主和备之间发送报文,确定对方是否存活

2、根据优先级的大小来确定主和备的位置

3、故障切换,主挂了,备来继续工作,主恢复了,备继续等待

4、主和备指之间的切换是vip地址的切换

keepalive是专门为了lvs而出现的,但是不是lvs专用的

在这里插入图片描述

lvs和nginx做负载均衡的区别

lvs是四层转发,内核态,ip+端口,四层代理

nginx 四层代理也可以七层代理

lvs(DR)+nginx+tomcat

lvs实现四层转发+nginx实现七层转发(动态)

访问lvs的vip地址可以实现动静分离

nginx1 RS1 192.138.39.40
nginx2 RS2 192.168.39.50
tomcat1 192.168.39.60
tomcat2 192.168.39.70
vip	192.168.39.100
test1 调度器 192.168.39.30

关闭防火墙
yum -y ipvsadm*
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设备,禁止发送icmp重定向消息
sysctl -p

vim /etc/sysconfig/network-scripts/ifcg-ens33:0
ipaddr=192.168.39.100

ipvsadm -A -t 192.168.39.100:80 -s rr
ipvsadm -a -t 192.168.39.100:80 -r 192.168.39.50:80 -g
ipvsadm -a -t 192.168.39.100:80 -r 192.168.39.40:80 -g
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl restart ipvsadm.service

nginx1
vim /usr/local/nginx/html/index.html
this is nginx1

vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.39.100
NETMASK=255.255.255.255
ONBOOT=yes

systemctl restart network

vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore=1
#设置回环接口忽略来自任何接口的ARP请求
net.ipv4.conf.lo.arp_announce=2
#设置回环地址仅仅公告本地的ip地址,但是不响应ARP请求
net.ipv4.conf.all.arp_ignore=1
#设置所有接口忽略来自任何接口的ARP请求
net.ipv4.conf.all.arp_announce=2
#设置所有接口仅仅公告本地的ip地址,但是不响应ARP请求

nginx2
vim /usr/local/nginx/html/index.html
this is nginx1

vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.39.100
NETMASK=255.255.255.255
ONBOOT=yes

systemctl restart network

vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore=1
#设置回环接口忽略来自任何接口的ARP请求
net.ipv4.conf.lo.arp_announce=2
#设置回环地址仅仅公告本地的ip地址,但是不响应ARP请求
net.ipv4.conf.all.arp_ignore=1
#设置所有接口忽略来自任何接口的ARP请求
net.ipv4.conf.all.arp_announce=2
#设置所有接口仅仅公告本地的ip地址,但是不响应ARP请求

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
nginx1中	/usr/local/nginx/conf
vim nginx.conf
http中{
	upstream tomcat {
		server 192.168.39.60:8080;
		server 192.168.39.70:8080;
	}
	location ~ .*\.jsp$ {
			proxy_pass http://tomcat_server;
			proxy_set_header HOST $host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		}
}


nginx2中	/usr/local/nginx/conf
vim nginx.conf
http中{
	upstream tomcat {
		server 192.168.39.60:8080;
		server 192.168.39.70:8080;
	}
	location ~ .*\.jsp$ {
			proxy_pass http://tomcat_server;
			proxy_set_header HOST $host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		}
}

tomcat1
在tomcat1中
vim /usr/local/tomcat/tomcat2/conf/server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />

在/usr/local/tomcat/webapps中
mkdir test
vim index.jsp
this is tomcat1

tomcat2
在tomcat1中
vim /usr/local/tomcat/tomcat2/conf/server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />

在/usr/local/tomcat/webapps中
mkdir test
vim index.jsp
this is tomcat2

在浏览器中ping 192.168.39.100可以实现静态轮询
ping 192.168.39.100/index.jsp 可以实现动态轮询
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/965126
推荐阅读
相关标签
  

闽ICP备14008679号