This example will provide for Apache HA without anything complex like session handling, and will focus on the RHEL version of Linux High Availability.
The packages required:
piranha
ipvsadm
arptables_jf
You will need a load balancer machine to run Linux HA. In this example we will use Piranha and set the load balancer up in a weighted least connection configuration.
On the load balancer server you need the following:
Install piranha, and ipvsadm
The required lines for the configuration of the load balancer are in the file: /etc/sysconfig/ha/lvs.cf
primary = ip.address.of.this.server
service = lvs
keepalive = 6
deadtime = 18
network = direct
debug_level = 0
virtual balanced_www {
address = public.ip.address eth0:0
vip_nmask = 255.255.255.0
active = 1
port = 80
send = “GET / HTTP/1.0\r\n\r\n:
expect = “HTTP”
load_monitor = none
scheduler = wlc
protocol = tcp
timeout = 5
reentry = 10
server webserver1 {
address = ip.address.of.webserver1
active = 1
weight = 1
}
server webserver1 {
address = ip.address.of.webserver2
active = 1
weight = 1
}
}
Beware, the file above will fail if there is any additional whitespace or there are any comments in the file.
Also: do not worry about the eth0:0 ip address, as lvs will bring that up and down as required when you start the daemon.
On both webservers you need the following file:
/etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.eth0.arp_ignore = 1 net.ipv4.conf.eth0.arp_announce = 2
Now run sysctl -p this will activate the new rules which will reload automatically upon reboots.
You will also need the following arptables_jf rules which you can add prior to the ifconfig line in the /etc/rc.d/rc.local file
On webserver1
arptables_jf -A IN -d ip.address.of.webserver1 -j DROP arptables_jf -A OUT -d public.ip.address.of.webserver -j mangle --mangle-ip-s ip.address.of.webserver1
On webserver2
arptables_jf -A IN -d ip.address.of.webserver1 -j DROP arptables_jf -A OUT -d public.ip.address.of.webserver -j mangle --mangle-ip-s ip.address.of.webserver1
On each server you need to assign an alias to the ethernet device that the ip.address.of.webserver is on and give that the public.ip.address.of.webserver which you can do by adding the following line to your /etc/rc.d/rc.local
ifconfig eth0:0 public.ip.address.of.webserver netmask.of.ip.address up
Don't worry about having the same IP address on 3 servers, the only one recognized is the IP address on the load balancer.
Once this is done then you will need to start the load balancer by running pulse on the load balancer:
service pulse start
Now you have a webserver that is load balanced and has high availability.
To test this watch the logs on the load balancer:
tail -f /var/log/messages
Now stop one of the webservers, or reboot it. Nanny will determine there is a connection failure and it will remove that webserver from the cluster.
This configuration works the same for up to 256 webservers, you just need to replicate the lines in the lvs.cf and setup all the other servers the same way you setup the two above.
0 comments:
Post a Comment