searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

如何配置LVS-DR模式

2024-05-31 05:34:30
14
0

    LVS有三种模式,nat(地址转换),dr(直接路由),ip tunneling(IP隧道)

    这三种模式各有其特点:

  •     nat模式可以做端口映射,相当于转发,也就会承载流量。
  •     dr模式目标机和调度机必须端口一致,但是负载均衡机不会有流量。
  •     IP隧道要求机器配置隧道设备和协议。

    综上所述,DR模式相对在生产环境上用的更多。

    以下是如何配置的过程,这里也会提到配置时可能存在的坑。

  DS机器上的操作

    lsmod |grep ip_vs  #确保内核加载了ip_vs模块

    yum install -y ipvsadm  #安装ipvsadm

    ifconfig eth0:0 192.168.xx.xx netmask 255.255.255.255  # 在LVS服务器上添加一个地址为VIP的虚拟网卡eth0:0

    注意:如果这台机器上面部署的有kube-proxy,这里的配置会被反复刷掉

               下线网卡命令为 ifconfig eth0:0 down

               启动网卡 ifconfig eth0:0 192.168.xx.xx/32 up

               子网有问题 可以调192.168.xx.xx/24

               如果要在ds机器上curl本机,需要
               sysctl -w net.ipv4.conf.eth0.accept_local=1
               sysctl -w net.ipv4.conf.eth0.rp_filter=0
               sysctl -w net.ipv4.conf.all.rp_filter=0

               rp_filter是反向路由检查,从RS回来的报文,源IP是VIP 192.168.xx.xx,反向路由检查会用源IP192.168.xx.xx去查路由,192.168.xx.xx就在真实机器YY 上,因此路由是走lo口的,而现在从eth0口收到了,如果rp_filter=1,就会丢包。
               路由实现中有个限制,即从非loopback网卡进来的任何数据包的源地址不能是本机地址,accept_local是允许这种情况。
               这个是在lvs本机去curl VIP时才需要,如果是从其他机器去curl就不需要

 

RS机器

        # 将对应网卡设置为只回应目标IP为自身接口地址的ARP请求
           /proc/sys/net/ipv4/conf/all/arp_ignore
          /proc/sys/net/ipv4/conf/lo/arp_ignore

          原来的值是0

         echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
         echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore

      # 将ARP请求的源IP设置为eth0上的IP,也就是RIP
        /proc/sys/net/ipv4/conf/lo/arp_announce
        /proc/sys/net/ipv4/conf/all/arp_announce

        原来的值是0

        echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

    # 添加IP地址为VIP的虚拟网卡lo:0
    ifconfig lo:0 192.168.xx.xx broadcast 192.168.xx.xx netmask 255.255.255.255

    ip a可以查看

    # 添加一条路由,目标IP为VIP的数据包使用lo接口发送,这样响应报文的源IP就会为VIP
    route add -host 192.168.xx.xx dev lo:0

    route -n 可以验证配置

 

修改IPVS规则

    用nginx来验证,在rs机器上部署nginx(步骤略)

    #在DS上添加路由 
    route add -host 192.168.xx.xx dev eth0

    # 添加虚拟服务,指定IP、端口、算法
    ipvsadm -A -t 192.168.XX.XX:16660 -s wrr
    # 添加nginx1服务器,指定DR模式,指定权重为2
    ipvsadm -a -t 192.168.xx.xx:16660 -r 192.168.yy.yy:16660 -g -w 2
    # 添加nginx2服务器,指定DR模式,指定权重为1
    ipvsadm -a -t 192.168.xx.xx:16660 -r 192.168.zz.zz:16660 -g -w 1

    至此配置完成,可以在ds机器上访问本机16660端口,即可体验负载均衡效果

0条评论
作者已关闭评论
孟****帅
5文章数
0粉丝数
孟****帅
5 文章 | 0 粉丝
原创

如何配置LVS-DR模式

2024-05-31 05:34:30
14
0

    LVS有三种模式,nat(地址转换),dr(直接路由),ip tunneling(IP隧道)

    这三种模式各有其特点:

  •     nat模式可以做端口映射,相当于转发,也就会承载流量。
  •     dr模式目标机和调度机必须端口一致,但是负载均衡机不会有流量。
  •     IP隧道要求机器配置隧道设备和协议。

    综上所述,DR模式相对在生产环境上用的更多。

    以下是如何配置的过程,这里也会提到配置时可能存在的坑。

  DS机器上的操作

    lsmod |grep ip_vs  #确保内核加载了ip_vs模块

    yum install -y ipvsadm  #安装ipvsadm

    ifconfig eth0:0 192.168.xx.xx netmask 255.255.255.255  # 在LVS服务器上添加一个地址为VIP的虚拟网卡eth0:0

    注意:如果这台机器上面部署的有kube-proxy,这里的配置会被反复刷掉

               下线网卡命令为 ifconfig eth0:0 down

               启动网卡 ifconfig eth0:0 192.168.xx.xx/32 up

               子网有问题 可以调192.168.xx.xx/24

               如果要在ds机器上curl本机,需要
               sysctl -w net.ipv4.conf.eth0.accept_local=1
               sysctl -w net.ipv4.conf.eth0.rp_filter=0
               sysctl -w net.ipv4.conf.all.rp_filter=0

               rp_filter是反向路由检查,从RS回来的报文,源IP是VIP 192.168.xx.xx,反向路由检查会用源IP192.168.xx.xx去查路由,192.168.xx.xx就在真实机器YY 上,因此路由是走lo口的,而现在从eth0口收到了,如果rp_filter=1,就会丢包。
               路由实现中有个限制,即从非loopback网卡进来的任何数据包的源地址不能是本机地址,accept_local是允许这种情况。
               这个是在lvs本机去curl VIP时才需要,如果是从其他机器去curl就不需要

 

RS机器

        # 将对应网卡设置为只回应目标IP为自身接口地址的ARP请求
           /proc/sys/net/ipv4/conf/all/arp_ignore
          /proc/sys/net/ipv4/conf/lo/arp_ignore

          原来的值是0

         echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
         echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore

      # 将ARP请求的源IP设置为eth0上的IP,也就是RIP
        /proc/sys/net/ipv4/conf/lo/arp_announce
        /proc/sys/net/ipv4/conf/all/arp_announce

        原来的值是0

        echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

    # 添加IP地址为VIP的虚拟网卡lo:0
    ifconfig lo:0 192.168.xx.xx broadcast 192.168.xx.xx netmask 255.255.255.255

    ip a可以查看

    # 添加一条路由,目标IP为VIP的数据包使用lo接口发送,这样响应报文的源IP就会为VIP
    route add -host 192.168.xx.xx dev lo:0

    route -n 可以验证配置

 

修改IPVS规则

    用nginx来验证,在rs机器上部署nginx(步骤略)

    #在DS上添加路由 
    route add -host 192.168.xx.xx dev eth0

    # 添加虚拟服务,指定IP、端口、算法
    ipvsadm -A -t 192.168.XX.XX:16660 -s wrr
    # 添加nginx1服务器,指定DR模式,指定权重为2
    ipvsadm -a -t 192.168.xx.xx:16660 -r 192.168.yy.yy:16660 -g -w 2
    # 添加nginx2服务器,指定DR模式,指定权重为1
    ipvsadm -a -t 192.168.xx.xx:16660 -r 192.168.zz.zz:16660 -g -w 1

    至此配置完成,可以在ds机器上访问本机16660端口,即可体验负载均衡效果

文章来自个人专栏
lvs模式之DR
1 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0