Keepalived+LVS+nginx双机热备

Keepalived简介

什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了, 也就是所谓的高可用或热备,用来防止单点故障的发生。

 

Keepalived采用VRRP(virtual router redundancy protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现linux服务器的多机热备功能。VRRP是针对路由器的一种备份解决方案――由多台路由器组成一个热备组。通过共用的虚拟IP地址对外提供服务;每个热备组内同一时刻只有一台主服务器提供服务,其他服务器处于冗余状态,若当前在线的服务器失败,其他服务器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。

 

先放个拓扑图:

主机和备机全部安装keepalived

#yum install keepalived

主机:

#vim /etc/keepalived/keepalived.conf

 

! Configuration File for keepalived

 

global_defs {

   notification_email {

    54949@qq.com

   }

   notification_email_from root

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

 

vrrp_script chk_http_port {

    script "</dev/tcp/127.0.0.1/80"

    interval 1

    weight -2

}

 

vrrp_instance VI_1 {

    state MASTER

#    nopreempt

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        10.0.0.10

    }

# track_script {

#        chk_http_port

#    }

}

 

#虚拟服务器部分

virtual_server 10.0.0.10 80 {

    delay_loop 6 #设定运行情况检查时间 单位s

    lb_algo rr #负载调度算法 rr即轮叫算法

    lb_kind DR #设置LVS负载机制 NAT TUN DR 三种模式可选

    nat_mask 255.255.248.0

    persistence_timeout 0  #会话保持时间

                            #有了这个会话保持功能 用户的请求会被一直分发到某个服务节点

                            #如果用户在动态页面50s内没有任何动作,那么后面就会被分发到其他节点

                            #如果用户一直有动作,不受50s限制

 

    protocol TCP  #协议

    sorry_server 127.0.0.1 80

    #real server部分

    real_server 10.0.0.11 80 {

        weight 1  #服务节点权值,数字越大,权值越高

                  #权值的大小可以为不同性能的服务器分配不同的负载

                  #这样才能有效合理的利用服务器资源

        TCP_CHECK {  #状态检查部分

          connect_timeout 3 #3s无响应超时

          nb_get_retry 3  #重试次数

          delay_before_retry 3   #重试间隔

          connect_port 80 #连接端口

        }

    }

 

    #real server部分

    real_server 10.0.0.12 80 {

        weight 1  #服务节点权值,数字越大,权值越高

                  #权值的大小可以为不同性能的服务器分配不同的负载

                  #这样才能有效合理的利用服务器资源

        TCP_CHECK {  #状态检查部分

          connect_timeout 3 #3s无响应超时

          nb_get_retry 3  #重试次数

          delay_before_retry 3   #重试间隔

          connect_port 80 #连接端口

        }

    }

}

 

 

备机:

#vim /etc/keepalived/keepalived.conf

 

! Configuration File for keepalived

 

global_defs {

   notification_email {

    54949@qq.com

   }

   notification_email_from root

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

 

vrrp_script chk_http_port {

    script "</dev/tcp/127.0.0.1/80"

    interval 1

    weight -2

}

 

vrrp_instance VI_1 {

    state BACKUP

#    nopreempt

    interface eth0

    virtual_router_id 51

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        10.0.0.10

    }

# track_script {

#        chk_http_port

#    }

}

 

#虚拟服务器部分

virtual_server 10.0.0.10 80 {

    delay_loop 6 #设定运行情况检查时间 单位s

    lb_algo rr #负载调度算法 rr即轮叫算法

    lb_kind DR #设置LVS负载机制 NAT TUN DR 三种模式可选

    nat_mask 255.255.248.0

    persistence_timeout 0  #会话保持时间

                            #有了这个会话保持功能 用户的请求会被一直分发到某个服务节点

                            #如果用户在动态页面50s内没有任何动作,那么后面就会被分发到其他节点

                            #如果用户一直有动作,不受50s限制

 

    protocol TCP  #协议

 

    #real server部分

    real_server 10.0.0.11 80 {

        weight 1  #服务节点权值,数字越大,权值越高

                  #权值的大小可以为不同性能的服务器分配不同的负载

                  #这样才能有效合理的利用服务器资源

        TCP_CHECK {  #状态检查部分

          connect_timeout 3 #3s无响应超时

          nb_get_retry 3  #重试次数

          delay_before_retry 3   #重试间隔

          connect_port 80 #连接端口

        }

    }

 

    #real server部分

    real_server 10.0.0.12 80 {

        weight 1  #服务节点权值,数字越大,权值越高

                  #权值的大小可以为不同性能的服务器分配不同的负载

                  #这样才能有效合理的利用服务器资源

        TCP_CHECK {  #状态检查部分

          connect_timeout 3 #3s无响应超时

          nb_get_retry 3  #重试次数

          delay_before_retry 3   #重试间隔

          connect_port 80 #连接端口

        }

    }

}

 

 

/etc/init.d/keepalived start

 

后端rs上分别执行

vi /etc/init.d/lvs-node

 

#!/bin/bash
# description: Config realserver lo and apply noarp
#Written by :NetSeek http://www.linuxtone.org

SNS_VIP=10.129.5.10

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

case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_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)
ifconfig lo:0 down
route del $SNS_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 "RealServer Stoped"
;;
status)
# Status of LVS-DR real server.
islothere=`/sbin/ifconfig lo:0 | grep $SNS_VIP`
isrothere=`netstat -rn | grep "lo:0" | grep $SNS_VIP`
if [ ! "$islothere" -o ! "isrothere" ];then
# Either the route or the lo:0 device
# not found.
echo "LVS-DR real server Stopped."
else
echo "LVS-DR real server Running."
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac

exit 0

 

 

 

 

 

测试断开一个web服务或加入一个web服务

 

 

 

 

 keepalived 故障模拟

 

posted on 2016-12-22 16:26  cesar巅峰  阅读(179)  评论(0编辑  收藏  举报