1、準備
yum install libnl-devel
yum install popt-static-1.13-7.el6.x86_64.rpm
2、安裝ipvsadm
tar xzvf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make ; make install
3、start LVS
cat /usr/local/sbin/lvs_real.sh
#!/bin/bash
#/usr/local/sbin/lvs_real.sh
#description : start realserver
VIP=192.168.56.51
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
chmod +x /etc/rc.d/init.d/functions
/usr/local/sbin/lvs_real.sh start
4、配製keepalived
cat /usr/local/keepalived/etc/keepalived/keepalived.conf
! Configuration File for keepalived
vrrp_instance vip1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.56.51
}
}
virtual_server 192.168.56.51 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.56.11 3306 {
weight 3
MISC_CHECK {
misc_path "/usr/local/keepalived/checkSlave.sh -umonitor -pmonitor -h192.168.56.11 -P3306"
misc_timeout 15
misc_dynamic
}
}
real_server 192.168.56.12 3306 {
weight 1
MISC_CHECK {
misc_path "/usr/local/keepalived/checkSlave.sh -umonitor -pmonitor -h192.168.56.12 -P3306"
misc_timeout 10
misc_dynamic
}
}
}
5、檢測腳本
cat /usr/local/keepalived/checkSlave.sh
#!/bin/bash
# checkSlave.sh
function usage()
{
echo "usage:"
echo "example:# mysql -umonitor -pmonitor -P3306 -h192.168.56.11"
echo "-p, --password[=name]"
echo "-P, --port"
echo "-h, --host=name"
echo "-u, --user=name"
}
while getopts "u:p:h:P:" option
do
case "$option" in
u)
dbuser="$OPTARG";;
p)
dbpwd="$OPTARG";;
h)
dbhost="$OPTARG";;
P)
dbport="$OPTARG";;
\?)
usage
exit 1;;
esac
done
if [ "-$dbuser" = "-" ]; then
usage
exit 1
fi
if [ "-$dbpwd" = "-" ]; then
usage
exit 1
fi
if [ "-$dbhost" = "-" ]; then
usage
exit 1
fi
if [ "-$dbport" = "-" ]; then
usage
exit 1
fi
res=$(mysql -u$dbuser -p$dbpwd -P$dbport -h$dbhost -e 'select 1' 2>/dev/null | sed -n '2p')
if [ "-$res" == "-1" ]; then
exit 0
else
exit 1
fi
6、測試
G:\Tools\Console2>mysql -utest -ptest -h192.168.56.51 -P 3306 <e:\test.sql
Warning: Using a password on the command line interface can be insecure.
@@hostname sysdate()
mysql12 2015-03-12 18:24:23
G:\Tools\Console2>mysql -utest -ptest -h192.168.56.51 -P 3306 <e:\test.sql
Warning: Using a password on the command line interface can be insecure.
@@hostname sysdate()
mysql11 2015-03-12 18:32:34
G:\Tools\Console2>type e:\test.sql
select @@hostname,sysdate()
需要耐心等待一會兒,才能看到上述服務器的切換