keepalived原理和安装

一、高可用原理

1、VRRP是什么

keepalived主要使用的是VRRP功能,VRRP(VritrualRouterRedundancyProtocol,虚拟路由冗余协议)出现的目的就是解决静态路由出现的单点故障问题。

健康检查和失败切换是keepalived的两大核心功能。所谓的健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活;而失败切换主要是应用于配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳,当主负载均衡器出现问题时,由备负载均衡器承载对应的业务,从而在最大限度上减少流量损失,并提供服务的稳定性。
 

2、VRRP选举机制

VRRP路由器在运行过程中有三种状态:
1. Initialize状态: 系统启动后就进入Initialize,此状态下路由器不对VRRP报文做任何处理;
2. Master状态;
3. Backup状态;
一般主路由器处于Master状态,备份路由器处于Backup状态。

VRRP使用选举机制来确定路由器的状态,优先级选举:
1.VRRP组中IP拥有者。如果虚拟IP地址与VRRP组中的某台VRRP路由器IP地址相同,则此路由器为IP地址拥有者,这台路由器将被定位主路由器。
2.比较优先级。如果没有IP地址拥有者,则比较路由器的优先级,优先级的范围是0~255,优先级大的作为主路由器
3.比较IP地址。在没有Ip地址拥有者和优先级相同的情况下,IP地址大的作为主路由器。

如下图所示,虚拟IP为10.1.1.254,在VRRP组中没有IP地址拥有者,则比较优先级,很明显RB和RA的优先级要大于RC,则比较RA和RB的IP地址,RB的IP地址大。所以RB为组中的主路由器。

路由器使用VRRP 功能后,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为Master 路由器,优先级低的成为Backup 路由器。Master 拥有对外服务的虚拟IP,提供各种网络功能,并定期发送VRRP 报文,通知备份组内的其他设备自己工作正常;Backup 路由器只接收Master 发来的报文信息,用来监控Master 的运行状态。当Master 失效时,Backup 路由器进行选举,优先级高的Backup 将成为新的Master 。

抢占方式下,当Backup 路由器收到VRRP 报文后,会将自己的优先级与报文中的优先级进行比较。如果大于通告报文中的优先级,则成为Master 路由器;否则将保持Backup状态;

非抢占方式下,只要Master 路由器没有出现故障,备份组中的路由器始终保持Master 或Backup 状态,Backup 路由器即使随后被配置了更高的优先级也不会成为Master 路由器;

如果Backup 路由器的定时器超时后仍未收到Master 路由器发送来的VRRP报文,则认为Master 路由器已经无法正常工作,此时Backup 路由器会认为自己是Master 路由器,并对外发送VRRP报文。备份组内的路由器根据优先级选举出Master 路由 器,承担报文的转发功能。
 

二、安装

1、环境

vip:192.168.0.16

server1:192.168.1.60

server2:192.168.1.65

centos 7

2、两台机器都安装keepalived

# cd /usr/local/src 
# tar -zxvf keepalived-1.4.5.tar.gz 
# cd keepalived-1.4.5
# ./configure --prefix=/usr/local/keepalived 
# make && make install 

拷贝文件

mkdir /etc/keepalived 
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ 
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ #这个文件可能没有,需要手动创建
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 
cp /usr/local/keepalived/sbin/keepalived  /usr/sbin/

这个文件可能没有,需要手动创建,/usr/local/keepalived/etc/rc.d/init.d/keepalived ,内容:

#!/bin/sh
#
# Startup script for the Keepalived daemon
#
# processname: keepalived
# pidfile: /var/run/keepalived.pid
# config: /etc/keepalived/keepalived.conf
# chkconfig: - 21 79
# description: Start and stop Keepalived

# Source function library
. /etc/rc.d/init.d/functions

# Source configuration file (we set KEEPALIVED_OPTIONS there)
. /etc/sysconfig/keepalived

RETVAL=0

prog="keepalived"

start() {
    echo -n $"Starting $prog: "
    daemon keepalived ${KEEPALIVED_OPTIONS}
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
}

stop() {
    echo -n $"Stopping $prog: "
    killproc keepalived
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
}

reload() {
    echo -n $"Reloading $prog: "
    killproc keepalived -1
    RETVAL=$?
    echo
}

# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    reload)
        reload
        ;;
    restart)
        stop
        start
        ;;
    condrestart)
        if [ -f /var/lock/subsys/$prog ]; then
            stop
            start
        fi
        ;;
    status)
        status keepalived
        RETVAL=$?
        ;;
    *)
        echo "Usage: $0 {start|stop|reload|restart|condrestart|status}"
        RETVAL=1
esac

exit $RETVAL
chkconfig keepalived on #开机启动

 

三、配置

1、配置server1(主)

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
 
 
global_defs {
   router_id master #是运行keepalived的一个表示,多个集群设置不同。
}
 
 
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
}
 
 
 
vrrp_instance VI_1 {
    state MASTER    #指定实例初始状态,实际的MASTER和BACKUP是选举决定的。
    interface em1    #  绑定虚拟 IP 的网络接口,ifconfig 查看IP对应的网卡
    virtual_router_id 51 #设置VRID标记,多个集群不能重复(0..255)
    mcast_src_ip 192.168.1.60 #localIP,可以不要该属性
    priority 100 #设置优先级,优先级高的会被竞选为Master,Master要高于BACKUP,至少50
    nopreempt #设置为不抢占,说明:这个配置只能在BACKUP主机上面设置
    advert_int 1  #检查的时间间隔,默认1s
    authentication {
        auth_type PASS
        auth_pass 123456
    }
 
 
    track_script {
        chk_nginx
    }
 
 
    virtual_ipaddress { #设置VIP,可以设置多个,用于切换时的地址绑定。
        10.1.125.244  #vip
    }
}

2、配置server2(备机)

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
 
 
global_defs {
   router_id slave
}
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
}
 
 
vrrp_instance VI_1 {
    state BACKUP
    interface em1
    virtual_router_id 51
    mcast_src_ip 192.168.1.65 
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
 
 
    track_script {
        chk_nginx
    }
 
 
    virtual_ipaddress {
        192.168.1.16
    }
}

vi /etc/keepalived/nginx_check.sh 

 #!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

授权
# chmod +x /etc/keepalived/nginx_check.sh 

两台机器都添加vrrp协议到防火墙,vi /etc/sysconfig/iptables

service iptables restart 重启防火墙。

四、测试

我这里只做keepalived测试,nginx的测试大家自行处理。

1、启动

service keepalived start

2、通过 ip a 查看是不是只有一个台机器绑定的vip,正常应该只有一个台机器有vip,如下图192.168.1.60,

 

3、停掉主 keepalived,备机自动切换为master,备机日志:

4、启动主机得keepalived,会自动抢占为master,备机日志如下:

tail -200  /var/log/messages

 

这个架构nginx+keepalived方案的缺点:

只有一台服务器对外提供服务,使用率是50%。可以采用双nginx对外提供服务的架构方案,提高服务的使用率。

五、注意

1、当主机服务恢复后,vip的master会自动切回到主机。

2、查看keepalived日志

tail -f  /var/log/messages

3、如果主备发生网络不通分区的情况,可能让keepalived集群发生脑裂的情况,导致两台机器抢占vip。比如当防火墙隔离了keepalived的通讯端口112。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值