Keepalived安装与原理

一、概念

  Keepalived是Linux下一个轻量级别的高可用解决方案,也是一个基于VRRP协议【Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种容错协议,它保证当主机的下一跳路由器出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性】来实现的 LVS 服务高可用方案,可以利用其来解决单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。Keepalived一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。

二、安装过程

keepalived下载地址:

  http://www.keepalived.org/download.html

执行命令:
[root@localhost server]# tar -zxvf keepalived-2.2.2.tar.gz
[root@localhost server]# cd keepalived-2.2.2
[root@localhost keepalived-2.2.2]# yum install gcc
[root@localhost keepalived-2.2.2]# yum -y install libnl libnl-devel
[root@localhost keepalived-2.2.2]# ./configure --prefix=/usr/local/keepalived --sysconf=/etc
[root@localhost keepalived-2.2.2]# make && make install
[root@localhost keepalived-2.2.2]# whereis keepalived
[root@localhost keepalived-2.2.2]# cp /root/app/server/keepalived-2.2.2/keepalived/etc/init.d/keepalived /etc/init.d/
[root@localhost etc]# cp /root/app/server/keepalived-2.2.2/keepalived/etc/ sysconfig/keepalived /etc/sysconfig/
[root@localhost etc]# systemctl daemon-reload
[root@localhost etc]# systemctl start keepalived.service

三、修改配置

自动重启nginx配置文件:check_nginx_alive_or_not.sh
[root@localhost etc]# vim check_nginx_alive_or_not.sh
[root@localhost etc]# chmod +x check_nginx_alive_or_not.sh
[root@localhost etc]# ./check_nginx_alive_or_not.sh
#!/bin/bash

A=`ps -C nginx --no-header |wc -l`
# 判断nginx是否宕机,如果宕机了,尝试重启
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    # 等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机
    sleep 3
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
       kill -9 keepalived
    fi
fi
修改keepalived.conf
[root@localhost keepalived]# cd /etc/keepalived
[root@localhost keepalived]# vim keepalived.conf
global_defs {
	 # 路由id:当前安装keepalived节点主机的标识符,全局唯一
   router_id keepalive_192.168.1.8
}
vrrp_script check_nginx_alive{
   script "/etc/keepalived/check_nginx_alive_or_not.sh"
   interval 2 # 每隔两秒运行上一行脚本
   weight 10 # 如果脚本运行失败,则升级权重 +10
}
vrrp_instance VI_1 {
		# 表示状态,当前192.168.1.8主节点,MASTER/BACKUP
    state MASTER
    # 当前实例绑定的网卡
    interface enp0s8
    # 保证主备节点一致
    virtual_router_id 51
    # 权重,优先级越高,在MASTER挂掉以后,谁就能成为MASTER
    priority 100
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # VIP 虚拟ip
    virtual_ipaddress {
    	  # 注意:主备两台的vip都是一样的,绑定到同一个vip
        192.168.200.16
    }
}

四、实现keepalived双机主备高可用

keepalived双机主备

192.168.1.8主服务器配置文件:
global_defs {
   router_id keepalive_192.168.1.8
}
vrrp_script check_nginx_alive{
   script "/etc/keepalived/check_nginx_alive_or_not.sh"
   interval 2 
   weight 10 
}
vrrp_instance VI_1 {
    state MASTER
    interface enp0s8
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16
    }
}
192.168.1.16备用服务器配置文件:
global_defs {
   router_id keepalive_192.168.1.16
}
vrrp_script check_nginx_alive{
   script "/etc/keepalived/check_nginx_alive_or_not.sh"
   interval 2
   weight 10 
}
vrrp_instance VI_1 {
    state BACKUP
    interface enp0s8
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16
    }
}

五、实现keepalived双主热备

注意!!!需要配置云服务的 DNS 解析配置和负载均衡

keepalived双主热备

192.168.1.8服务器配置文件:
global_defs {
   router_id keepalive_192.168.1.8
}
vrrp_script check_nginx_alive{
   script "/etc/keepalived/check_nginx_alive_or_not.sh"
   interval 2 
   weight 10 
}
vrrp_instance VI_1 {
    state MASTER
    interface enp0s8
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
    		check_nginx_alive   # 追踪 nginx 脚本
		}
    virtual_ipaddress {
        192.168.200.16
    }
}
vrrp_instance VI_2 {
    state BACKUP
    interface enp0s8
    virtual_router_id 52
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.17
    }
}
192.168.1.16服务器配置文件:
global_defs {
   router_id keepalive_192.168.1.16
}
vrrp_script check_nginx_alive{
   script "/etc/keepalived/check_nginx_alive_or_not.sh"
   interval 2
   weight 10 
}
vrrp_instance VI_1 {
    state BACKUP
    interface enp0s8
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
    		check_nginx_alive   # 追踪 nginx 脚本
		}
    virtual_ipaddress {
        192.168.200.16
    }
}
vrrp_instance VI_2 {
    state MASTER
    interface enp0s8
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.17
    }
}

六、VRRP协议

  Keepalived 是以 VRRP 协议为实现基础的,即虚拟路由冗余协议

  可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master 和多个 backup,master 上面有一个对外提供服务的 VIP(Virtual IP Address)(该路由器所在局域网内其他机器的默认路由为该 vip),master 会发组播,当 backup 收不到 vrrp 包时就认为 master 宕掉了,这时就需要根据 VRRP 的优先级来选举一个 backup 当 master。这样的话就可以保证路由器的高可用了。

七、TCP层已经有keepalive,为什么应用层的Nginx还需要keepalive?

  我理解的是,使用TCP的keepalive的保证传输层连接的可用性,默认配置都是2小时的检测周期。Nginx的keepalive来保证应用层的连接的可用性。一个在第四层传输层上保证可用性,一个在第七层应用层上保证应用层协议连接的可用性。 有本书里面有提到: 为什么TCP keepalive不能替代应用层心跳?心跳除了说明应用程序还活着(进程还在,网络通畅),更重要的是表明应用程序还能正常工作。而TCP keepalive由操作系统负责探查,即便进程死锁或者阻塞,操作系统也会如常收发TCP keepalive信息,对方无法得知这一异常。

参考:

https://zhuanlan.zhihu.com/p/143295216

https://zhuanlan.zhihu.com/p/73484447

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨润泽林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值