深入浅出 LVS 负载均衡(四)实操 DR 模型、Keepalived DR 模型的高可用

深入浅出 LVS 负载均衡系列:

  • 深入浅出 LVS 负载均衡(一)NAT、FULLNAT 模型原理
    • 两台计算机如何在互联网中通信
    • LVS 负载均衡
      • 通过修改数据包的「源 IP 地址」或 「目标 IP 地址」
        • NAT 模式
        • FULLNAT 模式
  • 深入浅出 LVS 负载均衡(二)DR、TUN 模型原理
    • LVS 负载均衡
      • 通过修改数据包的「目标 MAC 地址」
        • DR 模式
      • 通过二次封装数据包的「IP 报文」
        • TUN 模式
  • 深入浅出 LVS 负载均衡(三)实操 NAT、TUNNEL 模型、深入浅出 LVS 负载均衡(四)实操 DR 模型、Keepalived DR 模型的高可用
    • 使用 UCloud 云主机实操各个模型
    • 使用 Keepalived 实现 LVS-DR 的高可用

LVS(Linux Virtual Server)是一个虚拟服务器集群系统。工作在 OSI 模型的传输层,即四层负载均衡。LVS 本身实现了 NAT、DR、TUN 模型,这些模型仅做数据包的转发,而不会与客户端建立连接,成本低效率高。FULLNAT 基于 NAT 实现,LVS 本身不支持,需要额外对内核打补丁后才能使用。

本系列按照负载均衡器对数据包的处理方式分类,从计算机间通信的角度出发,浅谈 NAT、FULLNAT、DR、TUN 模型的实现原理。

之前介绍了 LVS 负载均衡 NAT、FULLNAT、DR、TUN 模型的实现原理。现在来动手实践一下~

实验环境

LVS 目前已经是 Linux 内核中的一部分,在内核中的模块叫做 ipvs,支持 NAT、DR、TUNNEL 模型。用户不能直接操作 ipvs 模块,需要安装交互软件 ipvsadm,使用 ipvsadm 和 ipvs 进行交互。


我使用 4 台 UCloud 云主机来搭建实验环境,创建云主机的时候选择分时购买,更划算一点。

  • 实验机器及环境
    • 4 台 UCloud 云主机,CentOS 7.9 64位,1 核 1 G,需要注意一下防火墙规则,我选择的是【Web服务器推荐】,开放 22、3389、80、443 的端口号,这个可以自行配置
      • 两台 Real Server:RS01、RS02,一台负载均衡服务器:LB01
      • RS01:10.23.190.76、RS02:10.23.122.152、LB01:10.23.21.184、LB02:10.23.115.100
      • VIP:10.23.88.247
    • RS01、RS02 安装 httpd,快速启动 http 服务器,且配置不同的请求响应
    • LB01、LB02 安装 ipvsadm、keepalived,并启动 ipvsadm、keepalived
  • 实验机器展示


    实验机器

DR 模式实操

回顾一下 DR 模式的特点

DR
  • DR 模式仅修改数据包的「目标 MAC 地址」,只有请求数据包需要经过负载均衡器,所以 DR 模式不支持对端口的转换
  • 真实服务器和负载均衡器必须在同一个网段,且真实服务器的默认网关不能是负载均衡器
  • 真实服务器的 lo 接口上需要配置 VIP 的 IP 地址,且真实服务器需要更改 ARP 协议,“隐藏” lo 接口上的 VIP

前置准备工作和 NAT 模式的一样,这里就不赘述了。

开始配置 DR 模式。

  • RS01、RS02

    • 修改 ARP 协议
      • echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
      • echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
      • echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
      • echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    • 在 lo 接口上配置 VIP
      • ifconfig lo:0 10.23.21.184 netmask 255.255.255.255
    • 验证配置
      • ifconfig


        ifconfig
  • LB01

    • 配置路由入口规则
      • ipvsadm -A -t 10.23.21.184:80 -s rr
    • 配置路由出口规则
      • ipvsadm -a -t 10.23.21.184:80 -r 10.23.190.76 -g -w 1
      • ipvsadm -a -t 10.23.21.184:80 -r 10.23.122.152 -g -w 1
    • 如果 VIP 和本机地址不一致,要配置 VIP(我这里就不用了)
      • 配置 VIP
        • ifconfig eth0:0 VIP/24
    • 验证配置
      • ipvsadm -ln


        ipvsadm
      • ifconfig


        ifconfig

配置完成,现在我们来验证下 DR 模式下的负载均衡。

发现直接在本地请求 LB01 的外网 IP 地址时,一直处于等待状态,最终报错:Operation timed out。

