(源自網絡經本人修改)CentOS 下的高可用性群集的安裝

Virtual IP:         192.168.136.50
Load Balancer:      192.168.136.51
Backup:             192.168.136.52
Real Server 1:      192.168.136.251
Real Server 2:      192.168.136.252

install patch kenel(IPVS and ARP hidden)(all server)
1)rpm -Fvh mkinitrd-3.5.13-1.um.1.i386.rpm
2)rpm -Uvh mkinitrd-debuginfo-3.5.13-1.um.1.i386.rpm
3)rpm -Fvh kernel-2.4.21-27.0.2.EL.um.1.i686.rpm

install ipvsadm(Load Banlancer and Backup)
1)rpm -Uvh ipvsadm-1.21-1.rh.el.1.i386.rpm
2)rpm -Uvh ipvsadm-debuginfo-1.21-1.rh.el.1.i386.rpm
3)vi /etc/sysconfig/ipvsadm
-A -t 192.168.1.50:80 -s rr
-a -t 192.168.1.50:80 -r 192.168.1.51:80 -i
-a -t 192.168.1.50:80 -r 192.168.1.52:80 -i
-a -t 192.168.1.50:80 -r 192.168.1.251:80 -i
-a -t 192.168.1.50:80 -r 192.168.1.252:80 -i

4)vi /etc/hosts
192.168.1.51    loadbalancer.com
192.168.1.52    backup.com

5)rpm -Uvh glib2-devel-2.2.3-2.0.i386.rpm
6)rpm -Uvh libnet-1.1.0-1.rh.el.1.i386.rpm
7)rpm -Uvh libnet-debuginfo-1.1.0-1.rh.el.1.i386.rpm

install HeartBeat(Load Banlancer and Backup)
1)rpm -Uvh heartbeat-pils-1.0.4-2.rh.el.um.1.i386.rpm
2)rpm -Uvh heartbeat-stonith-1.0.4-2.rh.el.um.1.i386.rpm
3)rpm -Uvh heartbeat-1.0.4-2.rh.el.um.1.i386.rpm
4)rpm -Uvh heartbeat-debuginfo-1.0.4-2.rh.el.um.1.i386.rpm
5)rpm -Uvh perl-Parse-RecDescent-1.80-1.rh.el.um.1.noarch.rpm
6)rpm -Uvh perl-Mail-IMAPClient-2.2.7-1.rh.el.um.1.noarch.rpm
7)rpm -Uvh perl-Net-SSLeay-1.23-1.rh.el.um.1.i386.rpm
8)rpm -Uvh perl-Net-SSLeay-debuginfo-1.23-1.rh.el.um.1.i386.rpm
9)rpm -Uvh perl-Authen-SASL-2.03-1.rh.el.um.1.noarch.rpm
10)rpm -Uvh perl-Convert-ASN1-0.16-2.rh.el.um.1.noarch.rpm
11)rpm -Uvh perl-IO-Socket-SSL-0.92-1.rh.el.um.1.noarch.rpm
12)rpm -Uvh perl-XML-NamespaceSupport-1.08-1.rh.el.um.1.noarch.rpm
13)rpm -Uvh perl-XML-SAX-0.12-1.rh.el.um.1.noarch.rpm
14)rpm -Uvh perl-ldap-0.2701-1.rh.el.um.1.noarch.rpm
15)rpm -Uvh heartbeat-ldirectord-1.0.4-2.rh.el.um.1.i386.rpm

16)chkconfig --add heartbeat
17)chkconfig heartbeat on
18)chkconfig --del ldirectord


19)cp -rp /usr/share/doc/heartbeat-1.0.4/ha.cf /etc/ha.d/
20)cp -rp /usr/share/doc/heartbeat-1.0.4/haresources /etc/ha.d/
21)cp -rp /usr/share/doc/heartbeat-1.0.4/authkeys /etc/ha.d/
22)cp -rp /usr/share/doc/heartbeat-ldirectord-1.0.4/ldirectord.cf /etc/ha.d/

