Corosync and HA-proxy

We will use corosync to create a virtual IP-address which is shared by two systems. One of the systems has the virtual IP-address. If the system goes down, the other system will take over the virtual IP-address. HA-proxy will be running on each of the hosts relaying incoming HTTP-requests to two webservers.

Software

apt-get install corosync haproxy crmsh

Configuration

Before binding to the DNS name www make sure the DNS server knows that name.

HA-proxy

Add the following to /etc/haproxy/haproxy.cfg

listen webfarm 
        bind www:80
        mode http
        balance roundrobin
        cookie LBN insert indirect nocache
        option httpclose
        option forwardfor
        server haproxy01 www01:80 cookie node1 check
        server haproxy02 www02:80 cookie node2 check

Restart HA-proxy

service haproxy restart

Corosync

Add the local network and a multicast address to /etc/corosync/corosync.conf in the interface section

interface {
        bindnetaddr: 192.168.1.0 
        mcastaddr: 239.192.1.1
}

Restart corosync to load the new configuration.

service corosync restart

Commmands

Run the following on startup

   1 # do not kill other node
   2 crm configure property stonith-enabled=false
   3 # disable quorum due to two nodes only
   4 crm configure property no-quorum-policy=ignore
   5 # configure shared IP
   6 crm configure primitive haproxySharedIP  ocf:heartbeat:IPaddr2 params ip=192.168.1.47 cidr_netmask=24 op monitor interval=5s
   7 # create heartbeat for haproxy
   8 crm configure primitive haproxyLoadBalance ocf:heartbeat:haproxy params conffile=/etc/haproxy/haproxy.cfg op monitor interval=10s
   9 
  10 # make sure the same server has both IP and service
  11 #crm configure group haproxyIPs haproxySharedIP meta ordered=false
  12 crm configure group haproxy haproxySharedIP haproxyLoadBalance
  13 # relation between IP and haproxy servers
  14 crm configure colocation haproxyWithIPs INFINITY: haproxyLoadBalance haproxySharedIP
  15 # IP should be up before haproxy starts
  16 crm configure order haproxyAfterIPs mandatory: haproxySharedIP haproxyLoadBalance 
  17 #wget http://github.com/russki/cluster-agents/raw/master/haproxy
  18 #echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf
  19