[CentOS] using ip address on bonded channels in a cluster

Thu Jul 26 17:52:05 UTC 2012
Digimer <lists at alteeve.ca>

On 07/26/2012 01:38 PM, Steve Campbell wrote:
> On 7/26/2012 12:01 PM, Digimer wrote:
>> On 07/26/2012 08:05 AM, Steve Campbell wrote:
>>> I'm creating a firewall HA cluster. The proof of concept for the basic
>>> firewall cluster is OK. I can bring up the cluster, start the iptables
>>> firewall, and move all of this with no problem. I'm using Conga to do
>>> all of this configuration on Centos 6.3 servers.
>>> To extend the "HA" part of this, I'd like to use bonded channels instead
>>> of plain old NICs. The firewall uses the "IP address" service for the
>>> outside firewall IP addresses. Each server behind the firewall is NATted
>>> to one of these external IPs on the firewall's external interface.
>>> I'm not seeing how I can use bonded channels anywhere for these "IP
>>> address" services. Part of the problem is that Conga will "guess" at
>>> which interface to place the ip address service upon. In the case of
>>> bonded channels, I don't think Conga is even aware of the "bondx"
>>> interface, and Conga only uses interfaces like eth0, eth1, etc.
>>> I realize that the sysconfig network scripts will come into play here as
>>> well, but that's another problem for me to tackle.
>>> Does anyone have any experience with bonded channels and Conga? I could
>>> sure use some help with this.
>>> Thanks,
>>> steve campbell
>> I use bonding extensively, but I always edit cluster.conf directly. If
>> conga doesn't support "bond*" device names, please file a bug in red
>> hat's bugzilla.
>> Once the bondX device is up, it will have the IP and the "ethX"
>> devices can be totally ignored from the cluster's perspective. Use the
>> bondX device just as you would have used simple ethX devices.
>> In case it helps, here is how I setup bonded interfaces on red hat
>> clusters for complete HA;
>> https://alteeve.com/w/2-Node_Red_Hat_KVM_Cluster_Tutorial#Network
> Digimer,
> Thanks very much for the reply. I believe you had pointed out the link
> to me before on a more basic query. It was very helpful in giving me a
> real nice introduction to all the new stuff in Centos 6 for clustering.
> After reading this page once again, I think my question is not being
> understood. It seems to be a problem of mine to not state those
> questions plainly.
> In your example, you use a VM to move the entire server from one VM host
> to another (or how ever you have that configured). That VM is a
> "service" defined under the cluster and it carries the IPs along with
> the VM.
> In my situation, my cluster consists of non-VM servers. The servers are
> real, with an inside and outside interface and IPs. They become
> firewalls by moving the external IPs and iptables rules as services. So
> in my situation, I use "ip address" and "script" to only move the IP
> addresses and start and stop iptables. The IP addresses would be bonded
> channels, much like you do in your VMs.
> If I'm not mistaken, the parameters for "ip address" do not offer
> anything like device or interface, so I'm failing to see how I can move
> the IPs between nodes as bonded channels. Individual IP addresses are
> not a problem. It works as expected.
> My network experience is not strong enough to know why I'd need a bridge
> in my situation as well.
> Perhaps I should back up and consider VMs. The main problem I see there
> is the time it might take to shutdown one VM and start another VM as
> opposed to just moving IPs and starting iptables.
> I've still not attacked conntrack yet either, so there's plenty more for
> me to do.
> Thanks again for your very helpful reply.
> steve

Ah, ok, I think I get it.

The ip resource agent looks for the interface that matches the managed 
IP's subnet, and uses it. So if your bondX interface has an IP on the 
same subnet as your virtual IP, it will be used.

Think of a bonded network device like you would a traditional mdadm 
based RAID array. Say you have /dev/sda5 + /dev/sdb5 and they create 
/dev/md0. Once created, you only look at/use /dev/md0 and you can 
effectively pretend that the two backing devices no longer exist. The 
software raid stack handles and hides failure management.

In your case, you would, for example, take eth0 + eth1 and create bond0. 
Once done, eth{0,1} no longer have an IP address, only the bondX device 
does. The failure of a slaved interface is totally handled behind the 
scenes by the bond driver. So your application (cluster, iptables) will 
not know or care that the link changed behind the scenes.

As for the VMs;

In the tutorial, the VMs are indeed the HA service, but you can imagine 
your firewall in place of the VM, so far as the cluster is concerned. 
It's just another resource. Also, if you do decide to go to a VM, you 
can live-migrate a VM between nodes, so there is no interruption. Of 
course, if the node backing the VM dies dramatically, the VM will need 
to reboot on the remaining good node, causing an outage of (in my 
experience) roughly 30 seconds. Again though, the VM approach is just 
one of many... Making a firewall the HA service directly is just fine.

Of course, one benefit of VMs (and the reason I prefer them) is that the 
configuration of the software in the VM is trivial... No special 
consideration is needed on an app by app bases. Once you have your first 
VM cluster running, you can make anything (on any supported OS) HA.


Papers and Projects: https://alteeve.com