23)vi /etc/ha.d/ha.cf
#
#       There are lots of options in this file.  All you have to have is a set
#       of nodes listed {"node ...}
#       and one of {serial, bcast, mcast, or ucast}
#
#       ATTENTION: As the configuration file is read line by line,
#                  THE ORDER OF DIRECTIVE MATTERS!
#
#                  In particular, make sure that the timings and udpport
#                  et al are set before the heartbeat media are defined!
#                  All will be fine if you keep them ordered as in this
#                  example.
#
#
#       Note on logging:
#       If any of debugfile, logfile and logfacility are defined then they
#       will be used. If debugfile and/or logfile are not defined and
#       logfacility is defined then the respective logging and debug
#       messages will be loged to syslog. If logfacility is not defined
#       then debugfile and logfile will be used to log messges. If
#       logfacility is not defined and debugfile and/or logfile are not
#       defined then defaults will be used for debugfile and logfile as
#       required and messages will be sent there.
#
#       File to write debug messages to
#debugfile /var/log/ha-debug
#
#
#       File to write other messages to
#
logfile /var/log/ha-log
#
#
#       Facility to use for syslog()/logger
#
logfacility     local0
#
#
#       A note on specifying "how long" times below...
#
#       The default time unit is seconds
#               10 means ten seconds
#
#       You can also specify them in milliseconds
#               1500ms means 1.5 seconds
#
#
#       keepalive: how long between heartbeats?
#
keepalive 2
#
#       deadtime: how long-to-declare-host-dead?
#
deadtime 30
#
#       warntime: how long before issuing "late heartbeat" warning?
#       See the FAQ for how to use warntime to tune deadtime.
#
warntime 10
#
#
#       Very first dead time (initdead)
#
#       On some machines/OSes, etc. the network takes a while to come up
#       and start working right after you've been rebooted.  As a result
#       we have a separate dead time for when things first come up.
#       It should be at least twice the normal dead time.
#
initdead 120
#
#
#       nice_failback:  determines whether a resource will
#       automatically fail back to its "primary" node, or remain
#       on whatever node is serving it until that node fails.
#
#       The default is "off", which means that it WILL fail
#       back to the node which is declared as primary in haresources
#
#       "on" means that resources only move to new nodes when
#       the nodes they are served on die.  This is deemed as a
#       "nice" behavior (unless you want to do active-active).
#
nice_failback on
#
#       hopfudge maximum hop count minus number of nodes in config
#hopfudge 1
#
#
#       Baud rate for serial ports...
#       (must precede "serial" directives)
#
#baud   19200
#
#       serial  serialportname ...
#serial /dev/ttyS0      # Linux
#serial /dev/cuaa0      # FreeBSD
#serial /dev/cua/a      # Solaris
#
#       What UDP port to use for communication?
#               [used by bcast and ucast]
#
#udpport        694
#
#       What interfaces to broadcast heartbeats over?
#
#bcast  eth0            # Linux
#bcast  eth1 eth2       # Linux
#bcast  le0             # Solaris
#bcast  le1 le2         # Solaris
#
#       Set up a multicast heartbeat medium
#       mcast [dev] [mcast group] [port] [ttl] [loop]
#
#       [dev]           device to send/rcv heartbeats on
#       [mcast group]   multicast group to join (class D multicast address
#                       224.0.0.0 - 239.255.255.255)
#       [port]          udp port to sendto/rcvfrom (no reason to differ
#                       from the port used for broadcast heartbeats)
#       [ttl]           the ttl value for outbound heartbeats.  This affects
#                       how far the multicast packet will propagate.  (1-255)
#       [loop]          toggles loopback for outbound multicast heartbeats.
#                       if enabled, an outbound packet will be looped back and
#                       received by the interface it was sent on. (0 or 1)
#                       This field should always be set to 0.
#
#
mcast eth0 225.0.0.1 694 1 0
#
#       Set up a unicast / udp heartbeat medium
#       ucast [dev] [peer-ip-addr]
#
#       [dev]           device to send/rcv heartbeats on
#       [peer-ip-addr]  IP address of peer to send packets to
#
#ucast eth0 192.168.1.2
#
#
#       Watchdog is the watchdog timer.  If our own heart doesn't beat for
#       a minute, then our machine will reboot.
#
#watchdog /dev/watchdog
#
#       "Legacy" STONITH support
#       Using this directive assumes that there is one stonith
#       device in the cluster.  Parameters to this device are
#       read from a configuration file. The format of this line is:
#
#         stonith <stonith_type> <configfile>
#
#       NOTE: it is up to you to maintain this file on each node in the
#       cluster!
#
#stonith baytech /etc/ha.d/conf/stonith.baytech
#
#       STONITH support
#       You can configure multiple stonith devices using this directive.
#       The format of the line is:
#         stonith_host <hostfrom> <stonith_type> <params...>
#         <hostfrom> is the machine the stonith device is attached
#              to or * to mean it is accessible from any host.
#         <stonith_type> is the type of stonith device (a list of
#              supported drives is in /usr/lib/stonith.)
#         <params...> are driver specific parameters.  To see the
#              format for a particular device, run:
#           stonith -l -t <stonith_type>
#
#
#       Note that if you put your stonith device access information in
#       here, and you make this file publically readable, you're asking
#       for a denial of service attack ;-)
#
#
#stonith_host *     baytech 10.0.0.3 mylogin mysecretpassword
#stonith_host ken3  rps10 /dev/ttyS1 kathy 0
#stonith_host kathy rps10 /dev/ttyS1 ken3 0
#
#       Tell what machines are in the cluster
#       node    nodename ...    -- must match uname -n
#node   ken3
#node   kathy
node loadbalancer.com
node backup.com
#
#       Less common options...
#
#       Treats 10.10.10.254 as a psuedo-cluster-member
#
#ping 10.10.10.254
#
#       Started and stopped with heartbeat.  Restarted unless it exits
#                               with rc=100
#
#respawn userid /path/name/to/run

