Options

aFlex and server-for-server backups

Posted by kberton

I have 3 primary app servers and 3 backup servers in a SLB Service Group. Let's call them A1/B1/C1 and A2/B2/C2. In normal operations, all traffic will be LB'd to A1/B1/C1 and A2/B2/C2 are backup servers that will only receive live traffic when there is a failure on any of the 3 primary servers. Service Group Priorities and Min Active Members can help out a great deal here, but there is a twist that I believe requires an aFlex. The requirement is that if A1 fails, it must be replaced by A2; if B1 fails, it must be replaced by B2; and so on.

What would the aFlex script to accomplish this look like?

Comments

  • Options
    dshindshin Member
    edited February 2014
    Posted by ggarcia

    You're right, aFleX can help you there on that specific requirement.
    This would require some specific pre-configs on the "SLB-Server" and "SLB-Service Group".

    Note: You won't be able to use Least Connection SLB algorithm.

    1. Enter SLB Server configuration (I'm not sure you want that point)
    2. Create Fake Servers with no health checks so they are always up
    SLB Server Fake1 as 1.1.1.1
    SLB Server Fake2 as 1.1.1.2
    SLB Server Fake3 as 1.1.1.3
    3. Create service groups for:
    Fake Servers
    sg-a with different servers/priority (see below)
    sg-b with different servers/priority (see below)
    sg-c with different servers/priority (see below)

    Logic:
    sg-a: Goes always to A1. If A1 down, go to A2. If A1+A2 down, go to B1/C1
    sg-b: Goes always to B1. If B1 down, go to B2. If B1+B2 down, go to A1/C1
    sg-c: Goes always to C1. If C1 down, go to C2. If C1+C2 down, go to A1/B1

    4. Apply service group sg_fake to the VIP
    5. Bind the aflex template to the VIP.
    6. Save and test.

    Your config will look similar to:
    Note: I removed the SNAT that is not required.
    Note: I added comments in front of the logs.

    slb server a1 10.0.2.18
    port 80 tcp

    slb server a2 10.0.2.19
    port 80 tcp

    slb server b1 10.0.2.28
    port 80 tcp

    slb server b2 10.0.2.29
    port 80 tcp

    slb server c1 10.0.2.38
    port 80 tcp

    slb server c2 10.0.2.39
    port 80 tcp


    slb server fake1 1.1.1.1
    no health-check
    port 80 tcp
    no health-check

    slb server fake2 1.1.1.2
    no health-check
    port 80 tcp
    no health-check

    slb server fake3 1.1.1.3
    no health-check
    port 80 tcp
    no health-check

    slb service-group sg_fake tcp
    member fake1:80
    member fake2:80
    member fake3:80

    slb service-group sg_a tcp
    member a1:80 priority 16
    member a2:80 priority 5
    member b1:80 priority 2
    member c1:80 priority 2
    member b2:80
    member c2:80

    slb service-group sg_b tcp
    member b1:80 priority 16
    member b2:80 priority 5
    member a1:80 priority 2
    member c1:80 priority 2
    member a2:80
    member c2:80

    slb service-group sg_c tcp
    member c1:80 priority 16
    member c2:80 priority 5
    member a1:80 priority 2
    member b1:80 priority 2
    member a2:80
    member b2:80

    slb virtual-server FailoverVIP 10.0.1.42
    port 80 tcp
    service-group sg_fake
    aflex failover



    aFleX script "failover"

    when LB_SELECTED {
    if {[IP::addr [LB::server addr] equals 1.1.1.1] } {
    LB::reselect pool sg_a
    #log "use pool sg_a"
    }
    if {[IP::addr [LB::server addr] equals 1.1.1.2] } {
    LB::reselect pool sg_b
    #log "use pool sg_b"
    }
    if {[IP::addr [LB::server addr] equals 1.1.1.3] } {
    LB::reselect pool sg_c
    #log "use pool sg_c"
    }
    }

    when SERVER_CONNECTED {
    #log "server = [IP::server_addr]"
    }
  • Options
    kirankiran Member
    edited February 2014
    Hi,

    In the same scenario if A1 is down request goes to A2 and If i want when A1 comes online all request has to move back to A1 and still A2 will be backup is this possible with aFlex if yes.

    Can you please provide me sample aFlex.

    Regards,
    Kiran
Sign In or Register to comment.