1 DR模式 wKioL1c92X6Q67ElAAAnkPJ47_Q549.png

1 配置eth0 IP

2 关闭ARP相应

rs1 rs2关闭arp 通告 回应

sysctl -w net.ipv4.conf.all.arp_ignore=1

sysctl -w net.ipv4.conf.eth0.arp_ignore=1

sysctl -w net.ipv4.conf.all.arp_announce=2

sysctl -w net.ipv4.conf.all.arp_announce=2


3 3个全配置

   rs2 rs1 ifconfig lo:0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.100

   DR ifconfig eth0:0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.100

   rs1 rs2 route add -host 192.168.1.100 dev lo:0

   DR   route add -host 192.168.1.100 dev eth0:0


4 配置ipvsadm  -g  DR模式

ipvsadm -A -t 192.168.1.100:80 -s wrr

ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.10:80 -g -w 2 

ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.12:80 -g -w 1

5  

脚本实现后端健康检查  自动删除添加


   #!/bin/bash

        #

        VIP=192.168.1.100    (1 提供服务IP)

        CPORT=80

        FAIL_BACK=127.0.0.1

        FBSTATUS=0

        RS=("192.168.1.10" "192.168.1.12" "192.168.1.13")  (2 此处可以添加其他真实主机)

        RSTATUS=("1" "1" "1")            (3 添加真实主机时, 此处加 一个)

        RW=("2" "1" "1")                    (4 添加真实主机时, 此处加 一个)

        RPORT=80

        TYPE=g

        add() {

          ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2

          [ $? -eq 0 ] && return 0 || return 1

        }

        del() {

          ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT

          [ $? -eq 0 ] && return 0 || return 1

        }

        while :; do

          let COUNT=0

          for I in ${RS[*]}; do

            if curl --connect-timeout 1 http://$I &> /dev/null; then

              if [ ${RSTATUS[$COUNT]} -eq 0 ]; then

                 add $I ${RW[$COUNT]}

                 [ $? -eq 0 ] && RSTATUS[$COUNT]=1

              fi

            else

              if [ ${RSTATUS[$COUNT]} -eq 1 ]; then

                 del $I

                 [ $? -eq 0 ] && RSTATUS[$COUNT]=0

              fi

            fi

            let COUNT++

          done

          sleep 5

        done

执行 . /zd.sh &


测试   关闭一台 查看 ipvsadm -L -n