24)vi /etc/ha.d/haresources
loadbalancer.com lvs IPaddr::192.168.1.50/24/eth0 ipvsadm ldirectord
#backup.com lvs IPaddr::192.168.1.50/24/eth0 ipvsadm ldirectord

25)vi /etc/ha.d/authkeys
#auth 1
auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello!

26)chmod 600 /etc/ha.d/authkeys

27)vi /etc/ha.d/ldirectord.cf
# Global Directives
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
logfile="/var/log/ldirectord.log"
#logfile="local0"
quiescent=yes

# A sample virual with a fallback that will override the gobal setting
virtual=192.168.1.50:80
        real=192.168.1.51:80 ipip
        real=192.168.1.52:80 ipip
        real=192.168.1.251:80 ipip
        real=192.168.1.252:80 ipip
        fallback=127.0.0.1:80 gate
        service=http
        request="real-server.html"
        receive="newsbook"
        scheduler=rr
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp


28)vi /etc/ha.d/resource.d/lvs
#!/bin/sh
# chkconfig: 2345 90 10
# description: Preparing for Load Balancer and Real Server switching
VIP=192.168.1.50

. /etc/rc.d/init.d/functions

case "$1" in
    start)
       echo "Preparing for Load Balancer"
       ifconfig tunl0 down
       echo 1 > /proc/sys/net/ipv4/ip_forward
       echo 0 > /proc/sys/net/ipv4/conf/all/hidden
       ;;
    stop)
       echo "Preparing for Real Server"
       ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
       echo 1 > /proc/sys/net/ipv4/ip_forward
       echo 1 > /proc/sys/net/ipv4/conf/all/hidden
       echo 1 > /proc/sys/net/ipv4/conf/tunl0/hidden
       ;;
    *)
       echo "Usage: lvs {start|stop}"
       exit 1
esac

29)chmod 755 /etc/ha.d/resource.d/lvs

30)/etc/init.d/heartbeat start


about real server setting
1)vi /etc/init.d/tunl
#!/bin/sh
# chkconfig: 2345 70 10
# description: Config tunl port and apply arp patch
VIP=192.168.1.50
. /etc/rc.d/init.d/functions
case "$1" in
    start)
    echo "Tunl port starting"
    ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo 1 > /proc/sys/net/ipv4/conf/all/hidden
    echo 1 > /proc/sys/net/ipv4/conf/tunl0/hidden
    ;;
    stop)
    echo "Tunl port closing"
    ifconfig tunl0 down
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo 0 > /proc/sys/net/ipv4/conf/all/hidden
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    exit 1
esac

2)chmod 755 /etc/init.d/tunl
3)chkconfig --add tunl
4)chkchnfig tunl on
5)add the index.html file
  Test Page