keepalived負載均衡

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()

需要耐心等待一會兒,才能看到上述服務器的切換




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章