LVS+Keepalived+nginx+单纯keepalived高可用

LVS+Keepalived实现高可用集群

LVS+Keepalived 介绍


LVS

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群 

系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项 目之 

一。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR);

十种调度算法(rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。

Keepalvied

Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP 

主机之间failover的实现

IP配置信息:

  LVS-DR-Master          172.16.1.1 

  LVS-DR-BACKUP          172.16.1.8 

  LVS-DR-VIP             172.16.1.80        

  WEB1-Realserver01      172.16.1.2 

  WEB2-Realserver02      172.16.1.3

  WEB3-Realserver03      172.16.1.4


一,安装LVS和Keepalvied软件包

1. Install ipvsadm

yum –y ipvsadm

2. 安装LVS和Keepalived 

yum –y install gcc kernel-devel openssl-devel
tar zxvf keepalived-1.1.15.tar.gz
cd keepalived-1.1.15
./configure -–sysconfdir=/etc/ --with-kernel-dir=/usr/src.kernel/2.6XXXX  
make && make install
ln -s /usr/local/sbin/keepalived /sbin/
chkconfig --add keepalived
chkconfig --level 2345 keepalived on
service keepalived restart


二. 配置LVS实现负载均衡

lvs-dr

#!/bin/bash
VIP=172.16.1.80
./etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:1
echo "DirectoryServer Start OK"
;;
stop)
ipvsadm -C
ipvsadm -Z
ifconfig eth0:1 down
/sbin/route del $VIP >/dev/null 2>&1
echo "DirectoryServer Stop OK"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
 esca
exit0

lvs-realserver

#!/bin/bash

VIP=10.207.238.82
. /etc/rc.d/init.d/functions
case "$1" in
start)
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
/sbin/ifconfig lo:0 down
/sbin/route del $VIP >/dev/null 2>&1
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
exit 0
#end


三.利用Keepalvied結合lvs實現高可用实现负载均衡和和高可用性

1.配置在主负载均衡服务器上配置keepalived.conf

#vi /etc/keepalived/keepalived.conf (主调度器)

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.1.80
    }
}
virtual_server 172.16.1.80 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 60
    protocol TCP
   
    real_server 172.16.1.2 80 {
        weight 3             
        TCP_CHECK {
        connect_timeout 10   
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
} 
    }
    real_server 172.16.1.3 80 {
        weight 3
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
    real_server 172.16.1.4 80 {
        weight 3
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}


在备用调度器上:

#vi /etc/keepalived/keepalived.conf (备调度器)

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.1.80
    }
}
virtual_server 172.16.1.80 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 60
    protocol TCP
   
    real_server 172.16.1.2 80 {
        weight 3             
        TCP_CHECK {
        connect_timeout 10   
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
} 
    }
    real_server 172.16.1.3 80 {
        weight 3
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
    real_server 172.16.1.4 80 {
        weight 3
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

如果報錯

Jan 11 09:06:26 hnxz-vm-dg-s1 Keepalived_vrrp[2436]: ip address associated with VRID not present in received packet : 10.207.238.82
Jan 11 09:06:26 hnxz-vm-dg-s1 Keepalived_vrrp[2436]: one or more VIP associated with VRID mismatch actual MASTER advert

應該為virtual id 問題可以通過命令查看

tcpdump -nn -i any net 224.0.0.0/8
#watch ipvsadm –ln 
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddressort Scheduler Flags
  -> RemoteAddressort           Forward Weight ActiveConn InActConn
TCP  61.164.122.8:80 wrr persistent 60
  -> 61.164.122.10:80            Route   3      0          0
  -> 61.164.122.9:80             Route   3      0          0

#tail –f /var/log/message  监听日志,查看状态,测试LVS负载均衡及高可用性是否 

有效。

5.停Master服务器的keepalived服务,查看BAKCUP服务器是否能正常接管服务。


6.单纯keepalived 实现高可用

! Configuration File for keepalived
global_defs {
        notification_email {
        [email protected]
        }
        notification_email_from [email protected]
        smtp_server 10.195.225.126
        smtp_connect_timeout 30
        router_id LVS_DEVEL
}
vrrp_script chk_http_port {
        script "/etc/keepalived/check-httpd.sh"
        interval 2
        weight 2
        }
vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 80
        priority 100
        authentication {
                auth_type PASS
                auth_pass eric
                }
        track_script {
                chk_http_port
                }
        virtual_ipaddress {
                10.207.238.82
                }
}

检测脚本文件

vim /etc/keepalived/check-httpd.sh

#!/bin/bash
# varsion 0.0.1
A=`ps -C httpd --no-header |wc -l`
if [ $A -eq 0 ];then
        /usr/sbin/httpd -k start
        sleep 3
                if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
                        killall keepalived
                fi
fi

测试是否正常



你可能感兴趣的:(keepalived)