我们先来看下 LB01 有没有正确的收到连接请求

  • 查看 LB01 记录的连接信息:ipvsadm -Lnc


    ipvsadm

可以看到 LB01 正确的收到了连接请求,并且转发给了 RS02。接下来我们登陆到 RS02 上,检查 RS02 是否接收到了数据包。

  • 查看 RS02 上的 TCP 连接信息:netstat -natp | grep 10.23.21.184


    netstat

RS02 收到了数据包,并且也发出了返回的数据包,返回数据包的 IP 地址和端口号也和发出的一致。所以可以合理地猜测,问题出在由 RS02 直接返回数据包给客户端的过程中。那么只有两种情况,RS02 无法连接到客户端或者客户端拒绝接收这个数据包。

检查 RS02 是否能正常连接到客户端

  • ping 106.75.220.2


    ping

RS02 和客户端可以正常请求访问。那么应该是客户端拒绝接收了这个数据包,抓包来看下,客户端是否有收到这个数据包。

再次请求 LB01,并查看客户端和 LB01 交互的数据包

  • tcpdump host 106.75.253.112 -nne


    tcpdump

发现只有发出的数据包,而没有收到的数据包。现在情况是:RS02 发出了数据包,但是客户端却没收到。那只有一种可能,就是云主机的 EIP 转发数据包的时候,由于某种条件限制,扔掉了这个数据包。如果是这样的话,在内网环境中应该是可以正常访问的。我们再申请一台在相同网段的云主机,验证一下。

果然是可以正常访问的,后来和官方交流之后也证实了这一点。(我猜测应该是出于对安全的考虑,所有进出的数据包,IP 地址 和 MAC 地址必须和本机一致,否则数据包会被丢弃。)

到此实验配置完成,验证也完成~

Keepalived 实现 DR 模型的高可用性实操

在成功搭建 DR 模型之后,不由得思考这么一个问题,如果负载均衡服务器宕机了怎么办?负载均衡服务器承载着客户端对服务端的所有请求路由,如果一旦宕机,影响的是整个系统不可用。所以我们需要一些措施来保证负载均衡的高可用性。

最简单的办法就是将单点部署的负载均衡服务器变成多点部署。如果当前使用的节点出现问题,迅速地切换到另一个节点上,这样就可以保证系统的整个可用性。那么,现在负载均衡服务器单点故障的问题就转换成多点部署的切换问题。

我们先来看看解决多点部署的切换问题,需要什么条件?首先我们需要发现问题,即需要不断地检查当前节点是否正常,如果当前节点不正常的话,需要快速地切换到其他的节点上。keepalived 就是这样工作的。

我们来实际操作一下~

  • RS01、RS02 和 DR 模型实操类似,只不过我们要重新申请一个 VIP:10.23.88.247,绑定在 RS01、RS02 的 lo:0 上


    • ifconfig lo:0 10.23.88.247 netmask 255.255.255.255 broadcast 10.23.88.247 up
  • LB01、LB02

    • 安装 ipvsadm、keepalived

      • yum install ipvsadm keepalived -y
    • 修改 keepalived 配置文件

      • cp keepalived.conf keepalived.conf.bak
      ! Configuration File for keepalived
      
      vrrp_instance VI_1 {
          state MASTER  // 备节点:BACKUP
          interface eth0
          virtual_router_id 51
          priority 100  // 备节点:50
          advert_int 1
          authentication {
              auth_type PASS
              auth_pass 1111
          }
          virtual_ipaddress {
              10.23.88.247 dev eth0
          }
      }
      
      virtual_server 10.23.88.247 80 {
          delay_loop 6
          lb_algo rr
          lb_kind DR
              nat_mask 255.255.0.0
          persistence_timeout 0
          protocol TCP
      
          real_server 10.23.190.76 80 {
              weight 1
                      HTTP_GET {
                      url {
                              path /
                      status_code 200
                      }
                  connect_timeout 3
                  nb_get_retry 3
                  delay_before_retry 3
                  }
          }
          real_server 10.23.122.152 80 {
              weight 1
              HTTP_GET {
                  url {
                      path /
                      status_code 200
                  }
                  connect_timeout 3
                  nb_get_retry 3
                  delay_before_retry 3
              }
          }
      }
      
      • 重新启动 keepalived
        • systemctl restart keepalived

验证 keepalived DR 模型

验证

可以正常访问到两台服务器,接下来把 LB01 的 keepalived 停掉,继续访问 VIP。

验证

还是可以正常访问,VIP 漂到了 LB02 上。使用 ipvsadm -lnc 查看具体连接信息。

实验完成,差不多断断续续的用了 4.5 小时,包括一些额外的排查时间,共计花费不到 5 块~

本文由mdnice多平台发布

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容