From analysis of a simple ifstated.conf to more compex example

Damien Fleuriot ml at my.gd
Tue Feb 21 07:43:49 UTC 2012


To be honest, I'm not sure it's a good idea to use different *interfaces*.

Why don't you set multiple IPs on a single carp interface instead ?

On 21 Feb 2012, at 08:29, peter knezel <peter.knezel at gmail.com> wrote:

> Hello Damien,
> 
> preemption is set on both systems, so when master server goes down or
> any CARP interface on master
> goes down, slave becomes master (but only on the CARP interface if
> only that went down).
> 
> Can you have a look at my previous question??:
> if the different carp interfaces
> are used for different purpose (ftp, tftp, scp), is it a good idea to
> put down all of them, if they are able to serve their purpose?
> 
> 
> Thanks and kind regards,
> 
> Peter
> 
> On 16/02/2012, Damien Fleuriot <ml at my.gd> wrote:
>> Preemption is used to ensure that, if a CARP interface goes down on host
>> A, host B will then assume mastership for all interfaces.
>> 
>> It prevents the nasty situation where you'd have, for example:
>> 
>> Public IP: master on host A
>> Private IP: master on host B
>> 
>> servers behind firewalls hosts A and B:
>> - traffic arrives on host A which creates a PF state
>> - servers reply via their default gateway, the CARP IP now master on host B
>> 
>> Host B doesn't have a state for the traffic, drops it.
>> 
>> 
>> To enable preemption you need to run sysctl net.inet.carp.preempt=1 and
>> add the corresponding line to your sysctls file in etc.
>> 
>> 
>> On 2/15/12 7:04 PM, peter knezel wrote:
>>> Well,
>>> 
>>> I am not fully familiar with CARP, but if the different carp interfaces
>>> are used for different purpose (ftp, tftp, scp), is it a good idea to
>>> put down all of them, if they are able to serve their purpose?
>>> 
>>> BTW, what is  CARP preemption and how is it possible to enable it?
>>> 
>>> Kind regards,
>>> 
>>> Peter
>>> 
>>> On 15 February 2012 18:25, Damien Fleuriot <ml at my.gd <mailto:ml at my.gd>>
>>> wrote:
>>> 
>>>    Sorry about the late reply, didn't see yours.
>>> 
>>>    What about enabling CARP preemption to ensure that when a carp
>>> interface
>>>    goes down, the whole set does ?
>>> 
>>> 
>>>    On 2/7/12 9:13 PM, peter knezel wrote:
>>>> Hello Damien,
>>>> 
>>>> I did read your example but cannot get idea from it.
>>>> For three interfaces you have much more possibilities.
>>>> 
>>>> Imagine you start the server from uuu state which is equal to
>>>> net = '( "ifconfig -a -u |grep carp0 > /dev/null" every 3 &&
>>>    "ifconfig -a -u
>>>> |grep carp1 > /dev/null" every 3 && "ifconfig -a -u |grep carp2 >
>>>    /dev/null"
>>>> every 3)'
>>>> 
>>>> Now you put down one carp interface - so system is in state :
>>>> *state one:*
>>>> (duu) || (udu) || (uud) <----which is same as !$net
>>>> run script1.sh
>>>> go to twoff
>>>> 
>>>> now imagine, you put down any other carp interface:
>>>> *state twoff: *
>>>> (dud) || (ddu) || (udd)
>>>> run script2.sh
>>>> go to two
>>>> 
>>>> *state two: *
>>>> put all interfaces up
>>>> run script3.sh
>>>> go to state one
>>>> 
>>>> it means, this is one of the possibilities system can behave (this
>>>> situation does not describe all possible states - I have taken this
>>>> special example.)
>>>> 
>>>> Now if you want to put up after putting down one carp interface, you
>>>> fail since it is in state twoff.
>>>> Only of you put down second carp interface it goes to state two and
>>> if
>>>> you put both up, it will go to state one.
>>>> 
>>>> This is where my ifstated.conf fails to work.
>>>> 
>>>> Kind regards,
>>>> 
>>>> Peter Knezel
>>>> 
>>>> 
>>>> On 7 February 2012 17:02, Damien Fleuriot <ml at my.gd
>>>    <mailto:ml at my.gd> <mailto:ml at my.gd <mailto:ml at my.gd>>>
>>>> wrote:
>>>> 
>>>>    On 2/7/12 3:36 PM, peter knezel wrote:
>>>>> Hello all,
>>>>> 
>>>>> I would like to ask somebody to explain me how the ifstated
>>>    works
>>>>    according to
>>>>> the following configuration file.
>>>>> I have three virtual carp interfaces carp0,carp1 and carp2.
>>>>> 
>>>>> I try to understand the following setting:
>>>>> The server is in state one (all carp interfaces are up) and
>>>    if there
>>>>> is carp down of any:
>>>>> one (carp0 or carp1 or carp2),
>>>>> two ([carp0 and carp1] or [carp0 and carp2] or [carp1 and
>>>    carp2]),
>>>>> three interfaces (carp 0 and carp1 and carp2), server
>>>>> runs the script testdown.sh and put the server into state two.
>>>>> If all carp interfaces are up, the server runs the testup.sh
>>>    and set
>>>>> the state to one.
>>>>> 
>>>> 
>>>>    That is my understanding.
>>>> 
>>>> 
>>>>> Is it the way the system works?
>>>>> Or am I wrong?
>>>>> 
>>>>> ===
>>>>> init-state one
>>>>> 
>>>>> net = '( "ifconfig -a -u |grep carp0 > /dev/null" every 3 &&
>>>>    "ifconfig -a -u
>>>>> |grep carp1 > /dev/null" every 3 && "ifconfig -a -u |grep
>>>    carp2 >
>>>>    /dev/null"
>>>>> every 3)'
>>>>> 
>>>>> state one {
>>>>>       if ( ! $net ) {
>>>>>               run "/usr/local/testdown.sh"
>>>>>               set-state two
>>>>>       }
>>>>> }
>>>>> 
>>>>> state two {
>>>>>       if ( $net ) {
>>>>>               run "/usr/local/testup.sh"
>>>>>               set-state one
>>>>>       }
>>>>> }
>>>>> ===
>>>>> 
>>>>> Is there any possibility to define and set ifstated.conf that
>>>>    reacts when:
>>>>> 
>>>>> any one of the carp interfaces is down - followed by
>>>    another any
>>>>> other carp interface down
>>>>> 
>>>>> 
>>>>> I tried to define states:
>>>>> 
>>>>> duu ="!carp0.link.up && carp1.link.up && carp2.link.up"
>>>>> udu ="carp0.link.up && !carp1.link.up && carp2.link.up"
>>>>> uud ="carp0.link.up && carp1.link.up && !carp2.link.up"
>>>>> ddu ="!carp0.link.up && !carp1.link.up"
>>>>> dud ="!carp0.link.up && !carp2.link.up"
>>>>> udd ="!carp1.link.up && !carp2.link.up"
>>>>> 
>>>>> and used them but somehow I cannot incorporate all state
>>>    changes and
>>>>> include it in ifstated.conf.
>>>>> 
>>>> 
>>>> 
>>>>    Works fine here, did you not have any luck with the file I
>>> posted
>>>>    earlier ?
>>>>    _______________________________________________
>>>>    freebsd-questions at freebsd.org
>>>    <mailto:freebsd-questions at freebsd.org>
>>>    <mailto:freebsd-questions at freebsd.org
>>>    <mailto:freebsd-questions at freebsd.org>>
>>>>    mailing list
>>>>    http://lists.freebsd.org/mailman/listinfo/freebsd-questions
>>>>    To unsubscribe, send any mail to
>>>>    "freebsd-questions-unsubscribe at freebsd.org
>>>    <mailto:freebsd-questions-unsubscribe at freebsd.org>
>>>>    <mailto:freebsd-questions-unsubscribe at freebsd.org
>>>    <mailto:freebsd-questions-unsubscribe at freebsd.org>>"
>>>> 
>>>> 
>>> 
>>> 
>> 


More information about the freebsd-questions mailing list