欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

keepalived原理和安装

程序员文章站 2022-07-05 20:00:49
...

一、高可用原理

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为组中的主路由器。
keepalived原理和安装

路由器使用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

keepalived原理和安装

service iptables restart 重启防火墙。

四、测试

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

1、启动

service keepalived start

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

keepalived原理和安装

 

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

keepalived原理和安装

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

tail -200  /var/log/messages

keepalived原理和安装

 

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

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

五、注意

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

2、查看keepalived日志

tail -f  /var/log/messages

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