Keepalived
Example loadbalancing configuration for Open-Xchange Cluster
Introduction
this page contains a basic description about how to set up keepalived for Open-Xchange cluster. This example is to work on debian systems. Keepalived mode is Direct Routing.
It is required to have ox servers and loadbalancer connected to the same switch or hub and that there is no filter for network packages between (some virtualization system do filter, too), so that MAC rewriting works.
For more information please see: www.keepalived.org
Directors setup
Software installation:
test1:~# apt-get install keepalived
Keepalived requires some kernel modules to be loaded. They are loaded by the ipvsadmm service. So we enable it using dpkg-reconfigure:
dpkg-reconfigure ipvsadm
Answer the questions with "Yes" ("load ... at boot") and then "backup" for "Daemon method".
Configuration:
Create a file
/etc/keepalived/keepalived.conf
with following contend (adapt network adresses)
global_defs { router_id OX } vrrp_sync_group OX_GROUP { group { OX_GOUP } } vrrp_instance OX_VRRP { state BACKUP interface eth0 garp_master_delay 10 virtual_router_id 10 priority 101 nopreempt advert_int 1 authentication { auth_type AH # Simple 'PASS' can use auth_pass 1234 # example password '1234' } virtual_ipaddress { 10.20.30.77/24 brd 10.20.30.255 dev eth0 # virtual service ip 10.20.30.67 } virtual_ipaddress_excluded { } } virtual_server_group OX_HTTP { 10.20.30.77 80 # virtual ip and port 80 } virtual_server_group OX_OL_PUSH { 10.20.30.77 44335 # VIP VPORT } virtual_server group OX_HTTP { delay_loop 3 lvs_sched rr lvs_method DR protocol TCP virtualhost 10.20.30.77 real_server 10.20.30.123 80 { weight 1 inhibit_on_failure HTTP_GET { url { path /servlet/TestServlet status_code 200 } connect_port 80 connect_timeout 10 } } real_server 10.20.30.321 80 { weight 1 inhibit_on_failure HTTP_GET { url { path /servlet/TestServlet status_code 200 } connect_port 80 connect_timeout 10 } } } virtual_server group OX_OL_PUSH { delay_loop 3 lvs_sched rr lvs_method DR protocol UDP real_server 10.20.30.123 44335 { weight 1 inhibit_on_failure TCP_CHECK { connect_port 9999 connect_timeout 5 } } real_server 10.20.30.321 44335 { weight 1 inhibit_on_failure TCP_CHECK { connect_port 9999 connect_timeout 5 } } }
Networking adjustments
The following instructions are valid for debian.
- For the keepalived node, configure in /etc/sysctl.conf:
net.ipv4.ip_forward = 1
- For the server nodes, use a stanza in the /etc/network/interfaces file. Adjust the IP.
auto lo:0 iface lo:0 inet static address 10.20.30.77 netmask 255.255.255.255 pre-up echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore pre-up echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce post-up /sbin/route add -host 10.20.30.77 dev lo:0 pre-down /sbin/route del -host 10.20.30.77 dev lo:0 # reset to defaults post-down echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore post-down echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
The effect of those settings should be self-explanatory. How to do this on other operating systems needs to be documented here.