lvs的DR模式和keepalive的脑裂

DR模式:

lvs的三种模式 nat 地址转换

DR 直接路由模式

tun 隧道模式

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

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

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

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

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

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

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

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

修改内核参数:

arp_igrone=1

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

2、返回报文时,vip地址还在,怎么样能让客户端来接收到响应。

arp_announce=2

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

节点服务器的配置:

DR模式的实现:

nginx1 RS1 192.168.233.100

nginx2 RS2 192.168.233.110

vip 192.168.233.200

test1 调度器 192.168.233.10

test2 客户端 192.168.233.20

route add -host 192.168.233.100 dev lo:0

设置ip地址为192.168.233.100的

关闭 调度器(test1),客户端(test2),rs1(nginx1),rs2(nginx2)的防火墙和防御机制

[root@test1 ~]# systemctl stop firewalld
[root@test1 ~]# setenforce 0

 调度器加载内核 安装 ipvsadm 工具

[root@test1 ~]# modprobe ip_vs
[root@test1 ~]# yum -y install ipvsadm*

创建vip地址

[root@test1 ~]# cd /etc/sysconfig/network-scripts/
[root@test1 network-scripts]# vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=YES
IPADDR=192.168.233.200
NETMASK=255.255.255.255
[root@test1 network-scripts]# ifup ens33:0

修改调度器的响应参数

[root@test1 network-scripts]# 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重定向消息

指定vip和负载均衡的算法

[root@test1 opt]# ipvsadm -C
[root@test1 opt]# ipvsadm -A -t 192.168.233.200:80 -s rr
#指定vip和负载均衡的算法

添加真实服务器指定模式和备份

[root@test1 opt]# ipvsadm -a -t 192.168.233.200:80 -r 192.168.233.100:80 -g
[root@test1 opt]# ipvsadm -a -t 192.168.233.200:80 -r 192.168.233.110:80 -g
[root@test1 opt]# ipvsadm-save /etc/sysconfig/ipvsadm
[root@test1 opt]# systemctl restart ipvsadm

配置2台真实服务器(nginx1 nginx2)   

设置2台服务器的访问页面为nginx1和nginx2

[root@nginx1 ~]# vim /usr/local/nginx/html/index.html
                 nginx1
[root@nginx1 ~]# systemctl restart nginx
[root@nginx2 ~]# vim /usr/local/nginx/html/index.html
                 nginx2
[root@nginx2 ~]# systemctl restart nginx

自己访问自己测试一下给2台服务器回环地址做一个回环接口

[root@nginx1 ~]# cd /etc/sysconfig/network-scripts/
[root@nginx1 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@nginx1 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.233.200
NETMASK=255.255.255.255
ONBOOT=yes
[root@nginx1 network-scripts]# ifup lo:0

设置ip地址为192.168.233.100的值添加到回环接口,做为lvs的vip,通过路由的模式转发到RS,能让vip识别到真实的服务器

[root@nginx1 network-scripts]# route add -host 192.168.233.200 dev lo:0

调整真实服务器的内核响应

[root@nginx1 ~]# 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请求

测试结果

lvs的三种工作模式:

NAT DR TUN

优点: 地址转换 性能最好 WAN,可以实现较远距离的数据包传送

配置简单 专用通道

缺点: 性能瓶颈 不支持跨网段 需要开通vpn(花钱)

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

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

面试题:

简述lvs的三种模式和他们的区别

面试题:

keepalive的脑裂怎么解决?

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

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

高可用的HA架构

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

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

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

1、组播地址:

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

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

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

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

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

相关推荐

  1. LVSDR模式

    2024-07-11 23:44:06       19 阅读
  2. Redis问题

    2024-07-11 23:44:06       45 阅读
  3. Zookeeper中

    2024-07-11 23:44:06       27 阅读
  4. 基于httpdlvsdr模式简单测试

    2024-07-11 23:44:06       38 阅读
  5. LVS实战】05 keepalived问题解决方案

    2024-07-11 23:44:06       40 阅读

最近更新

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

    2024-07-11 23:44:06       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 23:44:06       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 23:44:06       58 阅读
  4. Python语言-面向对象

    2024-07-11 23:44:06       69 阅读

热门阅读

  1. Vue3 + Vite项目使用SVG图片

    2024-07-11 23:44:06       19 阅读
  2. 代码随想录-DAY⑤-哈希表——leetcode 242 | 349 | 202

    2024-07-11 23:44:06       22 阅读
  3. Python爬虫-requests模块

    2024-07-11 23:44:06       25 阅读
  4. AIGC各个应用场景下的模型选择

    2024-07-11 23:44:06       24 阅读
  5. 在Linux中使用Typora将Markdown文档导出为docx格式

    2024-07-11 23:44:06       19 阅读
  6. 编程语言与数据结构的关系:深度解析与探索

    2024-07-11 23:44:06       21 阅读
  7. 华为OD机考题(HJ108 求最小公倍数)

    2024-07-11 23:44:06       18 阅读
  8. 探究kubernetes 探针参数periodSeconds和timeoutSeconds

    2024-07-11 23:44:06       24 阅读
  9. 《大语言模型》赵鑫

    2024-07-11 23:44:06       20 阅读